【AI算法岗面试八股面经【超全整理】——机器学习】

AI算法岗面试八股面经【超全整理】

  • 概率论【AI算法岗面试八股面经【超全整理】——概率论】
  • 信息论【AI算法岗面试八股面经【超全整理】——信息论】
  • 机器学习【AI算法岗面试八股面经【超全整理】——机器学习】
  • 深度学习【AI算法岗面试八股面经【超全整理】——深度学习】
  • NLP【AI算法岗面试八股面经【超全整理】——NLP】
  • CV

目录

    • 1、回归损失函数
    • 2、分类损失函数
    • 3、误差(Error)、偏差(Bias)、方差(Variance)
    • 4、PCA(Principle Component Analysis,主成分分析)
    • 5、数据不均衡
    • 6、特征选择
    • 7、LR(Logistics Regression)
    • 8、特征工程
    • 9、树模型进行特征工程的原因
    • 10、AdaBoost(Adaptive Boosting)
    • 11、GBDT(Gradient Boosting Decision Tree)
    • 12、LR和GBDT
    • 13、RF和GBDT
    • 14、线性模型、非线性模型
    • 15、感知机
    • 16、排序算法
    • 17、常用的推荐系统算法:
    • 18、实现推荐系统
    • 19、相似度计算

1、回归损失函数

均方误差(Mean Square Error,MSE)(二次损失,L2损失,L2 Loss)
MSE是目标变量与预测值之间距离的平方和
M S E = 1 N ∑ i = 1 N ( y i − y i p ) 2 MSE=\frac {1}{N}\sum _{i=1}^{N} {(y_i-y_i^p)}^2 MSE=N1i=1N(yiyip)2

平均绝对误差(Mean Absolute Error,MAE)(L1损失,L1 Loss)
MAE是目标值与预测值之间的绝对差的总和
M A E = 1 N ∑ i = 1 N ∣ y i − y i p ∣ MAE=\frac {1}{N}\sum _{i=1}^{N} |y_i-y_i^p| MAE=N1i=1Nyiyip
MSE VS MAE

  • MSE收敛速度快,且随着误差减小,梯度也在减小,这有利于函数的收敛,即使固定学习率,函数也能较快收敛到最小值;MAE的曲线呈V字型,连续但在 y − f ( x ) = 0 y-f(x)=0 yf(x)=0处不可导,计算机求导比较难。且MAE大部分情况下梯度相等,这意味着即使对于小的损失值,其梯度也是大的,不利于函数的收敛和模型的学习。
  • 如果样本中存在离群点,MSE会给离群点赋予更高的权重,但是却是以牺牲其他正常数据点的预测效果为代价,因此会导致降低模型的整体性能;由于MAE计算的是绝对误差,没有平方项的作用,惩罚力度相同,因此MAE相对于MSE对离群点不过分敏感,拟合直线能够更好地表征正常数据的分布情况,其鲁棒性更好。

最小二乘法和MSE

  • 基于均方误差最小化来进行模型求解的方法称为“最小二乘法”。——周志华《机器学习》
  • 最小二乘法作为损失函数:没有除以总样本数N;均方误差MSE:除以总样本数N

2、分类损失函数

二分类交叉熵损失
L = 1 N ∑ i − [ y i ⋅ log ⁡ ( p i ) + ( 1 − y i ) ⋅ log ⁡ ( 1 − p i ) ] L=\frac{1}{N}\sum _{i}-[y_i \cdot \log (p_i)+(1-y_i)\cdot \log (1-p_i)] L=N1i[yilog(pi)+(1yi)log(1pi)]
交叉熵刻画的是两个概率分布之间的距离。交叉熵越小,两个概率分布越接近。

多分类交叉熵损失
L = − 1 N ∑ i ∑ c = 1 M y i c ⋅ log ⁡ ( p i c ) L=-\frac{1}{N}\sum_{i}\sum_{c=1}^{M}y_{ic}\cdot \log (p_{ic}) L=N1ic=1Myiclog(pic)

