
↑↑↑ 关注选刊说 ↑↑↑
您的SCI选刊助手!

图1.ROC曲线
ROC曲线下的面积AUC:
ROC曲线下的面积AUC(Area under the curve)可以用来比较不同算法的优劣。
・AUC=0.5,预测算法表示为图中45º斜线,相当于随机对样本进行分类。
・AUC=1,预测算法表示为图中左上角顶点,在这个阈值下,可以得到100%的灵敏度和特异性,是个完美的分类器。
・通常AUC>0.8时可以认为是良好的预测算法。

图2.AUC评价算法优劣
交叉验证(cross validation)
使用训练集建立模型,然后将模型回代到训练集验证模型的有效性,通常会得到较好的验证效果,但由于可能存在过度拟合,而模型未必真的有效,因此需要用独立的新的数据集验证模型是否有效,来获得更好的模型参数估计、更高的测试集准确性。但是实际上不能用测试集进行验证,否则某种意义上测试集变成训练集的一部分,特别是新的样本数据难以收集时。交叉验证法可以评价模型的泛化能力,而且可以用于某些参数的确定、变量的筛选等。
交叉验证将已有的样本训练集再分为训练集和测试集两部分,根据新的训练集建立模型,使用另一部分测试集进行验证,重复过程可以计算平均估计误差。常见的误差衡量标准是均方误差和均方根误差, 分别为交叉验证的方差和标准差。
1. 随机再抽样验证(random subsampling cross-validation):

图3.随机再抽样验证
重复随机抽取测试集样本,计算平均估计误差。
2. K重交叉验证(K-fold cross-validation):

图4.K重交叉验证
将样本分为k个子样本,轮流将k–1个子样本组合作为训练集建立模型,另外1个子样本作为测试集,计算平均估计误差。
3. 留一交叉验证(leave-one-out cross-validation, LOOCV)

