深度学习500问——Chapter02:机器学习基础(3)

文章目录

2.10 主成分分析(PCA)

2.10.1 主成分分析(PCA)思想总结

2.10.2 图解PCA核心思想

2.10.3 PCA算法推理

2.10.4 PCA算法流程总结

2.10.5 PCA算法主要优缺点

2.10.6 降维的必要性及目的

2.10.7 KPCA与PCA的区别

2.11 模型评估

2.11.1 模型评估常用方法

2.11.2 误差、偏差和方差有什么区别和联系

2.11.3 经验误差与泛化误差

2.11.4 图解欠拟合、过拟合

2.11.5 如何解决过拟合与欠拟合

2.11.6 交叉验证的主要作用

2.11.7 理解k折交叉验证

2.11.8 混淆矩阵

2.11.9 错误率及精度

2.11.10 查准率与查全率

2.11.11 ROC与AUC

2.11.12 如何画ROC曲线

2.11.13 如何计算TPR、FPR

2.11.14 如何计算AUC

2.11.15 为什么使用Roc和Auc评价分类器

2.11.16 直观理解AUC

2.11.17 代价敏感错误率与代价曲线

2.11.18 模型有哪些比较检验方法

2.11.19 为什么使用标准差

2.11.20 类别不平衡产生原因

2.11.21 常见的类别不平衡问题解决办法


2.10 主成分分析(PCA)

2.10.1 主成分分析(PCA)思想总结

1. PCA就是将高维的数据通过线性变换投影到低维空间上去。

2. 投影思想:找出最能够代表原始数据的投影方法。被PCA降掉的那些维度只能是那些噪声或是冗余的数据。

3. 去冗余:去除可以被其他向量代表的线性相关向量,这部分信息量是多余的。

4. 去噪声,去除较小特征值对应的特征向量,特征值的大小反映了变换后在特征值向量方向上变换的幅度,幅度越大,说明这个方向上的元素差异也越大,要保留。

5. 对角化矩阵,寻找极大线性无关组,保留较大的特征值,去除较小特征值,组成一个投影矩阵,对原始样本矩阵进行投影,得到降维后的新样本矩阵。

6. 完成PCA的关键是——协方差矩阵。协方差矩阵,能同时表现不同维度间的相关性以及各个维度上的方差。协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。

7. 之所以对角化,因为对角化之后非对角上的元素都是0,达到去噪声的目的。对角化后的协方差矩阵,对角线上较小的新方差对应的就是那些该去掉的维度。所以我们只取那些含有较大能量(特征值)的维度,其余的就舍掉,即去冗余。

2.10.2 图解PCA核心思想

PCA可解决训练数据中存在数据特征过多或特征累赘的问题。核心思想是将m维特征映射到n维(n < m),这n维形成主元,是重构出来最能代表原始数据的正交特征。

假设数据集是m个n维,(\boldsymbol x^{(1)}, \boldsymbol x^{(2)}, \cdots, \boldsymbol x^{(m)}。如果n=2,需要降维到n'=1,现在想找到某一维度方向代表这两个维度的数据。下图有u_1, u_2两个向量方向,但是哪个向量才是我们所想要的,可以更好代表原始数据呢?

从图可看出,u_1u_2好,为什么呢?有以下两个主要评价指标:

1. 样本点到这个直线的距离足够近。

2. 样本点在这个直线上的投影尽可能的分开。

如果我们需要降维的目标维数是其他任意维,则:

1. 样本点到这个超平面的距离足够近。

2. 样本点在这个超平面上的投影尽可能的分开。

2.10.3 PCA算法推理

 下面以基于最小投影距离为评价指标推理:

假设数据集是m个n维,(x^{(1)}, x^{(2)},...,x^{(m)}),且数据进行了中心化。经过投影变换得到新坐标为w_1,w_2,...,w_n,其中w是标准正交基,即\left | w \right |_2=1w^T_iw_j = 0

经过降维后,新坐标w_1,w_2,...,w_n,其中n'是降维后的目标维数。样本点x^{(i)}在新坐标系下的投影为z^{(i)} = \left(z^{(i)}_1, z^{(i)}2, ..., z^{(i)}{n'} \right),其中z^{(i)}_j=w^T_jx^{(i)}x^{(i)}在低维坐标系里的第j维的坐标。

如果用z^{(i)}去恢复x^{(i)},则得到的恢复数据为x^{(i)} = \sum_{j=1}^{n} x_j^{(i)} w_j =W_z^{(i)},其中W为标准正交基组成的矩阵。

