《第12章 模型性能评估及优化教学课件R语言数据分析与挖掘.pptx》由会员分享,可在线阅读,更多相关《第12章 模型性能评估及优化教学课件R语言数据分析与挖掘.pptx(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第12章 模型性能评估及优化教学课件R语言数据分析与挖掘目录PAGE模型性能评估 01202模型参数优化01PAGE模型性能评估301PAGE4模型性能评估4R 语言数据分析与挖掘(微课版)预测通常有两大应用场景:u第一类是预测某指标的取值,也称为数值预测,数值预测模型性能评估主要通过均方误差、均方根误差、平均绝对误差等指标来评价;u第二类是预测某事物出现的概率,也称为概率预测,对于二分类概率预测,常以混淆矩阵为基础,通过准确率率、覆盖率等指标,结合ROC曲线、KS曲线、提升图等可视化方法来评估模型性能。PAGE5数值预测评估方法5R 语言数据分析与挖掘(微课版)PAGE6数值预测评估方法6R
2、 语言数据分析与挖掘(微课版)PAGE7数值预测评估方法R 语言实现7R 语言数据分析与挖掘(微课版)让我们利用mlbench 扩展包中BostonHousing(波士顿房价)数据集为例,利用lm()函数建立以medv 为因变量,其他特征为自变量的线性回归模型,并通过自定义函数,实现计算以上常见数值预测模型评估指标。实现代码如下:#加载包,不存在就进行在线下载后加载 if(!require(mlbench)install.packages(mlbench)data(BostonHousing)#数据分区 library(caret)index train test#利用训练集构建模型,并对测试
3、集进行预测 set.seed(1234)fit pred#自定义函数计算数值预测模型的评估指标 numericIndex-function(obs,pred)+#计算平均绝对误差MAE+MAE-mean(abs(obs-pred)+#计算均方误差MSE+MSE-mean(obs-pred)2)+#计算均方根误差RMSE+RMSE-sqrt(mean(obs-pred)2)+#计算归一化均方误差+NMSE-sum(obs-pred)2)/(sum(obs-mean(obs)2)+#计算判定系数Rsquared+Rsqured#计算各指标度量值 numericIndex(test$medv,pre
4、d)MAE MSE RMSE NMSE Rsqured 3.4565308 26.6531431 5.1626682 0.3731474 0.6461423PAGE8概率预测评估方法-混淆矩阵8R 语言数据分析与挖掘(微课版)概率是指事物出现的可能性,是对分类问题中某类出现概率的描述,本质上是分类问题(通过各类别出现的概率大小确定取某一类)。常用评估方法有:混淆矩阵、ROC曲线、KS曲线、累计提升图等。处理分类问题的评估思路,最常见的就是通过混淆矩阵,结合分析图表综合评价。预测类别实际类别 1 01 TP FN0 FP TN True Positive(TP):指模型预测为正(1),并且实际上
5、也的确是正(1)的观察对象的数量。True Negative(TN):指模型预测为负(0),并且实际上也的确是负(0)的观察对象的数量。False Positive(FP):指模型预测为正(1),但是实际上是负(0)的观测对象的数量。False Negative(FN):指模型预测为负(0),但是实际上是正(1)的观测对象的数量。PAGE9概率预测评估方法-混淆矩阵9R 语言数据分析与挖掘(微课版)PAGE10概率预测评估方法-混淆矩阵10R 语言数据分析与挖掘(微课版)PAGE11概率预测评估方法-混淆矩阵案例11R 语言数据分析与挖掘(微课版)接下来,利用DAAG扩展包的数据集anesth
6、etic为例进行演示。数据集来自于一组医学数据,其中变量conc表示麻醉剂的用量,move则表示手术病人是否有所移动,而我们用nomove做为因变量,研究的重点在于conc的增加是否会使nomove的概率增加。以下代码利用逻辑回归构建二分类预测模型,以0.5作为预测概率值的划分阈值,大于0.5预测概率值的样本类别为1,否则为0,最后利用table()函数得到混淆矩阵,并计算各评估指标值。#install.packages(DAAG)library(DAAG)data(anesthetic)anes1=glm(factor(nomove)conc,family=binomial(link=log
7、it),data=anesthetic)#对模型做出预测结果 pre=predict(anes1,type=response)#得到的是样本为1 类别时的预测概率值#以0.5作为分界点 result 0.5,1,0)#install.packages(DAAG)library(DAAG)data(anesthetic)anes1=glm(factor(nomove)conc,family=binomial(link=logit),data=anesthetic)#对模型做出预测结果 pre=predict(anes1,type=response)#得到的是样本为1 类别时的预测概率值#以0.5
8、作为分界点 result 0.5,1,0)#构建混淆矩阵 confusion confusion predictactual 0 1 0 10 4 1 2 14#计算各指标(1 为正样本,0 为负样本)(TP(TN(FP(FN(Accuracy(Precision(Recall(F1(FPR-FP/(TN+FP)#假正率1 0.2857143PAGE12概率预测评估方法-R OC 曲线12R 语言数据分析与挖掘(微课版)ROC(Receiver Operating Characteristic,接收者运行特征)曲线来源于信号检测理论,它显示了给定模型的灵敏性(Sensitivity)真正率与假
9、正率(False Postive Rate)之间的比较评定。给定一个二元分类问题,通过对测试数据集可以正确识别“1”实例的比例与模型将“0”实例错误地识别为“1”的比例进行分析,来进行不同模型的准确率的比较评定。真正率的增加是以假正率的增加为代价的,ROC曲线下面的面积就是比较模型准确度的指标和依据。面积(AUC)大的模型对应的模型准确度要高,也就是要择优应用的模型。AUC越接近0.5,对应的模型的准确率就越低。AUC值越接近1,模型效果越好,通常情况下,当AUC在0.8以上时,模型就基本可以接受了。红色实线就是ROC曲线。图中以假正率(False Positive Rate,FPR)为X轴,
10、代表在所有正样本中,被判断为假正的机率,又写1-Specificity;以真正率(True Positive Rate,TPR)为Y轴,代表在所有正样本中,被判断为真正的机率,又称为灵敏性。可见,ROC曲线的绘制还是非常容易的。只要利用预测为正的概率值对样本进行降序排序后,再计算出从第一个累积到最后一个样本的真正率和假正率,就可以绘制ROC曲线了。PAGE13概率预测评估方法-R OC 曲线案例13R 语言数据分析与挖掘(微课版)让我们继续利用上一小节的类别为1的预测概率值,结合样本实际类别,以下代码计算出从第一个累积到最后一个样本的真正率和假正率。#构建结果数据集 result result
11、 result$cumsum result$poscumsum result$tpr result$fpr result$lift head(result)pre_prob true_label cumsum poscumsum tpr fpr lift6 0.9994179 1 1 1 0.062 0 1.8813 0.9994179 1 2 2 0.125 0 1.887 0.9196901 1 3 3 0.188 0 1.889 0.9196901 1 4 4 0.250 0 1.8812 0.9196901 1 5 5 0.312 0 1.8815 0.9196901 1 6 6 0.
12、375 0 1.88PAGE14概率预测评估方法-R OC 曲线案例14R 语言数据分析与挖掘(微课版)接下来,利用result中的变量tpr和fpr,可以非常轻松地绘制出ROC曲线,运行以下代码得到结果如图。#画出roc曲线 library(ggplot2)if(!require(ROCR)install.packages(ROCR)ggplot(result)+geom_line(aes(x=result$fpr,y=result$tpr),color=red1,size=1.2)+geom_segment(aes(x=0,y=0,xend=1,yend=1),color=grey,lty
13、=2,size=1.2)+annotate(text,x=0.5,y=1.05,label=paste(AUC:,round(ROCR:performance(prediction(result$pre_prob,result$true_label),auc)y.values1,3),+size=6,alpha=0.8)+scale_x_continuous(breaks=seq(0,1,.2)+scale_y_continuous(breaks=seq(0,1,.2)+xlab(False Postive Rate)+ylab(True Postive Rate)+ggtitle(label
14、=ROC-Chart)+theme_bw()+theme(+plot.title=element_text(colour=gray24,size=12,face=bold),+plot.background=element_rect(fill=gray90),+axis.title=element_text(size=10),+axis.text=element_text(colour=gray35)PAGE15概率预测评估方法-R OCR 扩展包15R 语言数据分析与挖掘(微课版)其实R语言的ROCR扩展包已经实现了绘制ROC曲线功能,并且可以输出对应的AUC值。ROCR扩展包通过可视化方法
15、根据得分评估分类器的性能,其中,ROC曲线、敏感度特异度曲线、提升图、精度召回率是权衡可视化中用于具体成对性能指标的经典方法。ROCR扩展包是用于创建阈值参数化的二维性能曲线的灵活工具,对应的两个性能指标可以从超过25个性能指标中选取,并且自由组合。其中主要函数为performance(),基本表达形式如下:performance(prediction.obj,measure,x.measure=cutoff,.)PAGE16概率预测评估方法-R OCR 扩展包案例16R 语言数据分析与挖掘(微课版)#利用ROCR包绘制roc曲线 library(ROCR)pred1#设置参数,横轴为假正率f
16、pr,纵轴为真正率tpr perf#绘制ROC曲线 plot(perf,main=利用ROCR包绘制ROC曲线)PAGE17概率预测评估方法-KS 曲线17R 语言数据分析与挖掘(微课版)KS曲线基于Kolmogorov-Smirnov的两样本检验的思想,按预测概率从大到小的顺序划分等分位数分别统计正负样本的累积函数分布,并检验其一致性。分布相差越大,模型效果越好;分布越接近,模型效果越差。两条折线分别代表各分位点下的正例覆盖率和1-负例覆盖率,通过两条曲线很难对模型的好坏做评估,一般会选用最大的KS值作为衡量指标。KS的计算公式为:KS=Sensitivity-(1-Specificity)
17、=Sensitivity+Specificity-1。对于KS值而言,也是希望越大越好,通常情况下,当KS值大于0.2时,说明模型具有区分能力,预测效果可能达到使用要求。Sensitivity:灵敏性(真正率)Specificity:特效性(正负率)PAGE18概率预测评估方法-KS 曲线案例18R 语言数据分析与挖掘(微课版)这里仍利用result结果集,使用ggplot2扩展包绘制KS曲线,运行以下代码得到结果如图。#画出KS曲线 ggplot(result)+geom_line(aes(1:nrow(result)/nrow(result),result$tpr),colour=red2
18、,size=1.2)+geom_line(aes(1:nrow(result)/nrow(result),result$fpr),colour=blue3,size=1.2)+annotate(text,x=0.5,y=1.05,label=paste(KS=,round(which.max(result$tpr-result$fpr)/nrow(result),4),+at Pop=,round(max(result$tpr-result$fpr),4),size=6,alpha=0.8)+scale_x_continuous(breaks=seq(0,1,.2)+scale_y_conti
19、nuous(breaks=seq(0,1,.2)+xlab(Total Population Rate)+ylab(TP/FP Rate)+ggtitle(label=KS-Chart)+theme_bw()+theme(+plot.title=element_text(colour=gray24,size=12,face=bold),+plot.background=element_rect(fill=gray90),+axis.title=element_text(size=10),+axis.text=element_text(colour=gray35)PAGE19概率预测评估方法-累
20、积提升图19R 语言数据分析与挖掘(微课版)#画累积提升图 ggplot(result)+geom_line(aes(x=(1:nrow(result)/nrow(result),y=result$lift),color=red3,size=1.2)+scale_x_continuous(breaks=seq(0,1,.2)+xlab(Total Population Rate)+ylab(Lift value)+ggtitle(label=LIFT-Chart)+theme_bw()+theme(+plot.title=element_text(colour=gray24,size=12,f
21、ace=bold),+plot.background=element_rect(fill=gray90),+axis.title=element_text(size=10),+axis.text=element_text(colour=gray35)PAGE模型参数优化2002PAGE21模型参数优化21R 语言数据分析与挖掘(微课版)参数是指算法中的未知数,有的需要人为指定,比如神经网络算法中的学习率、迭代次数等,这些参数在深度学习中又称为超参数;有的是从数据中拟合而来,比如线性回归中的系数。在使用选定算法进行建模时设定或得到的参数很可能不是最优或接近最优的,这时需要对参数进行优化以得到更优
22、的预测模型。常用的参数优化方法主要包括训练集、验证集和测试集的引入、K折交叉验证、网格搜索等。PAGE22训练集、验证集、测试集的引入22R 语言数据分析与挖掘(微课版)在模型的训练过程中可以引入验证集策略来防止模型的过拟合,即将数据集分为3个子集:训练集,用来训练模型;验证集,用来验证模型效果,帮助模型调优;测试集,用来测试模型的泛化能力,避免模型过拟合。该模型的训练过程如图。PAGE23K 折交叉验证23R 语言数据分析与挖掘(微课版)K折交叉验证是采用某种方式将数据集切分为k个子集,每次采用其中的一个子集作为模型的测试集,余下的k-1个子集用于模型训练;这个过程重复k次,每次选取作为测试集的子集均不相同,直到每个子集都测试过;最终将k次测试结果的均值作为模型的效果评价。显然,交叉验证结果的稳定性很大程度取决于k的取值。k常用的取值是10,此时称为10折交叉验证。在此给出10折交叉验证的示意图。PAGE24网格搜索24R 语言数据分析与挖掘(微课版)网格搜索的基本原理是将各参数变量值的区间划分为一系列的小区间,并按顺序计算出对应各参数变量值组合所确定的目标值(通常是误差),并逐一择优,以得到该区间内最小目标值及其对应的最佳参数值。该方法可保证所得的搜索解释全局最优或接近最优的,可避免产生重大的误差。示意图如图。