R中模型性能的提升

最近正在学习这一部分,备忘录。

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)使baggingsvmBag fit
function (x, y, …)
{
loadNamespace(“kernlab”)
out <- kernlab::ksvm(as.matrix(x), y, prob.model = is.factor(y),
…)
out
}

以及svmBag pred,svmBag aggregate的函数实现方式,可定制bagging

你可能感兴趣的:(R机器学习)