考虑到整个样本集,样本点到这个超平面的距离足够近,目标变为最小化\sum_{i=1}^{n} \left\| \hat{x}^{(i)} - x^{(i)} \right\|_2^2 ,对此式进行推理,可得:

\sum^m_{i=1} | \hat{x}^{(i)} - x^{(i)} |^2_2 \\= \sum^m_{i=1} | Wz^{(i)} - x^{(i)} |^2_2 \ \\= \sum^m_{i=1} \left( Wz^{(i)} \right)^T \left( Wz^{(i)} \right) - 2\sum^m_{i=1} \left( Wz^{(i)} \right)^T x^{(i)} + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ \\= \sum^m_{i=1} \left( z^{(i)} \right)^T \left( z^{(i)} \right) - 2\sum^m_{i=1} \left( z^{(i)} \right)^T x^{(i)} + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ \\= - \sum^m_{i=1} \left( z^{(i)} \right)^T \left( z^{(i)} \right) + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ \\= -tr \left( W^T \left( \sum^m_{i=1} x^{(i)} \left( x^{(i)} \right)^T \right)W \right) + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \\\ = -tr \left( W^TXX^TW \right) + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)}

在推导过程中,分别用到了\bar{x}^{(i)}=W_z^{(i)},矩阵转置公式(AB)^T=B^TA^TW^TW = I,z^{(i)} = W^Tx^{(i)}以及矩阵的迹,最后两步是将代数和转为矩阵形式。由于W的每个一个向量w_j是标准正交基,sum^m_{i=1} x^{(i)} \left( x^{(i)} \right)^T是数据集的协方差矩阵,\sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)}是一个常量。最小化\sum_{i=1}^{n} \left\| \hat{x}^{(i)} - x^{(i)} \right\|_2^2又可等价于\underbrace{\arg \min}_W - tr \left( W^TXX^TW \right) s.t.W^TW = I,利用拉格朗日函数可得到J(W) = -tr(W^TXX^TW) + \lambda(W^TW - I),对W进行求导,可得-XX^TW + \lambda W = 0,也即XX^TW = \lambda WXX^Tn'个特征向量组成的矩阵,\lambdaXX^T的特征值。W即为我们想要的矩阵。对于原始数据,只需要z^{(i)} = W^Tx^{(i)},就可把原始数据集降维到最小投影距离的n'维数据集。

基于最大投影方差的推导,这里就不再赘述,有兴趣的同仁可自行查阅资料。

2.10.4 PCA算法流程总结

输入:n维样本集D=(x^{(1)}, x^{(2)},...,x^{(m)}),目标降维的维数n'

输出:降维后的新样本集D'=(z^{(1)}, z^{(2)},...,z^{(m)})

主要步骤如下:

1. 对所有的样本进行中心化,x^{(i)} = x^{(i)} - \frac{1}{m} \sum^m_{j=1} x^{(j)}

2. 计算样本的协方差矩阵XX^T

3. 对协方差矩阵XX^T进行特征值分解。

4. 取出最大的n'个特征值对应的特征向量w_1,w_2,...,w_{n'}

5. 标准化特征向量,得到特征向量的矩阵W

6. 转化样本集中每个样本z^{(i)} = W^Tx^{(i)}