二分类为什么用交叉熵损失而不用MSE损失
MSE无差别关注全部类别预测概率和真实概率的差;交叉熵关注的是正确类别的预测概率。

最大似然估计和二分类交叉熵
在二分类问题中,将映射函数的输出记为Y,可以使分类问题中的标签0和1,采样结果为 ( X i , Y i ) {(X_i,Y_i)} (Xi,Yi),当 Y i = 1 Y_i=1 Yi=1时似然函数为 f ( X i , θ ) f(X_i,\theta) f(Xi,θ),当 Y i = 0 Y_i=0 Yi=0时似然函数为 1 − f ( X i , θ ) 1-f(X_i,\theta) 1f(Xi,θ),此时将似然函数写成如下形式:
L θ = ∏ i f ( X i , θ ) Y i ( 1 − f ( X i , θ ) ) 1 − Y i L_\theta=\prod_{i} f{(X_i,\theta)}^{Y_i}{(1-f(X_i,\theta))^{1-Y_i}} Lθ=if(Xi,θ)Yi(1f(Xi,θ))1Yi
最大似然估计为:
θ ^ = arg ⁡ max ⁡ θ ∏ i f ( X i , θ ) Y i ( 1 − f ( X i , θ ) ) 1 − Y i \widehat{\theta}=\arg\max_{\theta} \prod_{i} f{(X_i,\theta)}^{Y_i}{(1-f(X_i,\theta))^{1-Y_i}} θ =argθmaxif(Xi,θ)Yi(1f(Xi,θ))1Yi
一般求解最大似然估计问题,都会取对数将连乘转换为连加,并且由此可以推导出二分类的交叉熵损失函数,由于 L θ ∝ log ⁡ L θ L_{\theta}\propto \log{L_{\theta}} LθlogLθ
θ ^ = arg ⁡ max ⁡ θ log ⁡ L θ = arg ⁡ max ⁡ θ ∑ i Y i log ⁡ f ( X i , θ ) + ( 1 − Y i ) log ⁡ ( 1 − f ( X i , θ ) ) = arg ⁡ max ⁡ θ ∑ i Y i log ⁡ Y i ^ + ( 1 − Y i ) log ⁡ ( 1 − Y i ^ ) \widehat{\theta}=\arg\max_{\theta}\log{L_{\theta}}=\arg\max_{\theta} \sum_{i} Y_i\log{f(X_i,\theta)}+(1-Y_i)\log{(1-f(X_i,\theta))}\\=\arg\max_{\theta} \sum_{i} Y_i\log{\hat{Y_i}}+(1-Y_i)\log{(1-\hat{Y_i})} θ =argθmaxlogLθ=argθmaxiYilogf(Xi,θ)+(1Yi)log(1f(Xi,θ))=argθmaxiYilogYi^+(1Yi)log(1Yi^)
最优化问题通常求最小值,加上负号就得到了二分类的交叉熵损失函数:
B C E L o s s = − ∑ i Y i log ⁡ Y i ^ + ( 1 − Y i ) log ⁡ ( 1 − Y i ^ ) BCELoss=-\sum_{i} Y_i\log{\hat{Y_i}}+(1-Y_i)\log{(1-\hat{Y_i})} BCELoss=iYilogYi^+(1Yi)log(1Yi^)

3、误差(Error)、偏差(Bias)、方差(Variance)

  • 误差是模型预测结果与实际值之间的差异。在模型训练过程中,目标通常是尽可能地减少这种误差
  • 偏差是模型预测的平均误差,或者说是模型对真实数据的预测值与实际值的差异的期望值。一个高偏差的模型可能会忽略数据中的某些重要细节,导致模型过于简单,这种情况我们通常称之为欠拟合;偏差表征模型对数据的拟合能力
  • 方差是模型预测值的变化范围或者说离散程度,它反映了模型对输入微小改变的敏感度。高方差可能导致模型对数据中的随机噪声过于敏感,导致模型过于复杂,我们通常称之为过拟合;方差表征数据集的变动导致的学习性能的变化,也就是泛化能力

