@Frankchen
2016-04-12T02:46:05.000000Z
字数 4319
阅读 3267
Translation
你要用什么标准来衡量机器学习算法呢?
本文将讨论如何使用一系列的规范的评价标准来衡量R语言中的机器学习算法。
让我们从这里开始。
R语言提供了许多可供你用来评价机器学习算法的标准。
当我们使用caret来评价模型时,默认的评价标准,对于分类问题是准确率而对于回归来说则是均方根误差。但是 caret也支持许多其他常用的评价标准。
在下一节,你将逐步熟悉由caret提供的各种评价标准。每一个例子都有案例分析你可以复制粘贴你的项目并应用到你的问题中去。
注意到,本文假设你已经了解如何解释这些其他的评价标准。如果这些对于你是全新的知识,别着急,我将提供一些链接提供额外的阅读,在那里你可以学到更多。
本节主要讲述如何使用一系列的常见的评价标准来衡量机器学习算法。
特别的,本节将展示如何在R语言的caret包中使用这些评价标准:
上面是在caret中,对于二元的或者多元分类数据集,默认的算法的评价标准
准确率指的是在所有样本中正确分类的样本数的百分比。相比多元分类问题,其在二元分类问题中更常用,因为,对于准确率如何在不同的分类之间分配是不明确的(例如,你需要深入一个混乱的矩阵)。了解更多关于准确率的信息。
Kappa系数或者Cohen Kappa系数和分类准确率类似,只不过它定义为数据集上的评价一致性。在那些不同的分类之间是不太平衡的问题上使用Kappa系数是更加有用的评价方式(例如,正负类比例是3比7的时候,我们只要预测所有的样本为负类就可以简单的获得70%的准确率)。了解更多关于Kappa系数的信息。
在下面的例子中我们使用的是皮马印第安人糖尿病数据集。其中正负类的比例分别是35%和65%。
# load librarieslibrary(caret)library(mlbench)# load the datasetdata(PimaIndiansDiabetes)# prepare resampling methodcontrol <- trainControl(method="cv", number=5)set.seed(7)fit <- train(diabetes~., data=PimaIndiansDiabetes, method="glm", metric="Accuracy", trControl=control)# display resultsprint(fit)
测试这个例子,我们可以发现对于要评价的每个机器学习算法关于准确率和Kappa系数的表格。其中包括每个评价标准的均值(左侧)和标准差(标记为SD) , 取代了交叉验证的折叠和试验的数字。
你可以看到这个模型的准确率接近76%,比基准准确率65%高了11个百分点,这是很稀松平常的。而另一方面,Kappa系数接近46%,这是更加有趣的。
Generalized Linear Model768 samples8 predictor2 classes: 'neg', 'pos'No pre-processingResampling: Cross-Validated (5 fold)Summary of sample sizes: 614, 614, 615, 615, 614Resampling resultsAccuracy Kappa Accuracy SD Kappa SD0.7695442 0.4656824 0.02692468 0.0616666
These are the default metrics used to evaluate algorithms on regression datasets in caret.
RMSE或者均方误差是预测值与观测值的平均贝利程度。在输出变量中,对于得到总体上的一个算法的好坏程度,均方误差是很有用的,了解更多关于均方误差的信息。
读作R平方或者叫做决定系数,它是一种预测和观测之间的“符合程度”的衡量方式。它是一个介于0和1之间的数字,分别代表完全不符合和完全符合。了解更多关于的信息。
下面这个例子使用了长期经济数据集。输出变量是“就业人数”。我们不明确它是否是实际数字(例如以百万为单位)或者是百分比。
# load librarieslibrary(caret)# load datadata(longley)# prepare resampling methodcontrol <- trainControl(method="cv", number=5)set.seed(7)fit <- train(Employed~., data=longley, method="lm", metric="RMSE", trControl=control)# display resultsprint(fit)
测试这个例子,我们可以发现对于要评价的机器学习算法的均方误差和决定系数的表格。你可以看到两者的均值和标准差都被列出。
可以看到,就业数栏目的均方误差是0.38。然而, 值非常接近于1(0.988)显示其对于数据的良好的符合程度。
Linear Regression16 samples6 predictorNo pre-processingResampling: Cross-Validated (5 fold)Summary of sample sizes: 12, 12, 14, 13, 13Resampling resultsRMSE Rsquared RMSE SD Rsquared SD0.3868618 0.9883114 0.1025042 0.01581824
ROC标准只适用于二元分类。
为了计算ROC信息,你必须将你的trainControl中的summaryFunction 改为twoClassSummary。这将计算出ROC曲线下的面积(AUROC),也叫作曲线面积(AUC)。
ROC就是ROC曲线或者AUC下的面积。AUC代表一个模型区分正例和负例的能力。值为1.0的面积代表一个预测完全正确的模型,而值为0.5的面积 代表预测表现和随机一样的模型。了解更多关于ROC的信息。
ROC可以分解为两方面,灵敏度和准确度。一个二元分类问题实质上就是灵敏度和准确度之间的权衡。
灵敏度是真正值率,也叫作召回率。它代表正例被分类为正例(第一类)的比例。
准确度也叫作真负值率。它是负类(第二类)被预测为正类的概率。 了解更多关于灵敏度和准确度的信息。
# load librarieslibrary(caret)library(mlbench)# load the datasetdata(PimaIndiansDiabetes)# prepare resampling methodcontrol <- trainControl(method="cv", number=5, classProbs=TRUE, summaryFunction=twoClassSummary)set.seed(7)fit <- train(diabetes~., data=PimaIndiansDiabetes, method="glm", metric="ROC", trControl=control)# display resultsprint(fit)
这里你可以发现AUC分值为0.833,这代表这“好”但是并不在“卓越”的表现。第一级别被当做整类,“阴性” (没有糖尿病风险)被当做正类。
Generalized Linear Model768 samples8 predictor2 classes: 'neg', 'pos'No pre-processingResampling: Cross-Validated (5 fold)Summary of sample sizes: 614, 614, 615, 615, 614Resampling resultsROC Sens Spec ROC SD Sens SD Spec SD0.8336003 0.882 0.5600978 0.02111279 0.03563706 0.0560184
对数损失函数或者对数损失,用于评价二元分类但是对于多元分类算法更加常用。特别的,对数损失评估了算法判断的概率。了解更多关于对数损失的信息。
这个例子中,我们可以看到鸢尾花多元分类问题的对数损失。
# load librarieslibrary(caret)# load the datasetdata(iris)# prepare resampling methodcontrol <- trainControl(method="cv", number=5, classProbs=TRUE, summaryFunction=mnLogLoss)set.seed(7)fit <- train(Species~., data=iris, method="rpart", metric="logLoss", trControl=control)# display resultsprint(fit)
对数损失被最小化并且我们看到最优的分类回归树其复杂度参数cp=0。
CART150 samples4 predictor3 classes: 'setosa', 'versicolor', 'virginica'No pre-processingResampling: Cross-Validated (5 fold)Summary of sample sizes: 120, 120, 120, 120, 120Resampling results across tuning parameters:cp logLoss logLoss SD0.00 0.4105613 0.64918930.44 0.6840517 0.49630320.50 1.0986123 0.0000000logLoss was used to select the optimal model using the smallest value.The final value used for the model was cp = 0.
本文中我们使用R语言的caret,探索了不同的用于评估机器学习算法表现的评价标准,主要使用了以下方法:
你可以使用本文中的这些方法,在你的机器学习项目中评价你的机器学习算法。
实践一下本文中的这些例子。
打开你的R语言交互环境。
复制粘贴以上的代码。
花一些时间,理解到底代码中发生了什么,使用R语言的help来读懂函数。
你有任何问题都可以留下评论,我将竭力解答。