7. 得到输出矩阵D'=(z^{(1)}, z^{(2)},...,z^{(m)})。注:在降维时,有时不明确目标维数,而是指定降维到的主成分比重阈值k(k\in (0,1])。假设n个特征值为\lambda _1\geqslant \lambda _2\geqslant ...\geqslant \lambda _n,则n'可从\sum^{n'}{i=1} \lambda_i \geqslant k \times \sum^n{i=1} \lambda_i得到。

2.10.5 PCA算法主要优缺点

优缺点简要说明
优点

1. 仅仅需要以方差衡量信息差,不受数据集以外的因素影响。

2. 各主成分之间正交,可消除原始数据成分间的相互影响的因素

3. 计算方法简单,主要运算是特征值分解,易于实现

缺点

1. 主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强

2. 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响

2.10.6 降维的必要性及目的

降维的必要性:

1. 多重共线性和预测变量之间相互关联。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯。

2. 高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有2%。

3. 过多的变量,对查找规律造成冗余麻烦。

4. 仅在变量层面上分析可能会忽略变量之间的潜在联系。例如几个预测变量可能落入仅反映数据某一方面特征的一个组内。

降维的目的:

1. 减少预测变量的个数。

2. 确保这些变量是相互独立的。

3. 提供一个框架来解释结果。相关特征,特征是重要特征更能在数据中明确显示出来;如果只有两维或者三维的话,更便于可视化展示。

4. 数据在低维下更容易处理、更容易使用。

5. 去除数据噪声。

6. 降低算法运算开销。

2.10.7 KPCA与PCA的区别

应用PCA算法前提是假设存在一个线性超平面,进而投影。那如果数据不是线性的呢?该怎么办?这时候就需要KPCA,数据集从n维映射到线性可分的高维N>n,然后再从N维降维到一个低纬度。

KPCA用到了核函数思想,使用了核函数的主成分分析一般称为核主成分分析(kernelized PCA,简称KPCA)。

假设高维空间数据由n维空间数据通过映射\phi产生。

n维空间的特征分解为:\sum^m_{i=1} x^{(i)} \left( x^{(i)} \right)^T W = \lambda W

其映射为\sum^m_{i=1} \phi \left( x^{(i)} \right) \phi \left( x^{(i)} \right)^T W = \lambda W

通过在高维空间进行协方差矩阵的特征值分解,然后用PCA一样的方法进行降维。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。

2.11 模型评估

2.11.1 模型评估常用方法

一般情况来说,单一评分标准无法完全评估一个机器学习模型,只用good和bad偏离真实场景去评估某个模型,都是一种欠妥的评估方式。下面介绍常用的分类模型和回归模型评估方法。

分类模型常用评估方法:

指标描述
Accuracy准确率
Precision精准度/查准率
Recall召回率/查全率
P-R曲线查准率为纵轴,查全率为横轴,作图
F1F1值
Confusion Matrix混肴矩阵
ROCROC曲线
AUCROC曲线下的面积

回归模型常用评估方法:

指标描述
Mean Square Error(MSE,RMSE)平均方差
Absolute Error(MAE,RAE)绝对误差
R-SquaredR平方值

2.11.2 误差、偏差和方差有什么区别和联系

在机器学习中,Bias(偏差),Error(误差),和Variance(方差)存在以下区别和联系:

对于Error:

  • 误差(error):一般地,我们把机器学习的实际预测输出与样本的真实输出之间的差异称为“误差”。
  • Error = Bias + Variance + Noise,Error反映的是整个模型的准确度。

对于Noise:

  • 噪声:描述了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。

对于Bias:

  • Bias衡量模型拟合训练数据的能力(训练数据不一定是整个training dataset,而是只用于训练它的那一部分数据,例如:mini-batch),Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度。
  • Bias越小,拟合能力越高(可能产生overfitting);反之,拟合能力越低(可能产生underfitting)。
  • 偏差越大,越偏离真实数据,如下图第二行所示,

对于Variance:

  • 方差公式:S_{N}^{2}=\frac{1}{N}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2}
  • Variance描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散,模型的稳定程度越差。
  • Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。
  • Variance越小,模型的泛化的能力越高;反之,模型的泛化能力越低。
  • 如果模型在训练集上拟合效果比较优秀,但是在测试集上拟合效果比较差劣,则方差较大,说明模型的稳定程度较差,出现这种现象可能是由于模型对训练集过拟合造成的。如下图右列所示。

2.11.3 经验误差与泛化误差

经验误差(empirical error):也叫训练误差(training error),模型在训练集上的误差。

泛化误差(generalization error):模型在新样本集(测试集)上的误差称为“泛化误差”。

2.11.4 图解欠拟合、过拟合

根据不同的坐标方式,欠拟合与过拟合图解不同。

1. 横轴为训练样本数量,纵轴为误差

如上图所示,我们可以直观看出欠拟合和过拟合的区别:

  • 模型欠拟合:在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大;
  • 模型过拟合:在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大;
  • 模型正常:在训练集以及测试集上,同时具有相对较低的偏差以及方差。

2. 横轴为模型复杂度,纵轴为误差

红线为测试集上的Error,蓝线为训练集上的Error。

  • 模型欠拟合:模型在A点处,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大。
  • 模型过拟合:模型在C点处,在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大。
  • 模型正常:模型复杂程度控制在点B处为最优。

3. 横轴为正则项系数,纵轴为误差