图5.留一交叉验证
只使用原本样本中的一项来当做测试集,而其余的作为训练集,重复步骤直到每个样本都被当作一次测试集,相当于k为原本样本个数的K重交叉验证。
所有这些模型的建立和评估都在训练集中进行,我们将其分为子训练集和子测试集以评估模型。
注意:
- 对于时间序列数据,一个时间点可能取决于先前的时间点,如果仅对数据进行随机再抽样,可能会忽略许多重要信息,因此必须使用连续的时间段数据。
- 对于K重交叉验证,一般而言,随着k的增加,偏差会变小(模型回代效果好),但方差会增大(验证效果差)。
- 随机抽样必须是无放回抽样,有放回抽样(bootstrap,自举法)会低估误差。
- 交叉验证得到的模型必须应用到新的独立的训练数据集以得到实际的训练集误差。
数据要求
预测有关X的某些信息,请尽可能使用与X密切相关的数据,数据相关性越低,预测越难。了解数据实际上如何与实际尝试预测的事物相关联非常重要,这是机器学习中最常犯的错误,机器学习通常被认为是一种黑箱预测程序,在一端输入数据,在另一端得到预测结果。
caret 包
内置函数:
・预处理:preProcess()函数
・数据分割:createDataPartition()函数、createTimeSlices()函数、createResample()函数
・训练和测试:train()函数、predict()函数
・模型比较:confusionMatrix()函数
R中内置的机器学习算法:
・线性判别分析(Linear discriminant analysis)
・回归分析(Regression)
・朴素(Naive Bayes)
・支持向量机(Support vector machines)
・分类回归树(Classification and regression trees)
・随机森林(Random forests)
・提升(boosting),等等
R中有来自不同的开发者开发的不同的机器学习算法,每种算法都略有不同。
表1 不同R包中的机器学习算法的预测函数
算法类型 | R包 | predict()函数语法 |
---|
lda | MASS |
predict(obj)(不需设置选项) |
glm | stats | predict(obj, type = "response") |
gbm | gbm | predict(obj, type = "response", n.trees) |
mda | mda | predict(obj, type = "posterior") |
rpart | rpart | predict(obj, type = "prob") |
Weka | RWeka | predict(obj, type = "probability") |
LogitBoost | caTools | predict(obj, type = "raw", nIter) |
使用以上算法应用predict()函数预测时必须传递不同的type选项参数。caret包提供了一个统一的框架,允许只使用一种函数且不需指定选项来进行预测。
例:spam数据集
将数据分为训练集和测试集:
library(caret)
library(kernlab)
data(spam)
inTrain
p=0.75, list = FALSE) #75%的数据作为训练集
training
testing
dim(training)
[1] 3451 58
拟合模型:
set.seed(32343)
modelFit
modelFit
Generalized Linear Model
3451 samples
57 predictor
2 classes: 'nonspam', 'spam'
No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 3451, 3451, 3451, 3451, 3451, 3451, ...
Resampling results:
Accuracy Kappa
0.9207464 0.8333755
采用重抽样的方式测试模型,选择最佳模型。进行25次有放回重抽样,并校正了自举抽样可能带来的潜在偏差。
查看拟合的最佳模型:
modelFit
modelFit$finalModel
Call: NULL
Coefficients:
(Intercept) make address all
-1.541e+00 -3.248e-01 -1.448e-01 -4.829e-02
num3d our over remove
1.968e+00 4.750e-01 5.455e-01 2.218e+00
internet order mail receive
6.016e-01 5.926e-01 1.638e-01 -8.654e-01
will people report addresses
-1.416e-01 8.584e-02 1.268e-01 2.017e+00
free business email you
9.468e-01 1.084e+00 1.746e-01 9.129e-02
credit your font num000
2.903e+00 3.356e-01 1.740e-01 1.933e+00
money hp hpl george
2.605e-01 -2.556e+00 -7.866e-01 -9.418e+00
num650 lab labs telnet
6.231e-01 -2.372e+00 -3.618e-01 -7.320e-02
num857 data num415 num85
1.305e-01 -4.910e-01 -1.918e+01 -5.939e+00
technology num1999 parts pm
1.180e+00 1.585e-01 -5.811e-01 -9.438e-01
direct cs meeting original
-2.426e-01 -4.281e+01 -3.005e+00 -1.240e+00
project re edu table
-1.790e+00 -8.871e-01 -1.212e+00 -1.981e+00
conference charSemicolon charRoundbracket charSquarebracket
-4.245e+00 -1.269e+00 -1.424e-01 -4.982e-01
charExclamation charDollar charHash capitalAve
3.084e-01 5.776e+00 3.337e+00 -1.680e-02
capitalLong capitalTotal
1.199e-02 6.359e-04
Degrees of Freedom: 3450 Total (i.e. Null); 3393 Residual
Null Deviance: 4628
Residual Deviance: 1367 AIC: 1483
进行预测:
predictions
predictions
[1] spam spam spam nonspam spam spam spam spam spam spam
[11] spam spam spam spam spam spam spam spam spam nonspam
[21] spam spam spam nonspam spam spam spam nonspam spam nonspam
[31] spam spam spam spam spam spam spam spam spam spam
[41] spam spam spam spam spam nonspam spam spam spam spam
[51] nonspam spam spam nonspam spam spam spam spam spam nonspam
……
Levels: nonspam spam
比较预测结果与实际结果,得到汇总统计信息:
confusionMatrix(predictions, testing$type)
Confusion Matrix and Statistics
Reference
Prediction nonspam spam #预测效果
nonspam 660 59
spam 37 394
Accuracy : 0.9165
95% CI : (0.899, 0.9319) #准确性的置信区间
No Information Rate : 0.6061
P-Value [Acc > NIR] : < 2e-16
Kappa : 0.8237
Mcnemar's Test P-Value : 0.03209
Sensitivity : 0.9469 #灵敏度
Specificity : 0.8698 #特异性
Pos Pred Value : 0.9179
Neg Pred Value : 0.9142
Prevalence : 0.6061
Detection Rate : 0.5739
Detection Prevalence : 0.6252
Balanced Accuracy : 0.9083
'Positive' Class : nonspam
加小编,请备注: 单位+研究方向


免责声明:本文转载仅仅是出于传播信息的需要,并不意味着代表本公众号观点或证实其内容的真实性;如其他媒体、网站或个人从本公众号转载使用,须保留本公众号注明的“来源”,并自负版权等法律责任;作者如果不希望被转载,请与我们接洽。版权属于原作者
请大家点击右下角
,