R与分类模型

二分类问题

TP,FP,TN和FN

对于二分类问题先介绍几个概念
真实值为A类,预测值正确分类为A类用the true positive(TP)表示
真实值为A类,预测值错误分类为B类用the false negative(FN)表示

真实值为B类,预测值错误分类为A类用the false positive(FP)表示
真实值为B类,预测值正确分类为B类用the false negative(TN)表示
其中,positive为正类(A类),negative负类(B类)

由此我们还定义了两个概念:
1.敏感度:TP/(TP+FN)



2.特异性:TN/(TN+FP)


多分类问题
对于多分类问题可以用宏平均(n个二分类评价的平均)和微平均(每个TP,FP累加)来评价模型

混淆矩阵


这里我们评价分类为正类(A类)的效果,可利用PPV(准确率)来衡量
PPV = TP/(TP+FP)
或者FDR(错误发现率):FDR = FP/(FP+TP) = 1-FDR
评价分类为负类(B类)的效果,可用NPV衡量
NPV = TN/(TN+FN)

ROC曲线

ROC曲线是衡量分类好坏的一个指标
ROC曲线怎么画呢?


我们定义了敏感度和特异性,如图横纵坐标
那么怎么画呢,我们参考下面的文章
可参考:https://www.jianshu.com/p/6572bf3a0d5d
举个例子:
假设

那么我们对计算的预测值划分阈值,假设:
1.阈值为1,正类(A类)和负类(B类)都没有达到这个值的,所以FDR,TPR都为0

2.根据上表,选择阈值为0.9,正例中有1个样本的预测值大于等于1,反例中有0个,所以,TPR=1/3(标签中有3个正例),FPR=0。

3.根据上表,选择阈值为0.8,正例中有2个样本的预测值大于等于1,反例中有0个,所以,TPR=2/3,FPR=0。

4.根据上表,选择阈值为0.7,正例中有3个样本的预测值大于等于1,反例中有0个,所以,TPR=1,FPR=0。

5:根据上表,选择阈值为0.3,正例中有3个样本的预测值大于等于1,反例中有1个,所以,TPR=1,FPR=1/3。

6:根据上表,选择阈值为0.2,正例中有3个样本的预测值大于等于1,反例中有2个,所以,TPR=1,FPR=2/3。

7.根据上表,选择阈值为0.1,正例中有3个样本的预测值大于等于1,反例中有3个,所以,TPR=1,FPR=1。
如下表:



这样的话,把每个阈值对应的FPR和TPR画在图上即可


又如:



按照上述的阈值来筛选:


说到这相信大家都知道了,其实ROC曲线上的每一个点即为所设定阈值对应的FDR和TDR的值(这里的FDR和TDR代表的是按照预测值分类正确占对应标签正类负类的比例)

那么,ROC曲线下方包围的面积即为评判分类效果,面积越大分类效果越好

lift chart

对于二分类问题,还有个指标,衡量使用了分类器效果好不好的,先上图吧!



中间红色的称为base line ,比如说你要向选定的1000人邮寄调查问卷(a+b+c+d=1000)。以往的经验告诉你大概20%的人会把填好的问卷寄回给你,即1000人中有200人会对你的问卷作出回应(response,c+d=200),用统计学的术语,我们说baseline response rate是20%(c+d/a+b+c+d=20%)

通过以前的问卷调查,你收集了关于问卷采访对象的相关资料,比如说年龄、教育程度之类。利用这些数据,你确定了哪类被访问者对问卷反应积极。假设你已经利用这些过去的数据建立了模型,这个模型把这1000人分了类,现在你可以从你的千人名单中挑选出上次问卷反馈反应最积极的100人,而这次问卷反馈这100人有60人反馈了问卷,那么反馈率为60%,那么使用分类器分类相对的提升(lift value)就为60%/20%=3,效率提升了3倍

所谓base line就是没有分类器分类的对象,将总样本数按照10%的比例均等分成10份,每份10人
比方说10%就是从100人中选10人,其中有1人有回信,那么坐标是(10%,10%),接下来都按照10%这个比例递增,坐标为(20%,20%),这里的坐标值是累计的,按10%来分,每10%的总体,回信比例恒为10%,将这些比例进行累计,横坐标为20%纵坐标即为10%+10%,横坐标为30%纵坐标即为10%+10%+10%,依次类推就可以画图了
那么经过分类器筛选后
在这10人中经过分类器筛选,有2人回信,那么比例是20%,那么在下一组10人里面有3人回信,比例为30%,那么坐标为(20%,50%),这里的坐标值是累计的,按10%来分,每10%里面回信人比例进行累计,依次类推就可以画图了
如果绿线在红线上面,那么代表分类效率好

混淆矩阵R:

confusionMatrix(data = simulatedTest$RFclass, 
reference = simulatedTest$class, 
positive = "Class1")

敏感度和特异性

sensitivity(data = simulatedTest$RFclass, 
reference = simulatedTest$class, 
positive = "Class1") 
specificity(data = simulatedTest$RFclass, 
reference = simulatedTest$class,
negative = "Class2")

PPV和NPV

posPredValue(data = simulatedTest$RFclass, 
reference = simulatedTest$class, 
positive = "Class1") 
negPredValue(data = simulatedTest$RFclass, 
reference = simulatedTest$class,
negative = "Class2")

ROC曲线

library(pROC)
rocCurve <- roc(response = simulatedTest$class, 
predictor = simulatedTest$RFprob, 
## This function assumes that the second 
## class is the event of interest, so we 
## reverse the labels. 
levels = rev(levels(simulatedTest$class)))

你可能感兴趣的:(R与分类模型)