红线为测试集上的Error,蓝线为训练集上的Error。

  • 模型欠拟合:模型在C点处,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大。
  • 模型过拟合:模型在A点处,在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大。它通常发生在模型过于复杂的情况下,如参数过多等,会使得模型的预测性能变弱,并且增加数据的波动性。虽然模型在训练时的效果可以表现的很完美,基本上记住了数据的全部特点,但这种模型在未知数据的表现能力会大减折扣,因为简单的模型泛化能力通常都是很弱的。
  • 模型正常:模型复杂程度控制在点B处为最优。

2.11.5 如何解决过拟合与欠拟合

如何解决欠拟合:

  1. 添加其他特征项。组合、泛化、相关性、上下文特征、平台特征等特征是特征添加的重要手段,有时候特征项不够会导致模型欠拟合。
  2. 添加多项式特征。例如将线性模型添加二次项或三次项使模型泛化能力更强。例如,FM(Fatcorization Machine)模型、FFM(Field-aware Factorization Machine)模型,其实就是线性模型,增加了二阶多项式,保证了模型一定的拟合程度。
  3. 可以增加模型的复杂程度。
  4. 减小正则化系数。正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

如何解决过拟合:

  1. 重新清洗数据,数据不纯会导致过拟合,此类情况需要重新清洗数据。
  2. 增加训练样本数据。
  3. 降低模型复杂程度。
  4. 增大正则项系数。
  5. 采用dropout方法。dropout方法,通俗的讲就是在训练的时候让神经元以一定的概率不工作。
  6. early stopping。
  7. 减少迭代次数。
  8. 增大学习率。
  9. 添加噪声数据。
  10. 树结构中,可以对树进行剪枝。
  11. 减少特征项。

欠拟合和过拟合这些方法,需要根据实际问题,实际模型,进行选择。

2.11.6 交叉验证的主要作用

为了得到更为稳健可靠的模型,对模型的泛化误差进行评估,得到模型泛化误差的近似值。当有多个模型可以选择时,我们通常选择“泛化误差”最小的模型。

交叉验证的方法有许多种,但是最常用的是:留一交叉验证、k折交叉验证。

2.11.7 理解k折交叉验证

1. 将含有N个样本的数据集,分成k份,每份含有N/K个样本。选择其中1份作为测试集,测试集就有K种情况。

2. 在每种情况中,用训练集训练模型,用测试集测试模型,计算模型的泛化误差。

3. 交叉验证重复K次,每份验证一次,平均K次的结果或者使用其他结合方式,最终得到一个单一的估测,得到模型的最终泛化误差。

4. 将K种情况下,模型的泛化误差取均值,得到模型最终的泛化误差。

5. 一般2\leqslant K \leqslant10。k折交叉验证的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10折交叉验证是最常用的。

6. 训练集种样本数量要足够多,一般至少大于总样本数的50%。

7. 训练集和测试集必须从完整的数据集中均匀取样。均匀取样的目的是希望减少训练集、测试集与原始数据之间的偏差。当样本数量足够多时,通过随机取样,便可以实现均匀取样的效果。

2.11.8 混淆矩阵

第一种混淆矩阵:

真实情况T or F预测为正例1,P预测为负例0,N
本来label标记为1,预测结果真为T、假为FTP(预测为1,实际为1)FN(预测为0,实际为1)
本来label标记为0,预测结果真为T、假为FFP(预测为1,实际为0)TN(预测为0,实际为0)

第二种混淆矩阵:

预测情况P or N实际label为1,预测对了为T实际label为0,预测对了为T
预测为正例1,PTP(预测为1,实际为1)FP(预测为1,实际为0)
预测为负例0,NFN(预测为0,实际为1)TN(预测为0,实际也0)

2.11.9 错误率及精度

1. 错误率(Error Rate):分类错误的样本数占样本总数的比例。

2. 精度(accuracy):分类正确的样本数占样本总数的比例。

2.11.10 查准率与查全率

将算法预测的结果分成四种情况:

  1. 正确肯定(True Positive,TP):预测为真,实际为真
  2. 正确否定(True Negative,TN):预测为假,实际为假
  3. 错误肯定(False Positive,FP):预测为真,实际为假
  4. 错误否定(False Negative,FN):预测为假,实际为真

则:

查准率(Precision)=TP/(TP+FP)

理解:预测出为阳性的样本中,正确的有多少。区别准确率(正确预测出的样本,包括正确预测为阳性、阴性,占总样本比例)。 例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。

查全率(Recall)=TP/(TP+FN)

理解:正确预测为阳性的数量占总样本中阳性数量的比例。 例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。

2.11.11 ROC与AUC

​ ROC全称是“受试者工作特征”(Receiver Operating Characteristic)。

