最近正在学习这一部分,备忘录。
1、参数调整
对算法合适的选项进行调整的过程——参数调整
caret包中提供了多种工具进行自动参数调整,train()函数作为接口,可以选择评估方法和度量性指标,自动寻优过程。
主要考虑的问题:
(1)训练哪种模型,(2)模型中哪些参数可调,可调节空间多大,(3)选择评价标准
以C5.0示例:
library(caret)
control <- trainControl(method = "cv",number =5,
selectionFunction = "oneSE")
set.seed(7)
fit <-train(label~.,data = traindata1[-1],method ="C5.0",
metric = "Accuracy",trControl = control)
print(fit)
定制调整的过程,trainControl()函数实现配置选项,主要参数为method,selectionFunction。?trainControl可以得到所有的参数列表。method主要用来设置重抽样的方法,例如保持抽样或k折验证。selectionFunction可设定一个函数在各个候选者中选择最优的模型。
可创建可调参数的数据框,每一行代表可调参数的组合
grid <- expand.grid(.model = “tree”,
.trials = c(1,5,10,15,20,25,30,35),
.winnow = “FALSE”
)
set.seed(300)
m <- train(label~.,data = traindata1[-1],method = “C5.0”,
metric = “Kappa”,
trControl = ctrl,
tuneGrid = grid)
2、使用元学习提高模型性能
bagging: 自主抽样产生数据集,这些数据集使用单一机器学习算法产生多个模型,最后采用投票或平均的方法来组合预测值
boosting:在不同的重抽样数据中训练模型的集成学习。区别:重抽样数据集是专门构建的,根据上一次分类器,自动调整本次分类器构造时,各样本被抽中的概率。对经常分错的样本给与较大的权重,预测正确的样本在下一个分类器中的可能性较小。通过投票决定最后的预测值,每个分类器的票数会按照建模数据集上的准确度进行加权。
以下主要介绍bagging:
ipred包提供了bagging决策树的实现。如下:
library(ipred)
m.bag <- bagging(label~.,data = traindata1[,-1], nbagg = 25)
p.bag <- predict(m.bag,testdata1[,-c(1,16)],type = “class”)
其中nbagg参数控制用来投票的决策树的数目。
caret包中train函数采用10折交叉验证方法建立bagging树,函数为treebag
library(caret)
control <- trainControl(method = “cv”,number =10)
set.seed(7)
fit <-train(label~.,data = traindata1[-1],method =”treebag”,
metric = “Accuracy”,trControl = control)
caret包中含添加更加通用的bag()函数,支持向量机svmBag,朴素贝叶斯nbBag,决策树ctreeBag,神经网络nnetBag。以下选取支持向量机为例svmBag,创建一个bagging控制对象:
ctrl <- trainControl(method = “cv”,number = 10)
bagctrl <- bagControl(fit = svmBag fit,predict=svmBag pred,
aggregate = svmBag aggregate)set.seed(300)svmbag<−train(label .,data=traindata1[,−1],”bag”,trControl=ctrl,bagControl=bagctrl)可以通过学习函数,使用同样的方式创建自己的bagging,实现任意的机器学习算法svmBag fit
function (x, y, …)
{
loadNamespace(“kernlab”)
out <- kernlab::ksvm(as.matrix(x), y, prob.model = is.factor(y),
…)
out
}
以及svmBag pred,svmBag aggregate的函数实现方式,可定制bagging