4、PCA(Principle Component Analysis,主成分分析)

PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征,也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。

输入:数据集 X = x 1 , x 2 , x 3 , … , x n X={x_1,x_2,x_3,\dots ,x_n} X=x1,x2,x3,,xn,需要降到k维。
1、基于特征值分解协方差矩阵实现PCA

  • 去平均值(即去中心化),即每一位特征减去各自的平均值;
  • 计算协方差矩阵 1 n X X T \frac{1}{n}XX^T n1XXT
  • 特征值分解方法求协方差矩阵 1 n X X T \frac{1}{n}XX^T n1XXT的特征值与特征向量
  • 对特征值从大到小排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为行向量组成特征向量矩阵P
  • 将数据转换到k个特征向量构建的新矩阵中,即 Y = P X Y=PX Y=PX

2、基于SCD分解协方差矩阵实现PCA

  • 去平均值
  • 计算协方差矩阵
  • 通过SVD计算协方差矩阵的特征值与特征向量
  • … \dots
  • … \dots

5、数据不均衡

考虑正例很少,负例很多的解决方法:

  • 欠采样:对负例进行欠采样。一种代表性算法是将负例分为很多份,每次用其中一份和正例一起训练,最后用集成学习综合结果;
  • 过采样:对正例进行过采样。一种代表性方法是对正例进行线性插值来获得更多的正例;
  • 调整损失函数:训练时正常训练,分类时将数据不平衡问题加入到决策过程中。通过加入权值使得数量较少的正样本得到更多的关注,不至于被大量的负样本掩盖;
  • 组合/集成学习:例如正负样本比例1:100,则将负样本分为100份,正样本每次有放回采样保持与负样本数相同,然后取100次结果进行平均;
  • 数据增强:单样本增强如几何变换、颜色变换、增加噪声;多样本组合增强如Mixup、SamplePairing等,在特征空间内构造已知样本的邻域值样本;基于深度学习数据增强

6、特征选择

目标是从原始特征集中选择最相关、最有用的特征,以提高模型性能和泛化能力。常用特征选择方法:
1、过滤式
独立于学习算法,据特征的统计属性对特征评估和排序。包括相关系数、卡方检验、信息增益、互信息法等。过滤式方法计算快速、简单,适用于高维数据,但可能忽略特征之间的相互关系。

  • 方差选择:计算特征在数据中的方差来判断是否保留。特征方差低于预先设定的阈值,这个特征可能没有足够的变化,对分类回归任务可能没有太大贡献,可以被移除
  • 相关系数:用来衡量两个变量之间线性关系强度的指标。计算特征与目标变量之间的相互关系,选择与目标变量具有较高相关性的特征。
  • 卡方检验:适用于分类问题中的特征选择。计算特征与目标变量之间的卡方统计量,来衡量特征与目标之间的独立性。选择卡方值较大的特征,与目标变量更相关。
  • 互信息:衡量两个变量之间相关性的指标。计算特征与目标变量之间的互信息,选择与目标变量具有较高互信息的特征。

2、嵌入式(Embedding)
特征选择与学习算法的训练过程结合,特征选择作为学习算法的一部分。在学习算法中直接考虑特征的重要性,通过正则化、惩罚项或决策树剪枝等方式选择特征。嵌入式方法包括 L1正则化、决策树的特征重要性、正则化的线性模型等。嵌入式方法可以在模型训练过程中自
动选择特征,减少了特征选择的额外计算开销。
3、包裹式(Wrapper)
使用机器学习模型评估特征的重要性。在特征子集上进行交叉验证,选择性能最好的特征子集进行特征选择。基于树模型的方法(如决策树和随机森林)可以评估特征的重要性。树模型通过计算特征在树中的分裂次数和平均分裂增益衡量特征对模型的贡献。它直接使用最终学习算法对每个特征子集进行评估,可以更好地捕捉特征之间的相互作用。包裹式方法包括递归特征消或和遗传算法等。包裹式方法计算开销大,耗时长,适用于小规模数据和特定问题。