​ ROC曲线的面积就是AUC(Area Under Curve)。

​ AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)。

​ ROC曲线,通过将连续变量设定出多个不同的临界值,从而计算出一系列真正率和假正率,再以假正率为横坐标、真正率为纵坐标绘制成曲线,曲线下面积越大,推断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为假正率和真正率均较高的临界值。

​ 对于分类器,或者说分类算法,评价指标主要有Precision,Recall,F-score。下图是一个ROC曲线的示例。

ROC曲线的横坐标为False Positive Rate(FPR),纵坐标为True Positive Rate(TPR)。其中TPR = \frac{TP}{TP+FN} ,FPR = \frac{FP}{FP+TN}

​ 下面着重介绍ROC曲线图中的四个点和一条线。​ 第一个点(0,1),即FPR=0, TPR=1,这意味着FN(False Negative)=0,并且FP(False Positive)=0。意味着这是一个完美的分类器,它将所有的样本都正确分类。​ 第二个点(1,0),即FPR=1,TPR=0,意味着这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。​ 第三个点(0,0),即FPR=TPR=0,即FP(False Positive)=TP(True Positive)=0,可以发现该分类器预测所有的样本都为负样本(Negative)。​ 第四个点(1,1),即FPR=TPR=1,分类器实际上预测所有的样本都为正样本。​ 经过以上分析,ROC曲线越接近左上角,该分类器的性能越好。

​ ROC曲线所覆盖的面积称为AUC(Area Under Curve),可以更直观的判断学习器的性能,AUC越大则性能越好。

2.11.12 如何画ROC曲线

​ 下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。

步骤:

  1. 假设已经得出一系列样本被划分为正类的概率,按照大小排序。
  2. 从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。
  3. 每次选取一个不同的threshold,得到一组FPR和TPR,即ROC曲线上的一点。以此共得到20组FPR和TPR的值。
  4. 根据3、中的每个坐标点,画图。

2.11.13 如何计算TPR、FPR

1、分析数据 y_true = [0, 0, 1, 1];scores = [0.1, 0.4, 0.35, 0.8]。

2、列表。

样本预测属于P的概率(score)真实类别
y[0]0.1N
y[1]0.4N
y[2]0.35P
y[3]0.8P

3、将截断点依次取为score值,计算TPR和FPR。 当截断点为0.1时: 说明只要score>=0.1,它的预测类别就是正例。 因为4个样本的score都大于等于0.1,所以,所有样本的预测类别都为P。 scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [1, 1, 1, 1]; 正例与反例信息如下:

正例反例
正例TP=2FN=0
反例FP=2TN=0

由此可得: TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 1;

当截断点为0.35时: scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 1, 1]; 正例与反例信息如下:

由此可得: TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 0.5;

当截断点为0.4时: scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 0, 1]; 正例与反例信息如下:

由此可得: TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0.5;

当截断点为0.8时: scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 0, 0, 1];

正例与反例信息如下:

由此可得: TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0;

4、根据TPR、FPR值,以FPR为横轴,TPR为纵轴画图。

2.11.14 如何计算AUC

  • 将坐标点按照横坐标FPR排序 。
  • 计算第i个坐标点和第i+1个坐标点的间距dx
  • 获取第i或者i+1个坐标点的纵坐标y。
  • 计算面积微元ds=ydx
  • 对面积微元进行累加,得到AUC。

2.11.15 为什么使用Roc和Auc评价分类器

​ 模型有很多评估方法,为什么还要使用ROC和AUC呢?​ 因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化。

2.11.16 直观理解AUC

​ 下图展现了三种AUC的值:

​ AUC是衡量二分类模型优劣的一种评价指标,表示正例排在负例前面的概率。其他评价指标有精确度、准确率、召回率,而AUC比这三者更为常用。​ 一般在分类模型中,预测结果都是以概率的形式表现,如果要计算准确率,通常都会手动设置一个阈值来将对应的概率转化成类别,这个阈值也就很大程度上影响了模型准确率的计算。​ 举例:​ 现在假设有一个训练好的二分类器对10个正负样本(正例5个,负例5个)预测,得分按高到低排序得到的最好预测结果为[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],即5个正例均排在5个负例前面,正例排在负例前面的概率为100%。然后绘制其ROC曲线,由于是10个样本,除去原点我们需要描10个点,如下:

