判断分类器在测试集上(testing data)的效果,以二分类器为例,形成2*2的矩阵。
不管是真实类别还是预测类别,都分为两类:是/不是 ,T/F;且从上到下、从左到右,是或不是的类别对应。
真实类别和预测类别吻合:TP(是汉堡)/TN(不是汉堡)——预测对了
真实类别和预测类别不吻合:FP(预测是汉堡)/ FN(预测不是汉堡)—— 预测错了
N分类:n*n的矩阵,薄荷绿的部分是预测正确的,剩下的都是预测错误——希望薄荷绿部分的数值尽可能的大,橙色的数值尽可能小,模型的效果更好。
混淆矩阵的各个评价指标:
正确率(Accuracy/Precision):模型正确分类样本数占总样本数比例 (110+65)/(110+65+3+2)=175/180=97.22%
敏感度(sensitivity)/ 召回率(recall)/ 真阳率(True Positive Rate):所有真实positive中,模型预测正确的positive比例。TP/ TP+FN 65/(65+3)=0.9558 ROC曲线的纵坐标
假阳率(False Positive Rate):所有真的negative中,模型预测错误成positive比例。即1-特异性。ROC曲线的横坐标
特异性(Specificity):所有真实negative中,模型预测正确的negative比例。110/(110+2)=0.9821
阳性预测值(positive predict value) 模型预测的所有positive中,预测正确的比例。TP / (TP + FP) 65/(65+2)=0.9701
阴性预测值(negative predict value) 模型预测的所有negative中,预测正确的比例。TN / (TP + FP) 110/(110+3)=0.9734
F 值: (2*97.22%*0.9558)/(97.22%+0.9558)= 0.9629
Roc曲线:即接收者 *** 作特征曲线(receiver operating characteristic curve),反映了真阳性率和假阳性率之间的变化关系。Roc曲线越趋近于左上角,预测结果越准确。
ROC 1.背景
大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价不能相提并论。如垃圾邮件过滤,我们希望重要的邮件永远不要被误判为垃圾邮件;在癌症检测中,宁愿误判也不漏判。这种情况下,仅用分类错误率来度量是不充分的,这样的度量错误掩盖了样本如何被错分的事实。所以,在分类中,当某个类别的重要性高于其他类别时,可以用Precison和Recall比分类错误率更好的新指标。
Precison(查准率):预测为正例的样本中真正正例的比例。Recall(召回率):真正为正例的样本有多少被预测出来。
根据我们最终的目标来选择度量指标。例如,在癌症检测中,我们希望选择Recall较高的模型(有病为正例)。而在垃圾邮件过滤中,我们希望选择Precison较高的模型。我们很容易构造一个高查准率或高召回率的分类器,但是很难保证两者同时成立。
2.ROC曲线用于度量分类中的非均衡性的工具,ROC曲线及AUC常被用来评价一个二值分类器的优劣。已经有了很多评价指标,为什么还要用ROC与AUC呢?因为在实际数据集中常出现类别不平衡现象,即负样本或正样本多很多(或相反),且测试数据中的正负样本分布可随时间而变化。在这种情况下,ROC曲线能保持不变。
a和c为ROC曲线,b和d为Precison和Recall曲线。a和b展示的是在原始测试集(正负样本平衡)的结果,c和d是将测试集中负样本的数量变为原来的10倍后分类器的结果。——ROC曲线基本保持不变,而Precison和Recall变化较大。
横坐标为FPR(False positive rate 假阳率),纵坐标为TPR(True postive rate真阳率)ROC 描绘了两者的相对权衡
四点一线:(0,0):fp=tp=0 ,即所有样本都被预测为负样本;(1,1):fp=tp=1,所有样本都被预测为正样本;
(1,0):fp=1,tp=0,所有正例都被预测为负例,而所有正例都没被预测出,最糟糕的分类器,它成功的避开了所有正确答案。
(0,1):fp=0,tp=1,这是一个完美的分类器,它将所有样本都正确分类。
ROC曲线越接近左上角,该分类器的性能越好,意味着分类器在假阳率很低的同时获得了很高的真阳率。
虚线y=x:这条对角线熵的点代表的是一个采用随机猜测策略的分类器的结果。例(0.5,0.5),表示对于一半的样本猜测其为正样本,另外一半样本为负样本。出现在右下角三角形中的任何分类器比随机猜测更糟糕。故,在ROC图中,此三角形通常为空。
3.AUC(Area under curve)ROC曲线下的面积ROC曲线一般都处于y=x直线上方,所以取值范围在0.5和1之间,使用AUC作为评价指标是因为ROC曲线在很多时候并不能清晰地说明哪个分类器的效果更好,而AUC值越大代表分类器效果更好。
AUC是一个概率值,随机挑选一个正样本及一个负样本,当前的分类算法根据计算得到的分数将这个正样本排在负样本前面的概率就是AUC值。所以,AUC的值越大,当前的分类算法越有可能将正样本排在负样本值前面,既能够更好的分类。
4.ROC曲线绘制对于一个特定的分类器和测试数据集,只能得到一个分类结果,即一组FPR和TPR的结果,ROC曲线的数据源。
Class表示每个测试样本真正的标签,p为正样本,n为负样本;Score表示每个测试样本属于正样本的概率值。绘制过程:
1..将Score从大到小排序;
2.从高到低,依次将score作为阈值threshold,当测试样本属于正样本的概率>=threshold时,认为它为正样本,否则为负样本。如,对于第四个样本,score=0.6,那么score值>=0.6的样本1,2,3,4都被认为是正样本,其他样本则被认为是负样本。
3.每次选取不同的score作为threshold,我们就可以得到一组FPR和TPR,即曲线上的一点,将这些点连接起来就可以得到完整的ROC曲线图,当threshold取值越多,ROC曲线就越平滑。
当我们将threshold设置为1和0时,即分别对应将所有样本划分为负样本和将所有样本划分为正样本,就可以的得到曲线上的(0,0)和(1,1)两点。
关于score值:分类器都会提供每个样例被判为阳性或者阴性的可信程度值,但通常情况下,这些值在最后输出离散分类标签之前会被清除。例如,朴素贝叶斯能提供一个可能值,在Logistic回归中输入到sigmoid函数中的是一个数值。在Adaboost和SVM中,会计算一个数值然后输入到sign()函数中,所有的这些值都可以看做score,用于衡量给定分类器的预测强度。
ROC点(0.1,0.5)产生了最高的准确率。!分类器的最好准确率在threshold=0.54时,而不是在类别平衡分布的threshold=0.5处。
5.Convex Hull阴影区域被称作两个曲线的convex hull,在选择分类器时总是应该根据convex hull的上边界进行 *** 作。如,目标只是覆盖40%的真阳性,选择方法A,这样可以提供5%的更低的假阳性率相对于B来说。如果你的目标是覆盖80%的真阳性,应该选择方法B,因为B的假阳性率为60%,与A相比更低。如果目标是覆盖60%的真阳性,那么应该结合A和B。
6.ROC曲线的python代码实现def plotROC(predStrengths, classLabels):
cur=(0.0, 0.0)
numPosClass = np.sum(np.array(classLabels) == 1.0)
yStep = 1.0/numPosClass
xStep = 1.0/(len(classLabels)-numPosClass)
print(np.array(predStrengths.flatten()))
sortedIndicies = np.argsort(-np.array(predStrengths.flatten()))
print(sortedIndicies)
fig = plt.figure()
fig.clf()
ySum = 0.0
ax = plt.subplot(111)
for index in sortedIndicies:
if classLabels[index] == 1.0:
delY = yStep; delX=0
else:
delY = 0; delX = xStep
ySum += cur[1]
ax.plot([cur[0], cur[0]+delX], [cur[1], cur[1]+delY], c='b')
cur = (cur[0]+delX, cur[1]+delY)
print(cur)
ax.plot([0, 1], [0, 1], 'b--')
ax.axis([0, 1, 0, 1])
plt.xlabel('False Positve Rate')
plt.ylabel('True Postive Rate')
plt.title('ROC curve for AdaBoost Horse Colic Detection System')
ax.axis([0, 1, 0, 1])
plt.show()
print('the Area under the curve is:', ySum*xStep)
函数两个输入参数,第一个参数就代表score,即分类器的预测强度。第二个参数是classLabels,即样本真实的类标签。
————————————————
版权声明:本文为CSDN博主「糖葫芦君」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yinyu19950811/article/details/81288287
投票法 1.背景
在航空航天领域,每个零件发出的电信号都对航空器的成功发射起到重要作用。如果我们有一个二进制形式的信号:11101100100111001011011011011,在传输过程中第二位发生了翻转10101100100111001011011011011,这导致的结果可能是致命的。一个常用的纠错方法是重复多次发送数据,并以少数服从多数的方法确定正确的传输数据。一般情况下,错误总是发生在局部,因此融合多个数据是降低误差的一个好方法,这就是投票法的基本思路。
2.定义投票法是集成学习中常用的技巧,是一种遵循少数服从多数原则的集成学习模型,通过多个模型的集成降低方差,从而提高模型的鲁棒性。帮助我们提高模型的泛化能力,减少模型的错误率。在理想情况下,投票法的预测效果应当优于任何一个基模型的预测效果。投票法在回归模型和分类模型上都可使用。
- 回归投票法:预测结果是所有模型预测结果的平均值。
- 分类投票法:预测结果是所有模型种出现最多的预测结果。
学习器hi在样本X上的预测输出表示为一个N维向量,
- 绝对多数投票法(majority voting):若某标记得票过半数, 则预测为该标记; 否则拒绝预测.
- 相对多数投票法(plurality voting):预测为得票最多的标记, 若同时有多个标记获最高票, 则从中随机选取一个.
在不允许拒绝预测的任务中, 绝对多数、相对多数投票法统称为“多数投票法”.
- 加权投票法(weighted voting):
分类投票法又可划分为硬投票与软投票:
- 硬投票:预测结果是所有投票结果最多出现的类
对于某个样本:模型 1 的预测结果是 类别 A;模型 2 的预测结果是 类别 B;模型 3 的预测结果是 类别 B—— 有2/3的模型预测结果是B,因此硬投票法的预测结果是B
- 软投票:所有投票结果中概率加和最大的类。
对于某个样本:模型 1 的预测结果是 类别 A 的概率为 99%;模型 2 的预测结果是 类别 A 的概率为 49%;模型 3 的预测结果是 类别 A 的概率为 49%,最终对于类别A的预测概率的平均是 (99 + 49 + 49) / 3 = 65.67%,因此软投票法的预测结果是A。
软投票法与硬投票法可以得出完全不同的结论。相对于硬投票,软投票法考虑到了预测概率这一额外的信息,因此可得出比硬投票法更准确的预测结果。
————————————————
版权声明:本文为CSDN博主「面包猎人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40807714/article/details/115709812
卷积神经网络(CNNs)
是包含卷积计算的深度前馈神经网络,其核心是利用局部感知域、权值共享和汇聚层的思想来达到简化网络参数的目的,并使得网络具有一定程度的位移、尺度、非线性形变稳定性。
主要由数据输入层、卷积层、池化层、全连接层和输出层5种网络层构成。数据输入层是将网格化的数据作为输入数据写入神经单元;系列的卷积层和池化层分别选择合适的激活函数从浅层到深层提取特征和下采样;全连接层在网络末端实现特征的映射和分类;输出层可用于结果输出或特征可视化。通过设置卷积层、池化层、全连接层、激活函数和损失函数的适当组合,可以建立可靠的复杂非线性图像任务模型。
1.卷积核(convolution kernel-CONV)https://setosa.io/ev/image-lernels卷积与卷积核的可视化 *** 作与理解
第一幅图和第二幅图对应,第三幅图为原图
中间为卷积核kenel,可以在input image上滑动,从左到右,从上到下进行扫描。output image输出的为对应区域的乘积之和。
卷积层直接对原始输入信息进行计算。先通过使用特定尺寸的卷积核(权值矩阵)提取整体数据的局部特征, 然后通过步长平移的方式提取不同位置的数据特征。卷积核相当于卷积 *** 作中的一个过滤器,用于提取数据特征,特征提取后会得到一个特征图。单个卷积核通常处理单个特征,一幅图中的多个特征可以分别采用多个卷积核。
窗口大小要和卷积核的大小相同(3*3),不然无法算出值。
步长(stride/step):从左往右,从上往下窗口滑动的像素个数,步长不能超过窗口大小,若超过,有些信息就会丢失掉。步长增大,所得的预测结果精细程度降低。
填充值(padding):一些窗口在步长滑动后,有些信息无法覆盖,将填充值设为0,为了方便计算,不会影响原来的特性。
深度/卷积核数量:中间有几组过滤器/卷积核,有多少个深度就是从多少个方面去深挖图像的特性(如颜色、形状等)。卷积核数量越多,提取到的局部特征越多
超参:自己给定,如窗口大小、步长
参数:根据学习算法,如梯度下降得到最优参数(如下例中参数个数为3*3*3*2+2,2为偏置数)
第一列为图像的3个通道:R、G、B
卷积之后通常会引入非线性激活函数(非线性映射函数),如RuLU函数,在保证训练效果的同时可以加快训练速度。
2.池核(pooling kernel-POOL)卷积后的图像通常也很大,也可能提取了很多弱的特征,因此需要压缩降维。池化可加快运算速度,很大程度上能避免过拟合,提高神经网络的泛化能力。图像中的相邻要素倾向于具有相似的值
包括average pooling和 max pooling,一般情况下,max pooling比average pooling效果要好
对输入的特征数据进行压缩,简化网络计算复杂度,提取主要特征,相当于降维 *** 作。经过卷积 *** 作后,相邻区域会有相似特征信息,若全留着会存在信息冗余,增加计算难度。池化层减少数据空间,使参数数量和计算量下降,一定程度上控制了过拟合。
3.全连接层(fully connected layers-FC)与人工神经网络一样,全连通层通过几个隐藏层将一维的扁平特征映射到分类维。全连接层的每一个结点都与上一层的所有结点相连,用于把之前提取到的特征综合起来。对n-1层和n层而言,n-1层的任意节点都和第n层所有节点有连接。(第n层每个节点在进行计算时,几乎函数输入的是n-1层所有节点的加权)
4.激活函数(activation functions)进行非线性任务,如ReLU和Tanh。目的是为了使得多层的神经网络具有实际意义,否则无论多少层的线性映射,最终都会与单层感知机等效。
5.损失函数(loss functions)损失函数是梯度下降学习(gradient descent learning)在反向传播(back propagation)中的目标函数,如交叉熵损失(cross entropy loss)和均方误差(mean square error)。
监督任务中的两个重要值:预测值(输入CNN后预测得到的)和真实值(输入数据本身的),通过对每个卷积核使用反向传播算法,使得预测值和真实值差值最小。
6.Softmax函数(softmax function)一般在CNN的最后一层设置softmax函数,用于计算矿床的含矿概率。
7.三种常用的CNN结构(LeNet、AlexNet、VggNet)LeNet:relatively simple,常用的激活函数是 Sigmoid/Tanh
AlexNet:deeper than LeNet structure,常用的激活函数是ReLU。
AlexNet卷积神经网络,由8层网络组成= 5层卷积层(Conv)+ 3层全连接层(fc),在Conv1和Conv2后设置了局部响应归一化机制——增强神经元反馈大的激活值,减少局部反馈小的神经元激活值。在Conv1、Conv2和Conv5后分别设置了1个池化层——减少网络的参数数量。
VggNet:deeper than the other two networks,通过堆叠多个3×3卷积核而不是大规模卷积核来减少权值的数量。
————————————————
参考文献:Applications of data augmentation in mineral prospectivity prediction based on convolutional neural networks
深度学习数据增强方法深度学习需要构建大容量的训练样本,对训练样本量有要求,但有时已知数据较少(如矿产预测,通常已知矿床数量较少),需进行数据增强方法。
Flip图像进行水平/垂直翻转。
Shift将图像沿水平或垂直方法平移一定步长。
Rotation & Resize图像绕着某个点旋转一定的角度。 图像缩放,保证模型具有尺度不变性。
Croping & Noise图像随机裁剪,只截取部分图像进行训练。 在图像中加入噪音。
步长平移采用一定窗口大小,如48*48=2304个网格单元,通过移动窗口使矿床点位于1个网格单元中,提取窗口所包含的所有物探核化探网格数据。对于1个矿床点可以获取2304个训练单元,如果研究区有n个矿床点,则可以获取2304n个训练单元。在研究区域随机选取已知矿床点数2倍的网格作为未知区,用前面相同的方法获取未知区的训练单元。(李忠谭,2021)
可以理解为将同一个矿床出现在窗口的不同位置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)