7、LR(Logistics Regression)

Logistics Regression 和 Linear Regression(线性回归)联系和区别

  • 逻辑回归的本质其实就是线性回归,但在最终预测的时候加了一层 sigmoid 函数。即:线性回归+sigmoid 函数=逻辑回归
  • 线性回归:做预测、拟合函数,用于回归任务;逻辑回归:做分类、预测函数。用于分类任务,二分类/多分类,是给定自变量和超参数后,得到因变量的期望,基于这个期望来处理预测分类问题
  • 线性回归:使用最小二乘法求得解析解、梯度下降法。逻辑回归:最大似然估计、梯度下降法。

8、特征工程

是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。
简而言之,就是把一个原始数据转变为特征的过程,这些特征可以很好地描述这些数据,并且模型性能达到最优。
工作流程
在这里插入图片描述

9、树模型进行特征工程的原因

  • 改善模型性能:特征工程有助于提取更具预测性的特征,可以帮助模型更好地拟合数据,提升模型的预测性能。
  • 降低过拟合风险:合适的特征工程可以帮助模型更好地泛化到新的数据集上,降低过拟合的风险,提高模型的稳定性和泛化能力。
  • 减少计算复杂度:特征工程有助于减少特征空间的维度,从而减少计算复杂度,并加速模型的训练和预测过程。
  • 提高可解释性:通过合理的特征工程,可以使得模型更易于解释和理解,有助于深入理解数据特征对模型预测的影响。
  • 解决特征相关性和噪音问题:特征工程有助于发现和处理特征之间的相关性和噪音,使模型更加健壮。

10、AdaBoost(Adaptive Boosting)

算法流程:

  • 初始化训练数据的权值分布。如果有 N 个样本,则每一个训练样本最开始都被赋予相同的权值: 1 N \frac{1}{N} N1
  • 训练弱分类器。具体训练过程中,如果某个样本点没有被准确地分类,那么在构造下一个训练集中,也就是如果某一个数据在这次分错了,那么在下一次就会给它更大的权重。然后,权重更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
  • 将各个训练得到的弱分类器组合成强分类器。将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。

11、GBDT(Gradient Boosting Decision Tree)

主要包括两个部分:Gradient Boosting 和 Decision Tree
1、Decision Tree:CART回归树
因为回归树的标签是连续的,因此基尼系数、熵这种概率评估不适合作为评估指标,所以考虑使用均方误差作为特征划分的好坏,将划分后每个节点所有样本的均方误差之和与之前没划分的节点的均方误差作差来代替基尼系数。
算法流程:

  • 选择最优切分特征j和切分点s
    R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } R 2 ( j , s ) = { x ∣ x ( j ) > s } R_1(j,s)=\{x|x^{(j)}\leq s\} \quad R_2(j,s)=\{x|x^{(j)}> s\} R1(j,s)={xx(j)s}R2(j,s)={xx(j)>s}
    c m = 1 N m ∑ x i ∈ R m ( j , s ) y i x ∈ R m , m = 1 , 2 c_m = \frac{1}{N_m}\sum_{x_i \in R_m(j,s)}y_i \qquad x \in R_m,m=1,2 cm=Nm1xiRm(j,s)yixRm,m=1,2
    min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{j,s}[\min_{c_1}\sum_{x_i \in R_1(j,s)}{(y_i-c_1)}^2+\sum_{x_i \in R_2(j,s)}{(y_i-c_2)}^2] j,smin[c1minxiR1(j,s)(yic1)2+xiR2(j,s)(yic2)2]

  • 用选定的对 ( j , s ) (j,s) (j,s)划分区域并决定相应的输出值

  • 继续对两个子区域调用步骤1、2直至满足停止条件

  • 将输入空间划分为M个区域, R 1 , R 2 , R 3 , … , R M R_1,R_2,R_3,\dots ,R_M R1,R2,R3,,RM,生成决策树