​ 描点方式按照样本预测结果的得分高低从左至右开始遍历。从原点开始,每遇到1便向y轴正方向移动y轴最小步长1个单位,这里是1/5=0.2;每遇到0则向x轴正方向移动x轴最小步长1个单位,这里也是0.2。不难看出,上图的AUC等于1,印证了正例排在负例前面的概率的确为100%。

​ 假设预测结果序列为[1, 1, 1, 1, 0, 1, 0, 0, 0, 0]。

​ 计算上图的AUC为0.96与计算正例与排在负例前面的概率0.8 × 1 + 0.2 × 0.8 = 0.96相等,而左上角阴影部分的面积则是负例排在正例前面的概率0.2 × 0.2 = 0.04。

​ 假设预测结果序列为[1, 1, 1, 0, 1, 0, 1, 0, 0, 0]。

​ 计算上图的AUC为0.88与计算正例与排在负例前面的概率0.6 × 1 + 0.2 × 0.8 + 0.2 × 0.6 = 0.88相等,左上角阴影部分的面积是负例排在正例前面的概率0.2 × 0.2 × 3 = 0.12。

2.11.17 代价敏感错误率与代价曲线

不同的错误会产生不同代价。以二分法为例,设置代价矩阵如下:

当判断正确的时候,值为0,不正确的时候,分别为Cost_{01}Cost_{10}

Cost_{10}:表示实际为反例但预测成正例的代价。

Cost_{01}:表示实际为正例但是预测为反例的代价。

代价敏感错误率=样本中由模型得到的错误值与代价乘积之和 / 总样本。

其数学表达式为:E(f;D;cost)=\frac{1}{m}\left( \sum_{x_{i} \in D^{+}}({f(x_i)\neq y_i})\times Cost_{01}+ \sum_{x_{i} \in D^{-}}({f(x_i)\neq y_i})\times Cost_{10}\right)

D^+,D^-​分别代表样例集的正例子集和反例子集,x是预测值,y是真实值。

代价曲线: 在均等代价时,ROC曲线不能直接反应出模型的期望总体代价,而代价曲线可以。 代价曲线横轴为[0,1]的正例函数代价:

P(+)Cost=\frac{pCost_{01}}{pCost_{01}+(1-p)*Cost_{10}}

其中p是样本为正例的概率。

代价曲线纵轴维[0,1]的归一化代价:

Cost_{norm}=\frac{FNRpCost_{01}+FNR*(1-p)Cost_{10}}{pCost_{01}+(1-p)*Cost_{10}}

其中FPR为假阳率,FNR=1-TPR为假阴率。

注:ROC每个点,对应代价平面上一条线。

例如,ROC上(TPR,FPR),计算出FNR=1-TPR,在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,面积则为该条件下期望的总体代价。所有线段下界面积,所有条件下学习器的期望总体代价。

2.11.18 模型有哪些比较检验方法

正确性分析:模型稳定性分析,稳健性分析,收敛性分析,变化趋势分析,极值分析等。 有效性分析:误差分析,参数敏感性分析,模型对比检验等。 有用性分析:关键数据求解,极值点,拐点,变化趋势分析,用数据验证动态模拟等。 高效性分析:时空复杂度分析与现有进行比较等。

2.11.19 为什么使用标准差

方差公式为:S^2_{N}=\frac{1}{N}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2}

标准差公式为:S_{N}=\sqrt{\frac{1}{N}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2}}

样本标准差公式为:S_{N}=\sqrt{\frac{1}{N-1}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2}}

与方差相比,使用标准差来表示数据点的离散程度有3个好处

1、表示离散程度的数字与样本数据点的数量级一致,更适合对数据样本形成感性认知。

2、表示离散程度的数字单位与样本数据的单位一致,更方便做后续的分析运算。

3、在样本数据大致符合正态分布的情况下,标准差具有方便估算的特性:68%的数据点落在平均值前后1个标准差的范围内、95%的数据点落在平均值前后2个标准差的范围内,而99%的数据点将会落在平均值前后3个标准差的范围内。

2.11.20 类别不平衡产生原因

类别不平衡(class-imbalance)是指分类任务中不同类别的训练样例数目差别很大的情况。

产生原因:

​ 分类学习算法通常都会假设不同类别的训练样例数目基本相同。如果不同类别的训练样例数目差别很大,则会影响学习结果,测试结果变差。例如二分类问题中有998个反例,正例有2个,那学习方法只需返回一个永远将新样本预测为反例的分类器,就能达到99.8%的精度;然而这样的分类器没有价值。

2.11.21 常见的类别不平衡问题解决办法

