[基础科学] 机器学习的数学知识 - Learn About
[基础科学] 机器学习的数学知识 - Learn About
[基础科学] 机器学习的数学知识 Learn About [基础科学] 机器学习的数学知识 Learn About Modified April 10, 2025 1855 1950 3. 当P=∞,切比雪夫距离 d(A,B)=max(∣A 1 −B 1 ∣,∣A 2 −B 2 ∣,∣A 3 −B 3 ∣)d(A,B)=max(∣1−4∣,∣2−0∣,∣3−1∣)d(A,B)=max(3,2,2)d(A,B)=3 4. 当P=3,一般闵可夫斯基距离 d(A,B)=( i=1 ∑ 3 ∣A i −B i ∣ 3 ) 3 1 d(A,B)=((1−4) 3 +(2−0) 3 +(3−1) 3 ) 3 1 d(A,B)=((−3) 3 +2 3 +2 3 ) 3 1 d(A,B)=(−27+8+8) 3 1 d(A,B)=(−11) 3 1 d(A,B)≈2.224 • 如果数据维度较高且各维度差异较大,可以选择 p=1(曼哈顿距离),因为它对高维数据更为稳定。 • 如果数据维度较低且各维度差异较小,可以选择 p=2(欧几里得距离),因为它符合直观的几何距离概念。 • 如果数据中存在异常值且希望减少其影响,可以选择 p→∞(切比雪夫距离)。 • 对于需要平衡各维度差异的场景,可以选择适当的 p 值,通过实验确定最佳值。 在实际应用中,可以通过交叉验证或网格搜索等方法来选择最优的 p 值。具体步骤如下: 1. 定义候选 p 值集合,例如 p=[1,1.5,2,3,4,5,∞]。 2. 计算不同 p 值下的距离,并评估模型的性能指标(如准确率、召回率、F1分数等)。 3. 选择性能最佳的 p 值。 通过这种方式,可以找到最适合特定数据集和应用场景的 pp 值。 2. 矩阵的基本运算 2.1 矩阵加减法 只有当矩阵具有相同维度时,才可以运用矩阵加减法 假设有两个矩阵: A= ⎝ ⎛ 1 3 5 2 4 6 ⎠ ⎞ B= ⎝ ⎛ 7 9 11 8 10 12 ⎠ ⎞ C=A+B= ⎝ ⎛ 1+7 3+9 5+11 2+8 4+10 6+12 ⎠ ⎞ = ⎝ ⎛ 8 12 16 10 14 18 ⎠ ⎞ D=A−B= ⎝ ⎛ 1−7 3−9 5−11 2−8 4−10 6−12 ⎠ ⎞ = ⎝ ⎛ −6 −6 −6 −6 −6 −6 ⎠ ⎞ 2.2 标量乘法 有点无聊的基础概念,就是把矩阵前面的系数乘以矩阵内的每个元素 B=kA=2× ⎝ ⎛ 1 3 5 2 4 6 ⎠ ⎞ = ⎝ ⎛ 2×1 2×3 2×5 2×2 2×4 2×6 ⎠ ⎞ = ⎝ ⎛ 2 6 10 4 8 12 ⎠ ⎞ 2.3 矩阵乘法 矩阵乘法适用于不同尺寸的矩阵 假设A是一个3 2的矩阵,B是一个2 3的矩阵,两个矩阵相乘会得到一个3 3的矩阵。 c ij = k=1 ∑ n a ik b kj A= ⎝ ⎛ 1 3 5 2 4 6 ⎠ ⎞ ,B=( 7 10 8 11 9 12 ) C=AB= ⎝ ⎛ 1 3 5 2 4 6 ⎠ ⎞ ( 7 10 8 11 9 12 )= ⎝ ⎛ 1⋅7+2⋅10 3⋅7+4⋅10 5⋅7+6⋅10 1⋅8+2⋅11 3⋅8+4⋅11 5⋅8+6⋅11 1⋅9+2⋅12 3⋅9+4⋅12 5⋅9+6⋅12 ⎠ ⎞ = ⎝ ⎛ 27 43 59 30 48 66 33 53 73 ⎠ ⎞ 2.4 矩阵分解 理解了矩阵乘法的原理以后,就可以进一步学习矩阵分解了。矩阵分解(Matrix Decomposition)是将一个矩阵表示为若干个矩阵的乘积的过程。这种技术在数学、计算机科学、工程学等多个领域有着广泛的应用,特别是在数值分析、线性代数、信号处理、机器学习等领域。矩阵分解可以简化问题的求解过程,提高算法的效率,或者帮助揭示数据的内在结构。 2.4.1 LU分解 将一个方阵 A分解成一个下三角矩阵 L (右上角为0)和一个上三角矩阵 U (左下角为0)的乘积,即 A=LU。 A=( 2 4 1 3 ) 初始化: L=( 1 l 21 0 1 ),U=( u 11 0 u 12 u 22 ) 计算 1∗u 11 +0∗0=2;u 11 =2 l 21 ∗u 11 +1∗0=4;l 21 =2 1∗u 12 +0∗u 22 =1;u 12 =1 l 21 ∗u 12 +1∗u 22 =3;u 22 =1 结果: L=( 1 2 0 1 ),U=( 2 0 1 1 ) 2.4.2 QR分解 将一个矩阵 A 分解成一个正交矩阵 Q 和一个上三角矩阵 R 的乘积,即 A=QR。 假设我们有一个 m×n 的矩阵 A,其列向量为 a1,a2,…,an。我们的目标是找到一组正交基 u1,u2,…,un,并将这些正交基单位化为 q1,q2,…,qn。 A=( 1 3 2 4 ) 初始化 a 1 =( 1 3 ),a 2 =( 2 4 ) 计算正交基 u 1 =a 1 =( 1 3 ); u 2 =a 2 − u 1 ⋅u 1 a 2 ⋅u 1 u 1 计算点积 a 2 ⋅u 1 =2⋅1+4⋅3=14;u 1 ⋅u 1 =1 2 +3 2 =10 u 2 =( 2 4 )− 10 14 ( 1 3 )=( 2 4 )−( 1.4 4.2 )=( 0.6 −0.2 ) 单位化 ∥u 1 ∥= 1 2 +3 2 = 10 ; q 1 = ∥u 1 ∥ u 1 = 10 1 ( 1 3 )=( 10 1 10 3 ) ∥u 2 ∥= 0.6 2 +(−0.2) 2 = 0.36+0.04 = 0.4 ; q 2 = ∥u 2 ∥ u 2 = 0.4 1 ( 0.6 −0.2 )=( 0.4 0.6 0.4 −0.2 ) 构建Q和R 矩阵Q由单位正交向量组成 Q=( 10 1 10 3 0.4 0.6 0.4 −0.2 ) 矩阵R由正交化过程中的系数组成 R=( ∥u 1 ∥ 0 ∥u 1 ∥ a 2 ⋅u 1 ∥u 2 ∥ )=( 10 0 10 14 0.4 ) 验证A = QR 2.4.3 奇异值分解 奇异值分解将一个 m×n 的矩阵 A 分解为三个矩阵的乘积 A=UΣV T • U 是一个 m×m 的正交矩阵(其列向量是 AA T 的特征向量,且这些向量是单位正交的)。 • Σ 是一个 m×n的对角矩阵,其对角线上的元素称为奇异值,这些奇异值是非负的,并按降序排列。 • V是一个 n×n 的正交矩阵(其列向量是 A T A 的特征向量,且这些向量是单位正交的)。 考虑矩阵A A=( 1 4 2 5 3 6 ) Code block Bash import numpy as np 定义矩阵 A A = np.array([[1, 2, 3], [4, 5, 6]]) 进行奇异值分解 U, S, VT = np.linalg.svd(A) 构造 Σ 矩阵 Sigma = np.zeros((2, 3)) np.fill diagonal(Sigma, S) 输出结果 print("U:") print(U) print("\nSigma:") print(Sigma) print("\nV^T:") print(VT) 重构矩阵 A A reconstructed = U @ Sigma @ VT 输出重构的矩阵 A print("Reconstructed A:") print(A reconstructed) Σ=( 9.5080320 0 0 0.7728696 0 0 ) V T = ⎝ ⎛ −0.42866713 0.80596391 0.40824829 −0.56630692 0.11238241 −0.81649658 −0.7039467 −0.58119908 0.40824829 ⎠ ⎞ U=( −0.3863177 −0.92236578 −0.92236578 0.3863177 ) 3. 条件概率 条件概率是指在事件B已经发生的前提下,事件A发生的概率,记作 P(A∣B) P(A∣B)= P(B) P(A∩B) 其中P(A∩B)是A和B同时发生的联合概率,P(B)为事件B发生的概率 假设垃圾邮件中出现单词“免费”的概率是 0.3 正常邮件中出现“免费”的概率是 0.01 所有邮件中垃圾邮件的占比是 0.2,正常邮件0.8 当一封邮件包含“免费”,它是垃圾邮件的概率是 P(A∣B)= 0.3∗0.2+0.01∗0.8 0.3∗0.2 ≈0.882 4. 高斯分布(连续分布) 高斯分布(又称正态分布)是连续型概率分布,由均值(μ)和方差(σ²)完全描述。 其概率密度函数(PDF)为: 模拟高斯分布图 假设一个城市的温度均值为25度,标准差=5度 Code block Bash import numpy as np import matplotlib.pyplot as plt 主要参数 mu = 25 分布的均值,决定曲线的中心位置。 sigma = 5 标准差(方差开根号),决定曲线的“宽度”(数据分散程度)。 绘制数据点 x = np.linspace(mu 4 sigma, mu + 4 sigma, 1000) y = (1/(sigma np.sqrt(2 np.pi))) np.exp( (x mu) 2/(2 sigma 2)) 创建图形 plt.figure(figsize=(10, 6)) plt.plot(x, y, label=f'N(μ={mu}, σ²={sigma 2})') Configure labels and style plt.title('Gaussian Probability Distribution', fontsize=15) plt.xlabel('Value', fontsize=12) plt.ylabel('Probability Density', fontsize=12) plt.grid(True, alpha=0.3, linestyle=' ') 图例 sigma percentages = { 1: 68.27, 2: 95.45, 3: 99.73 } 3. 当P=∞,切比雪夫距离 d(A,B)=max(∣A 1 −B 1 ∣,∣A 2 −B 2 ∣,∣A 3 −B 3 ∣)d(A,B)=max(∣1−4∣,∣2−0∣,∣3−1∣)d(A,B)=max(3,2,2)d(A,B)=3 4. 当P=3,一般闵可夫斯基距离 d(A,B)=( i=1 ∑ 3 ∣A i −B i ∣ 3 ) 3 1 d(A,B)=((1−4) 3 +(2−0) 3 +(3−1) 3 ) 3 1 d(A,B)=((−3) 3 +2 3 +2 3 ) 3 1 d(A,B)=(−27+8+8) 3 1 d(A,B)=(−11) 3 1 d(A,B)≈2.224 • 如果数据维度较高且各维度差异较大,可以选择 p=1(曼哈顿距离),因为它对高维数据更为稳定。 • 如果数据维度较低且各维度差异较小,可以选择 p=2(欧几里得距离),因为它符合直观的几何距离概念。 • 如果数据中存在异常值且希望减少其影响,可以选择 p→∞(切比雪夫距离)。 • 对于需要平衡各维度差异的场景,可以选择适当的 p 值,通过实验确定最佳值。 在实际应用中,可以通过交叉验证或网格搜索等方法来选择最优的 p 值。具体步骤如下: 1. 定义候选 p 值集合,例如 p=[1,1.5,2,3,4,5,∞]。 2. 计算不同 p 值下的距离,并评估模型的性能指标(如准确率、召回率、F1分数等)。 3. 选择性能最佳的 p 值。 通过这种方式,可以找到最适合特定数据集和应用场景的 pp 值。 2. 矩阵的基本运算 2.1 矩阵加减法 只有当矩阵具有相同维度时,才可以运用矩阵加减法 假设有两个矩阵: A= ⎝ ⎛ 1 3 5 2 4 6 ⎠ ⎞ B= ⎝ ⎛ 7 9 11 8 10 12 ⎠ ⎞ C=A+B= ⎝ ⎛ 1+7 3+9 5+11 2+8 4+10 6+12 ⎠ ⎞ = ⎝ ⎛ 8 12 16 10 14 18 ⎠ ⎞ D=A−B= ⎝ ⎛ 1−7 3−9 5−11 2−8 4−10 6−12 ⎠ ⎞ = ⎝ ⎛ −6 −6 −6 −6 −6 −6 ⎠ ⎞ 2.2 标量乘法 有点无聊的基础概念,就是把矩阵前面的系数乘以矩阵内的每个元素 B=kA=2× ⎝ ⎛ 1 3 5 2 4 6 ⎠ ⎞ = ⎝ ⎛ 2×1 2×3 2×5 2×2 2×4 2×6 ⎠ ⎞ = ⎝ ⎛ 2 6 10 4 8 12 ⎠ ⎞ 2.3 矩阵乘法 矩阵乘法适用于不同尺寸的矩阵 假设A是一个3 2的矩阵,B是一个2 3的矩阵,两个矩阵相乘会得到一个3 3的矩阵。 c ij = k=1 ∑ n a ik b kj A= ⎝ ⎛ 1 3 5 2 4 6 ⎠ ⎞ ,B=( 7 10 8 11 9 12 ) C=AB= ⎝ ⎛ 1 3 5 2 4 6 ⎠ ⎞ ( 7 10 8 11 9 12 )= ⎝ ⎛ 1⋅7+2⋅10 3⋅7+4⋅10 5⋅7+6⋅10 1⋅8+2⋅11 3⋅8+4⋅11 5⋅8+6⋅11 1⋅9+2⋅12 3⋅9+4⋅12 5⋅9+6⋅12 ⎠ ⎞ = ⎝ ⎛ 27 43 59 30 48 66 33 53 73 ⎠ ⎞ 2.4 矩阵分解 理解了矩阵乘法的原理以后,就可以进一步学习矩阵分解了。矩阵分解(Matrix Decomposition)是将一个矩阵表示为若干个矩阵的乘积的过程。这种技术在数学、计算机科学、工程学等多个领域有着广泛的应用,特别是在数值分析、线性代数、信号处理、机器学习等领域。矩阵分解可以简化问题的求解过程,提高算法的效率,或者帮助揭示数据的内在结构。 2.4.1 LU分解 将一个方阵 A分解成一个下三角矩阵 L (右上角为0)和一个上三角矩阵 U (左下角为0)的乘积,即 A=LU。 A=( 2 4 1 3 ) 初始化: L=( 1 l 21 0 1 ),U=( u 11 0 u 12 u 22 ) 计算 1∗u 11 +0∗0=2;u 11 =2 l 21 ∗u 11 +1∗0=4;l 21 =2 1∗u 12 +0∗u 22 =1;u 12 =1 l 21 ∗u 12 +1∗u 22 =3;u 22 =1 结果: L=( 1 2 0 1 ),U=( 2 0 1 1 ) 2.4.2 QR分解 将一个矩阵 A 分解成一个正交矩阵 Q 和一个上三角矩阵 R 的乘积,即 A=QR。 假设我们有一个 m×n 的矩阵 A,其列向量为 a1,a2,…,an。我们的目标是找到一组正交基 u1,u2,…,un,并将这些正交基单位化为 q1,q2,…,qn。 A=( 1 3 2 4 ) 初始化 a 1 =( 1 3 ),a 2 =( 2 4 ) 计算正交基 u 1 =a 1 =( 1 3 ); u 2 =a 2 − u 1 ⋅u 1 a 2 ⋅u 1 u 1 计算点积 a 2 ⋅u 1 =2⋅1+4⋅3=14;u 1 ⋅u 1 =1 2 +3 2 =10 u 2 =( 2 4 )− 10 14 ( 1 3 )=( 2 4 )−( 1.4 4.2 )=( 0.6 −0.2 ) 单位化 ∥u 1 ∥= 1 2 +3 2 = 10 ; q 1 = ∥u 1 ∥ u 1 = 10 1 ( 1 3 )=( 10 1 10 3 ) ∥u 2 ∥= 0.6 2 +(−0.2) 2 = 0.36+0.04 = 0.4 ; q 2 = ∥u 2 ∥ u 2 = 0.4 1 ( 0.6 −0.2 )=( 0.4 0.6 0.4 −0.2 ) 构建Q和R 矩阵Q由单位正交向量组成 Q=( 10 1 10 3 0.4 0.6 0.4 −0.2 ) 矩阵R由正交化过程中的系数组成 R=( ∥u 1 ∥ 0 ∥u 1 ∥ a 2 ⋅u 1 ∥u 2 ∥ )=( 10 0 10 14 0.4 ) 验证A = QR 2.4.3 奇异值分解 奇异值分解将一个 m×n 的矩阵 A 分解为三个矩阵的乘积 A=UΣV T • U 是一个 m×m 的正交矩阵(其列向量是 AA T 的特征向量,且这些向量是单位正交的)。 • Σ 是一个 m×n的对角矩阵,其对角线上的元素称为奇异值,这些奇异值是非负的,并按降序排列。 • V是一个 n×n 的正交矩阵(其列向量是 A T A 的特征向量,且这些向量是单位正交的)。 考虑矩阵A A=( 1 4 2 5 3 6 ) Σ=( 9.5080320 0 0 0.7728696 0 0 ) V T = ⎝ ⎛ −0.42866713 0.80596391 0.40824829 −0.56630692 0.11238241 −0.81649658 −0.7039467 −0.58119908 0.40824829 ⎠ ⎞ U=( −0.3863177 −0.92236578 −0.92236578 0.3863177 ) 3. 条件概率 条件概率是指在事件B已经发生的前提下,事件A发生的概率,记作 P(A∣B) P(A∣B)= P(B) P(A∩B) 其中P(A∩B)是A和B同时发生的联合概率,P(B)为事件B发生的概率 假设垃圾邮件中出现单词“免费”的概率是 0.3 正常邮件中出现“免费”的概率是 0.01 所有邮件中垃圾邮件的占比是 0.2,正常邮件0.8 当一封邮件包含“免费”,它是垃圾邮件的概率是 P(A∣B)= 0.3∗0.2+0.01∗0.8 0.3∗0.2 ≈0.882 4. 高斯分布(连续分布) 高斯分布(又称正态分布)是连续型概率分布,由均值(μ)和方差(σ²)完全描述。 其概率密度函数(PDF)为: 模拟高斯分布图 假设一个城市的温度均值为25度,标准差=5度 假设某天的温度为38度,根据 3σ 法则 25+ 3 5 = 10 40度,38度在范围内。计算 z−score= 5 38−25 =2.6σ 是一个比较大的值,对应图中的红点,PDF = 0.0027 是一个非常低的概率 CDF(Cumulative Distribution Function,累积分布函数)是描述随机变量 X取值小于或等于某一特定值 x 的概率的函数。 如果在模型训练里,特征符合高斯分布(连续的正态概率分布),使用z score归一化可以加速模型的收敛速度,也可以应用 3σ 的理论去检测异常值。 5. 离散分布 特征 离散分布 连续分布 定义 随机变量取可数个离散值(如整数) 随机变量取不可数无限个连续值(如实数) 概率描述工具 概率质量函数(PMF) 概率密度函数(PDF) 概率计算 直接求和:P(X=k) 积分区间概率:P(a≤X≤b) 单点概率 有意义(如 P(X=1)=0.5) 恒为0 P(X=c)=0,需计算区间) 图像表示 柱状图(每个值对应一个柱子高度) 连续曲线(曲线下面积=1) 常见例子 伯努利分布、二项分布、泊松分布 高斯分布、均匀分布、指数分布 特征 特征 离散分布 离散分布 连续分布 连续分布 定义 定义 随机变量取可数个离散值(如整数) 随机变量取可数个离散值(如整数) 随机变量取不可数无限个连续值(如实数) 随机变量取不可数无限个连续值(如实数) 概率描述工具 概率描述工具 概率质量函数(PMF) 概率质量函数(PMF) 概率密度函数(PDF) 概率密度函数(PDF) 概率计算 概率计算 直接求和:P(X=k) 直接求和:P(X=k) 积分区间概率:P(a≤X≤b) 积分区间概率:P(a≤X≤b) 单点概率 单点概率 有意义(如 P(X=1)=0.5) 有意义(如 P(X=1)=0.5) 恒为0 P(X=c)=0,需计算区间) 恒为0 P(X=c)=0,需计算区间) 图像表示 图像表示 柱状图(每个值对应一个柱子高度) 柱状图(每个值对应一个柱子高度) 连续曲线(曲线下面积=1) 连续曲线(曲线下面积=1) 常见例子 常见例子 伯努利分布、二项分布、泊松分布 伯努利分布、二项分布、泊松分布 高斯分布、均匀分布、指数分布 高斯分布、均匀分布、指数分布 和高斯分布不同,直观理解可以理解为掷骰子,1 6分别有出现的概率,可以表达为柱状图,但不是一个连续的曲线(不可微分)。这里其实有一些量子物理的关联了,世界上的物质并不是连续的,而是由一个个极小的单位离散分布的。 离散分布在机器学习里通常被用于文本分类,或者点击率预测(二分类问题) 1. 向量距离的计算 1.1 余弦相似度 用余弦相似度理解lookalike的相似推荐算法 假设有两个用户A和B,他们对五部电影进行了评分,评分范围为1到5。 用户/电影 《肖申克的救赎》 剧情/犯罪 《疯狂动物城》 动画/喜剧 《星际穿越》 科幻/冒险 《泰坦尼克号》 爱情/灾难 《功夫熊猫》 动画/动作 用户A 3 0 4 5 0 用户B 4 0 3 4 2 用户/电影 用户/电影 《肖申克的救赎》 剧情/犯罪 《肖申克的救赎》 剧情/犯罪 《疯狂动物城》 动画/喜剧 《疯狂动物城》 动画/喜剧 《星际穿越》 科幻/冒险 《星际穿越》 科幻/冒险 《泰坦尼克号》 爱情/灾难 《泰坦尼克号》 爱情/灾难 《功夫熊猫》 动画/动作 《功夫熊猫》 动画/动作 用户A 用户A 3 3 0 0 4 4 5 5 0 0 用户B 用户B 4 4 0 0 3 3 4 4 2 2 余弦函数的计算公式为: cos(θ)= ∥A∥∥B∥ A⋅B cos(θ) 的区间为( 1,1),当值越接近1,说明两个高维向量的相似度越高 其中A·B是向量AB的点积 ||A||和||B||是向量AB的模长 A·B = 3 4+0 0+4 3+5 4+0 2 = 44 ||A|| = 3 2 +0 2 +4 2 +5 2 +0 2 = 50 ≈7.07 ||B|| = 4 2 +0 2 +3 2 +4 2 +2 2 = 45 ≈6.71 cos(θ)= 7.07∗6.71 44 ≈0.928 结论:用户A和用户B的行为高度相似,当用户A看了一部新的电影,系统会倾向给用户B推荐同样的电影。 1.2 欧几里得距离 欧式距离是空间中两点之间的直线距离。为了计算空间距离,可以使用毕达哥拉斯定理。将两个向量视为空间中的点,找到对应分量之间的差,将这些差平方求和,然后取平方根。(就是勾股定理) 对于向量a = (a1,a2,...,an) b = (b1,b2,...,bn),欧几里得距离为: d= (a 1 −b 1 ) 2 +(a 2 −b 2 ) 2 +...+(a n −B n ) 2 假设有3个多维向量 • A = (1, 2, 3) • B = (4, 5, 6) • C = (1, 3, 2) d AB = (4−1) 2 +(5−2) 2 +(6−3) 2 = 27 d AC = (1−1) 2 +(3−2) 2 +(2−3) 2 = 2 d BC = (4−1) 2 +(5−3) 2 +(6−2) 2 = 29 结论:如果以A为中心点,所有其他点到A的总距离最短,所以A可以作为这一组数据的中心点(质心)做聚类分析。 1.3 曼哈顿距离 大概的意思就是,城市的街道是网格状的,比如曼哈顿...我们没法从a点直接通过最短路径飞到b点,而是要沿着街道走。所以曼哈顿距离也叫出租车距离或者L1范数 假设二维空间里有2个点 a (2,3) b(5,7) 曼哈顿距离计算为 |a1 b1| + |a2 b2| = |2 5| + |3 7| = 7 相比欧几里得距离(开放空间),曼哈顿距离更适合计算高维数据(计算量更小),含有异常值的数据(对极值的敏感度相对较低),网格状结构的数据(对角线无效)以及特征重要性。 1.4 汉明距离 用于测量两个相等长度字符串之间的差异,也可以用于计算相等长度的向量。主要用于通信系统的错误检测和纠正,代码效率的检查,以及密码学算法安全性分析。 假设我们使用了一个简单的流密码算法,该算法通过将明文与伪随机密钥流进行异或操作来生成密文。现在,我们有两段长度相同的明文和相应的密文: • 明文P1: 10101010 • 明文P2: 10111010 • 密钥K: 01010101 根据流密码的工作原理,密文C可以通过以下公式计算得到: C=P⊕K C1=P1⊕K=10101010⊕01010101=11111111 C2=P2⊕K=10111010⊕01010101=11101111 计算汉明距离 Hamming Distance(C1,C2)= i=1 ∑ n 1 C1 i =C2 i 结论:当C1≠C2时,汉明距离为1,否则为0。在这个例子中,明文P1和P2仅在第4位不同,导致了密文C1和C2也仅在第3位不同。如果密文的变化与明文的变化之间存在明显的模式,攻击者可能利用这些模式来进行差分密码分析,从而削弱加密的安全性。 为了提升密码的安全性,可以使用下面的方法优化密文的变化: 1. 使用更强的密钥生成算法 确保密钥流的生成算法足够复杂且不可预测。常见的做法包括使用非线性反馈移位寄存器(NLFSR)、混沌系统、或者基于哈希函数的密钥生成方法。这样可以增加密钥流的随机性和不可预测性。 2. 引入密钥调度 在生成密钥流时,可以引入密钥调度机制,使得密钥流不仅依赖于初始密钥,还依赖于其他动态因素,如时间戳、随机数等。这样可以增加密钥流的多样性和复杂性。 3. 增加混淆和扩散 在加密过程中,除了简单的异或操作外,还可以引入更多的混淆和扩散技术。例如,可以使用S盒(替换盒)和P盒(置换盒)来增加数据的混乱度和扩散效果。这样可以使得明文的微小变化导致密文的显著变化。 4. 使用多轮加密 类似于分组密码中的多轮加密,可以在流密码中引入多轮处理。每一轮可以包含不同的操作,如异或、置换、非线性变换等。这样可以增加加密的复杂性,使得攻击者更难通过简单的差分分析来推断密钥。 5. 动态密钥更新 在加密过程中,可以定期或不定期地更新密钥。这样可以防止长时间使用同一密钥导致的安全风险。例如,可以在每个消息块或每个会话结束后更新密钥。 6. 随机化初始向量(IV) 在流密码中,初始向量(IV)的选择也很重要。使用随机化的IV可以增加密文的多样性,使得相同的明文在不同的会话中生成不同的密文。 还是拿上面的数据举例: 1. 初始的密钥为: K 0 =01010101 2. 使用一个非线性函数 f 来生成新的密钥流: K 1 =f(K 0 ,timestamp,random number) 3. 将明文分成多个块,每块进行多轮处理。每一轮使用不同的密钥和操作: Round 1: C1 1 =P1 1 ⊕K 1 Round 2: C1 2 =S(C1 1 )⊕K 2 Round 3: C1 3 =P(C1 2 )⊕K 3 4. 最终密文 C1=C1 3 1.5 闵可夫斯基距离 闵可夫斯基距离是欧几里得和曼哈顿距离的推广。由参数“p”控制的灵活度量,这个超参数决定距离计算的功率 闵可夫斯基距离的计算公式: d(A,B)=( i=1 ∑ n ∣A i −B i ∣ p ) p 1 其中: • x和 y是两个向量,有n个维度。 • p是一个参数,决定了距离的类型(较大的P强调较大的坐标值差异,较小的P弱化坐标值差异): ◦ 当 p=1时,闵可夫斯基距离变为曼哈顿距离。 ◦ 当 p=2 时,闵可夫斯基距离变为欧几里得距离。 ◦ 当 p→∞ 时,闵可夫斯基距离变为切比雪夫距离。 ◦ 当 p=1时,闵可夫斯基距离变为曼哈顿距离。 ◦ 当 p=2 时,闵可夫斯基距离变为欧几里得距离。 ◦ 当 p→∞ 时,闵可夫斯基距离变为切比雪夫距离。 假设我们有两个点 A和 B,每个点都有三个维度: • 点 A:(1,2,3) • 点 B:(4,0,1) 1. 当P=1,曼哈顿距离 d(A,B)= i=1 ∑ 3 ∣A i −B i ∣d(A,B)=∣1−4∣+∣2−0∣+∣3−1∣d(A,B)=3+2+2d(A,B)=7 2. 当P=2,欧几里得距离 d(A,B)=( i=1 ∑ 3 ∣A i −B i ∣ 2 ) 2 1 d(A,B)=((1−4) 2 +(2−0) 2 +(3−1) 2 ) 2 1 d(A,B)=((−3) 2 +2 2 +2 2 ) 2 1 d(A,B)=(9+4+4) 2 1 d(A,B)=(17) 2 1 d(A,B)≈4.123