为什么不用CART分类树?

  • 无论是回归问题还是分类问题,GBST 需要将多个弱分类器的结果累加起来(Boosting的训练是串行的,一个接一个,每一棵树的训练都依赖于之前的残差)。
  • 每次迭代要拟合的是梯度值,是连续值所以要用回归树

2、Gradient Boosting:拟合负残差
基于残差的训练
每一个后续的模型都会去把前一个模型没有拟合好的残差重新拟合一下。用下一个弱分类器去拟合。当前残差(真实值-当前预测值),之后所有弱分类器的结果相加等于预测值。
为何Gradient Boosting可以用负梯度近似残差
当损失函数选用 MSE 时,负梯度<==>残差
假使用 MSE 做损失函数:
l ( y i , y i ) = 1 2 ( y i − y i ) 2 l(y_i,y^i)=\frac{1}{2}{(y_i-y^i)}^2 l(yi,yi)=21(yiyi)2
它的负梯度计算公式为:
− [ ∂ l ( y i , y i ) ∂ y i ] = ( y i , y i ) -[\frac{\partial l(y_i, y^i)}{\partial y^i}]=(y_i,y^i) [yil(yi,yi)]=(yi,yi)

12、LR和GBDT

1、用途不同

  • Logistics Regression是分类模型
  • GBDT即可作分类又可回归

2、损失函数不同

  • LR的Loss是交叉熵
  • GBDT采用回归拟合(将分类问题通过Softmax转换为回归问题)用当前损失去拟合实际值与前一轮模型预测值之间的残差

3、从正则的角度

  • LR采用L1和L2正则
  • GBDT采用弱分类器的个数,也就是迭代轮次T,T的大小影响着算法的复杂度

4、特征组合

  • LR是线性模型,具有很好的解释性,很容易并行化,但是学习能力有限,需要大量的特征工程
  • GBDT可以处理线性和非线性的数据,具有天然优势进行特征组合

13、RF和GBDT

  • 组成RF的树可以是分类树,也可以是回归树;而GBDT只由回归树组成
  • 集成学习:RF属于bagging思想;GBDT是boosting思想
  • 并行性:组成RF的树可以并行生产;而GBDT只能串行生成
  • 最终结果:对于最终的输出结果而言,RF采用多数投票等;而GBDT则是将所有结果累加起来
  • 数据敏感性:RF对异常值不敏感;GBDT对异常值非常敏感
  • 训练样本:RF每次迭代的样本是从全部训练集中有放回抽样形成的;而GBDT每次使用全部样本
  • 偏差-方差权衡:RF是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能

14、线性模型、非线性模型

1、线性模型可以用曲线拟合样本,但是分类的决策边界一定是直线,例如LR。
2、看乘法式子中自变量x前的系数w,如果w只影响一个人,则为线性模型
例如: y = 1 1 + e w 0 + w 1 x 1 + w 2 x 2 y=\frac{1}{1+e^{w_0+w_1x_1+w_2x_2}} y=1+ew0+w1x1+w2x21为线性模型
如果自变量被两个及以上的参数影响,则为非线性
例如: y = 1 1 + w 3 ∗ e w 0 + w 1 x 1 + w 2 x 2 y=\frac{1}{1+w_3*e^{w_0+w_1x_1+w_2x_2}} y=1+w3ew0+w1x1+w2x21

15、感知机