防止类别不平衡对学习造成的影响,在构建分类模型之前,需要对分类不平衡性问题进行处理。主要解决方法有:

1、扩大数据集

​ 增加包含小类样本数据的数据,更多的数据能得到更多的分布信息。

2、对大类数据欠采样

​ 减少大类数据样本个数,使与小样本个数接近。​ 缺点:欠采样操作时若随机丢弃大类样本,可能会丢失重要信息。​ 代表算法:EasyEnsemble。其思想是利用集成学习机制,将大类划分为若干个集合供不同的学习器使用。相当于对每个学习器都进行欠采样,但对于全局则不会丢失重要信息。

3、对小类数据过采样

​ 过采样:对小类的数据样本进行采样来增加小类的数据样本个数。

​ 代表算法:SMOTE和ADASYN。

​ SMOTE:通过对训练集中的小类数据进行插值来产生额外的小类样本数据。

​ 新的少数类样本产生的策略:对每个少数类样本a,在a的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。​ ADASYN:根据学习难度的不同,对不同的少数类别的样本使用加权分布,对于难以学习的少数类的样本,产生更多的综合数据。 通过减少类不平衡引入的偏差和将分类决策边界自适应地转移到困难的样本两种手段,改善了数据分布。

4、使用新评价指标

​ 如果当前评价指标不适用,则应寻找其他具有说服力的评价指标。比如准确度这个评价指标在类别不均衡的分类任务中并不适用,甚至进行误导。因此在类别不均衡分类任务中,需要使用更有说服力的评价指标来对分类器进行评价。

5、选择新算法

​ 不同的算法适用于不同的任务与数据,应该使用不同的算法进行比较。

6、数据代价加权

​ 例如当分类任务是识别小类,那么可以对分类器的小类样本数据增加权值,降低大类样本的权值,从而使得分类器将重点集中在小类样本身上。

7、转化问题思考角度

​ 例如在分类问题时,把小类的样本作为异常点,将问题转化为异常点检测或变化趋势检测问题。 异常点检测即是对那些罕见事件进行识别。变化趋势检测区别于异常点检测在于其通过检测不寻常的变化趋势来识别。

8、将问题细化分析

​ 对问题进行分析与挖掘,将问题划分成多个更小的问题,看这些小问题是否更容易解决。

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

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

相关文章

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致 现在有sqlserver和mysql两个库上的表在进行同步&#xff0c;sqlserver上的是源表&#xff0c;mysql上是目标表。 我们就把sqlserver上的数据同步到mysql上 mysql 是没有数据的。 sqlserver的三个表只是创建了…

利用Python自动化日常任务

在快节奏的现代生活中&#xff0c;时间就是一切。幸运的是&#xff0c;Python提供了一系列强大的库和工具&#xff0c;可以帮助我们自动化那些乏味且重复的任务&#xff0c;从而释放我们的时间&#xff0c;让我们可以专注于更有创造性和有意义的工作。下面&#xff0c;我们将探…

6、Linux-服务管理、权限管理和授权(sudo权限)

一、服务管理 systemctl list-unit-files&#xff1a;查看服务systemctl start 服务名&#xff1a;启动服务systemctl stop 服务名&#xff1a;关闭服务systemctl restart 服务名&#xff1a;重启服务systemctl status 服务名&#xff1a;查看服务状态systemctl enable 服务名…

BioTech - 药物晶型预测与剂型设计 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/136441046 药物晶型预测与剂型设计是指利用计算机模拟和优化药物分子在固态形式下的结构、性质和稳定性&#xff0c;以及与制剂工艺和质…

Python实现微信电脑版微信支付收款监听及支付回调通知

摘要 为什么要监听收款&#xff1f;那是因为现在还有人在使用微信的收款码、商业码、赞赏码实现免签支付&#xff0c;这类实现方法的最终方案还是监听收款结果。 技术原理 通过Python实时解析微信电脑版控件的文本内容来获取信息。不需要Hook和抓包&#xff0c;也不是走任何…

[DevOps云实践] 跨AWS账户及Region调用Lambda

[DevOps云实践] 跨AWS账户及Region调用Lambda 本文將幫大家理清一下幾個問題: 如何跨不同AWS賬戶,不同Region來調用Lambda? 不同Lambda之間如何互相調用?有時我們希望我們的Lambda脚本能夠運行在多個AWS賬戶中的不同Region下,但是,我們還不希望每個下面都去建立一個運行…

温湿度传感器SHT21