f ( x ) = s i g n ( w ∗ x + b ) s i g n ( x ) = { 1 x >=0 1 x<0 f(x)=sign(w*x+b)\quad sign(x)=\begin{cases} 1& \text{x >=0}\\1& \text{x<0} \end{cases} f(x)=sign(wx+b)sign(x)={11x >=0x<0

感知机&LR
1、激活函数不同

  • 感知机使用阶跃函数(sign)
  • 逻辑回归使用sigmoid函数

2、输出类型不同

  • 感知机输出是离散的,通常用于二分类
  • 逻辑回归的输出是概率值,可以用于二分类或多分类

3、损失函数不同

  • 感知机通常使用误分类点到超平面的距离之和作为损失函数
  • 逻辑回归使用交叉熵损失函数

16、排序算法

在这里插入图片描述

在这里插入图片描述1、冒泡(交换)
比较相邻元素,如果第一个比第二个大,就交换它们
2、选择
在未排序序列中找到最小(大)元素,存放在排序序列的起始位置
3、插入
对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
4、快速(快速)

  • 在未排序元素中任取一个作为基准
  • 重新排列数据,比基准小的元素放在基准前,比基准大的元素,放在基准后
  • 递归地对两个子序列进行排序

5、希尔(插入)

  • 缩小增量排序
  • 先取一个小于n的整数d(通常为 n 2 \frac{n}{2} 2n)作为第一个增量,所有距离为d的元素放在同一个组中,先在组内直接插入排序,然后取第2个增量,重复操作8

6、归并

  • 把长度为n的输入序列分成两个长度为 n 2 \frac{n}{2} 2n的子序列
  • 对两个子序列分别进行归并排序
  • 将两个排序好的子序列合并成一个最终的排序序列

7、堆排序
将待排序序列构造成一个大顶堆,此时整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值,如此反复执行,使能得到一个有序序列了。

17、常用的推荐系统算法:

1、协同过滤: 分析用户的兴趣和行为,利用共同行为习惯的群体有相似喜好的原则,推荐用户感兴趣的信息

  • 基于用户的协同过滤:根据用户的历史喜好分析出相似的人,然后给用户推荐其他人喜欢的物品。【人以类聚】
  • 基于物品的协同过滤:根据用户的历史喜好分析出相似的物品,然后给用户推荐同类物品。【物以群分】

2、基于内容过滤推荐:核心是衡量出两个物品的相似度
首先对物品或内容的特征作出描述,发现其相关性,然后基于用户以往的喜好记录,推荐给用户相似的物品

3、组合推荐

18、实现推荐系统

如果能将用户A的原始特征转变为一种代表用户A喜好的特征向量,将电影1的原始特征转变为一种代表电影1特性的特征向量,那么,我们计算两个向量的相似度,就可以代表用户A对电影1的喜欢程度。
在这里插入图片描述

19、相似度计算

1、皮尔逊相关系数(Pearson Correlation Coefficient)
取值在[-1, +1]之间
P ( x , y ) = ∑ x i y i − n x y ˉ ( n − 1 ) S x S y = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 n ∑ y i 2 − ( ∑ y i ) 2 P(x,y) = \frac{\sum{x_iy_i-n\bar{xy}}}{(n-1)S_xS_y}=\frac{n\sum{x_iy_i}-\sum{x_i}\sum{y_i}}{\sqrt{n\sum{x_i^2}-(\sum{x_i})^2}\sqrt{n\sum{y_i^2}-(\sum{y_i})^2}} P(x,y)=(n1)SxSyxiyinxyˉ=nxi2(xi)2 nyi2(yi)2 nxiyixiyi
其中 S x S_x Sx S y S_y Sy x x x y y y的标准偏差。
两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商
P ( x , y ) = c o v ( X , Y ) σ X σ Y = E ( X − μ X ) E ( Y − μ Y ) σ X σ Y P(x,y) = \frac{cov(X,Y)}{\sigma_X \sigma_Y}=\frac{E(X-\mu_X)E(Y-\mu_Y)}{\sigma_X \sigma_Y} P(x,y)=σXσYcov(X,Y)=σXσYE(XμX)E(YμY)

2、欧几里得距离 (Euclidean Distance)
d ( X , Y ) = ∑ ( x i − y i ) 2 d(X,Y)=\sqrt{\sum{(x_i-y_i)^2}} d(X,Y)=(xiyi)2
相关性计算: s i m ( X , Y ) = 1 d ( X , Y ) sim(X,Y) = \frac{1}{d(X,Y)} sim(X,Y)=d(X,Y)1
取值:[0, 1]

3、Cosine相似度(Cosine Similarity)

取值:[-1, 1](值越大,相似度越大)夹角越接近0°
T ( X , Y ) = x ∙ y ∣ ∣ x ∣ ∣ 2 × ∣ ∣ y ∣ ∣ 2 = ∑ x i y i ∑ x i 2 ∑ y i 2 T(X,Y)=\frac{x\bullet y}{{||x||}^2 \times {||y||}^2}=\frac{\sum{x_iy_i}}{\sqrt{\sum{{x_i}^2}}\sqrt{\sum{{y_i}^2}}} T(X,Y)=∣∣x∣∣2×∣∣y∣∣2xy=xi2 yi2 xiyi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23365.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

luci界面开发中的MVC架构——LuCI介绍(二)

想要给openwrt开发应用&#xff0c;虽然直接可执行程序也可以运行&#xff0c;但是没有UI会很不方便&#xff0c;想要开发UI就要用openwrt的那一套&#xff0c;自然就是LuCI&#xff0c;LuCI又用了一套MVC框架&#xff0c;今天就讲讲这是个什么东西。 OpenWrt LuCI 界面开发中…

网络安全监测探针安装位置 网络安全监测系统

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 软件简介&#xff1a; SockMon(SocketMonitor)网络安全监控系统是一款为电脑专业人员打造的一款出色的安防监控软件。在如今这个恶意软件&#xff0c;攻击&#…

车载DoIP协议 --- TCP详细解析

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

DeepSeek-R1本地部署保姆级教程

一、DeepSeek-R1本地部署配置要求 &#xff08;一&#xff09;轻量级模型 ▌DeepSeek-R1-1.5B 内存容量&#xff1a;≥8GB 显卡需求&#xff1a;支持CPU推理&#xff08;无需独立GPU&#xff09; 适用场景&#xff1a;本地环境验证测试/Ollama集成调试 &#xff08;二&a…

2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码

一. 真菌生长优化算法&#xff08;FGO&#xff09; 真菌生长优化算法&#xff08;Fungal Growth Optimizer&#xff0c;FGO&#xff09;是一种新型的自然启发式元启发式算法&#xff0c;其灵感来源于自然界中真菌的生长行为。该算法通过模拟真菌的菌丝尖端生长、分支和孢子萌发…

【人工智能】蓝耘智算平台盛大发布DeepSeek满血版:开创AI推理体验新纪元

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 蓝耘智算平台 蓝耘智算平台核心技术与突破元生代推理引擎快速入门&#xff1a;三步调用大模型接口&#xff0c;OpenAI SDK无缝兼容实战用例文…

基于AVue的二次封装:快速构建后台管理系统的CRUD方案

基于AVue的二次封装&#xff1a;快速构建后台管理系统的CRUD方案 在开发后台管理系统时&#xff0c;表格是常见的组件之一。然而&#xff0c;使用原生的Element Plus实现CRUD&#xff08;增删改查&#xff09;功能往往需要编写大量重复代码&#xff0c;过程繁琐。即使借助类似…

Spring全局异常处理

在项目开发中&#xff0c;异常是经常遇到的&#xff0c;但是如何更高效的处理好异常信息&#xff0c;让我们能快速定位到BUG&#xff0c;是很重要的&#xff0c;不仅能够提高我们的开发效率&#xff0c;还能让你代码看上去更舒服&#xff0c;SpringBoot的项目已经对有一定的异常…

华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)

文章目录 1. **查看固件和驱动版本**2. **查看CANN版本**3. **其他辅助方法**注意事项 在华为昇腾服务器上查看固件、驱动和CANN版本的常用方法如下&#xff1a; 1. 查看固件和驱动版本 通过命令行工具 npu-smi 执行以下命令查看当前设备的固件&#xff08;Firmware&#xff0…

pikachu靶场搭建教程

需要的东西 phpStudy&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/1fJ-5TNtdDZGUf5FhTm245g 提取码&#xff1a;0278 pikachu-master&#xff1a; Github链接&#xff1a;https://github.com/zhuifengshaonianhanlu/pikachu 链接&#xff1a; https://pan.baidu.c…

R与RStudio简介及安装

目录 一、R与RStudio关系 二、R简介 2.1. 发展历史 2.2. R语言特点 三、安装指南 3.1 R安装指南 3.2 R studio安装指南 一、R与RStudio关系 R是统计领域广泛使用的工具&#xff0c;属于GNU系统的一个自由、免费、源代码开放的软件&#xff0c;是 用于统计计算和统计绘图…

netty基础知识梳理和总结

目录标题 由来netty整体结构核心功能可扩展的事件模型统一的通信 API零拷贝机制与字节缓冲区 传输服务协议支持 netty的IO模型netty核心组件ChannelEventLoop、EventLoopGroupChannelHandlerChannelPipelineBootstrapFuture netty的bytebufbytebuf的内部构造bytebuf的使用模式B…

《Head First设计模式》读书笔记 —— 单件模式

文章目录 为什么需要单件模式单件模式典型实现剖析定义单件模式本节用例多线程带来的问题解决问题优化 Q&A总结 《Head First设计模式》读书笔记 相关代码&#xff1a; Vks-Feng/HeadFirstDesignPatternNotes: Head First设计模式读书笔记及相关代码 用来创建独一无二的&a…

tailwindcss 前端 css 框架 无需写css 快速构建页面

版本&#xff1a;VUE3 TS 框架 vite 文章中使用tailwindcss 版本&#xff1a; ^3.4.17 简介&#xff1a; Tailwind CSS 一个CSS 框架&#xff0c;提供组件化的样式&#xff0c;直接在HTML 中编写样式&#xff0c;无需额外自定义CSS &#xff0c;快速&#xff01; 简洁&#…

给小米/红米手机root(工具基本为官方工具)——KernelSU篇

目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…

路由器的WAN口和LAN口有什么区别?

今时今日&#xff0c;移动终端盛行的时代&#xff0c;WIFI可以说是家家户户都有使用到的网络接入方式。那么路由器当然也就是家家户户都不可或缺的设备了。而路由器上的两个实现网络连接的基础接口 ——WAN 口和 LAN 口&#xff0c;到底有什么区别&#xff1f;它们的功能和作用…

【Open X-Embodiment】简单数据下载与预处理

文章目录 1. RLDS Dataset2. 处理成numpy格式3. 存储桶 1. RLDS Dataset 从 Octo 里面找到数据下载的代码 rlds_dataset_mod github 按照官网代码配置环境后&#xff0c;修改 prepare_open_x.sh&#xff0c;相当于只用 gsutil 下载数据&#xff1a; DOWNLOAD_DIR/mnt/data…

神经网络八股(1)

1.什么是有监督学习&#xff0c;无监督学习 有监督学习是带有标签的&#xff0c;无监督学习是没有标签的&#xff0c;简单来说就是有监督学习的输入输出都是固定的&#xff0c;已知的&#xff0c;无监督学习输入是已知的&#xff0c;输出是不固定的&#xff0c;无监督学习是通…

达梦:开发 ODBC配置指南

目录 达梦数据库DM8 ODBC配置指南&#xff08;Linux环境&#xff09;ODBC一、环境准备二、核心配置步骤1. 安装unixODBC2. 配置ODBC驱动&#xff08;odbcinst.ini&#xff09;3. 配置数据源&#xff08;odbc.ini&#xff09; 三、连接测试与验证1. 使用isql工具测试2. 执行基础…

Python游戏编程之赛车游戏6-1

通过Python的pygame模块可以实现赛车游戏&#xff0c;如图1所示。 图1 赛车游戏 从图1中可以看出&#xff0c;玩家通过键盘的左右键操作蓝色汽车躲避红色汽车的撞击&#xff0c;每成功躲避过一辆红色汽车&#xff0c;则玩家得一分。当蓝色汽车被红色汽车撞击后&#xff0c;游戏…