SHT21是一款基于IIC的温湿度传感器&#xff0c;它的引脚及定义如下&#xff1a; 标准的IIC器件&#xff0c;没有其他多余的引脚&#xff0c;应用框图如下&#xff1a; 温度的测量范围是-40到125℃&#xff0c;湿度测量范围0-100%RH&#xff0c;具体参数及采样精度见下图&#x…

HM_2019在面积不变情况下编辑网格

首先&#xff0c;应该保存其形状&#xff0c;计算他的面积。让面积不变作为一个约束&#xff0c;然后进行网格的形变。

【网站项目】154大学生创新创业平台竞赛管理子系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

d2-crud-plus 使用小技巧(二)—— 路由跳转查询

需求 项目中要在a.vue界面点击表格中数据&#xff0c;携带参数跳转到b.vue界面&#xff0c;并进行查询。需要在d2-crud-plus框架下实现。 解决方法 使用插槽将要点击的数据添加上点击事件&#xff0c;在点击事件中添加路由跳转&#xff0c;并携带参数。 在目标界面使用对外…

GIN与Echo:选择正确Go框架的指南

您是否在Go中构建Web应用&#xff1f;选择正确的框架至关重要&#xff01;GIN和Echo是两个热门选择&#xff0c;每个都有其优势和特点。本指南将详细介绍每个框架的特性、速度、社区热度以及它们各自擅长的项目类型。最后&#xff0c;您将能够为您的下一个Web项目选择完美的框架…

C++11常用知识分享(一)【列表初始化 || 简化声明 || 范围for || 左右值 || 可变参数模板】

目录 一. 列表初始化 1&#xff09;用法 2) initializer_list 小节&#xff1a; 二&#xff0c;简化声明 1) &#xff0c;auto 2) &#xff0c;decltype类 3)&#xff0c;nullptr 三&#xff0c;范围for 四&#xff0c;C11后&#xff0c;STL容器变化 五&#xff0c…

一篇文章教会你如何在IOS真机上完美运行React Native

一篇文章教会你如何在IOS真机上完美运行React Native 项目初始化项目配置可能遇到的问题没有账号也没有Team设备上没有打开开发者模式&#xff0c;也没有信任开发者证书 无线调试 项目初始化 在终端使用**npx react-native init ProjectName**初始化React Native项目。 进入项…

力扣550 游戏玩法分析 IV

目录 题目描述 思路整理 1. 首次登录日期 2. 第二天登录 3. 计算比率 实现思路 完整代码及解释 题目描述 Table: Activity ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int | | ev…

117.移除链表元素(力扣)

题目描述 代码解决 class Solution { public:ListNode* removeElements(ListNode* head, int val) {//删除头节点while(head!NULL&&head->valval){ListNode*tmphead;headhead->next;delete tmp;}//删除非头节点ListNode*curhead;while(cur!NULL&&cur-&g…

安卓虚拟机ART和Dalvik

目录 一、JVM和Dalvik1.1 基于栈的虚拟机字节码指令执行过程 1.2 基于寄存器的虚拟机 二、ART与Dalvikdex2aotAndroid N的运作方式 三、总结 一、JVM和Dalvik Android应用程序运行在Dalvik/ART虚拟机&#xff0c;并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。 Dalvik…

Vue.js 实用技巧:深入理解 Vue.set 方法

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

20 个不同的 Python 函数实例

Python 是一种广泛使用的高级编程语言&#xff0c;其函数是 Python 编程中至关重要的概念之一。函数是一段可以重复使用的代码块&#xff0c;可以接收输入参数并返回输出结果。使用函数能够提高代码的可读性、可维护性和重用性。 基础知识 在 Python 中&#xff0c;函数使用关…

【如何在Docker中,修改已经挂载的卷(Volume)】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 提示&#xff1a;添加投票&#xff01;&#xff01;&#xff01; 目录 简述概要知识图谱 简述概要 如何在Docker中&#xff0c;修改已经挂载的卷&#xff08;Volume&#xff09; 知识图谱 在Docker中&#xff0c;修改已经挂载…

本地navicate连接vm虚拟机中的mysql5.7docker容器

一&#xff0c;配置 前提是我已经启动的mysql5.7容器 使用 docker ps -a 查看所有的容器 使用 docker exec -it c4f9 bash 进入mysql命令行&#xff0c;注意这个c4f9是容器唯一id&#xff0c;不用写全连接mysql mysql -uroot -p123456&#xff0c;连接成功后 输入 show datab…