R里面机器学习的模型分布在各个包里面,在使用的过程中肯能会有觉得不方便的时候,像python的sklearn模块有各种机器学习模型,集中在一起。
在R里面有两个专门做机器学习的包,一个是caret,一个是mlr,这里介绍mlr
mlr
1.数据预处理 :
- 创建哑变量
createDummyFeatures(obj = ,target = ,method = )
- 数据标准化
normalizeFeatures(obj= ,target = ,method = ) method: 1.center 2.scale 3.standardize 4.range
library(mlbench)
data("Soybean")
head(Soybean)
soy <- createDummyFeatures(Soybean,target = "Class")
2.创建一个任务
- 创建一个分类任务
makeClassifTask(data=,target=)
- 创建一个回归任务
makeRegerTask(data=,taget=)
- 创建一个多分类任务
makeMultilabelTask(data,taget=)
- 创建一个聚类任务
makeClusterTask(data=,taget=)
3.创建一个学习器
这里就是指定你要训练什么模型,怎么训练
makeLearner(cl=,predict.type=)
cl指的是训练什么模型,常见有 'lassif.xgboost
predict.type指的是是预测概率还是直接预测标签prob
预测的就是概率
mlr有超过70种不同的算法可以使用,使用View(listLearners())
查看所有的算法
4.训练模型
设置超参数 setParamSet(learner=)
获取超参数 getParamSet(learner=)
训练模型: train(learner=,task=)
预测结果:predict(object=,task=,newdata=)
衡量模型效果
performance(pred=,measures=)
可以通过 listMeasures()
查看有哪些可以作为评判的指标
> head(listMeasures())
[1] "multilabel.f1" "rsq" "kappa"
[4] "multiclass.brier" "fn" "fp"
混淆矩阵:
calculateConfusionMatrix(pred = )
计算ROC:
calculateROCMeasures(pred = )
- 抽样
makeResampleDesc(method = )
其中method
必须为:
cv,iters=
LOO,iters=
RepCV,reps=,folds=
Subsample,iter=,split=
Boosttrap iters=
Holdout,split=
介绍一个简单的例子
library(mlr)
library(mlbench)
data("Soybean")
soy <- createDummyFeatures(Soybean, target = "Class")
tsk <- makeClassifTask(data = soy, target = "Class")
ho <- makeResampleInstance("Holdout", tsk)
tsk.train <- subsetTask(tsk, ho$train.inds[[1]])
tsk.test <- subsetTask(tsk, ho$test.inds[[1]])
lrn <- makeLearner('classif.xgboost', nrounds = 10)
cv <- makeResampleDesc('CV', iters = 5)
res <- resample(lrn, tsk.train, cv, acc)
ps <-
makeParamSet(
makeNumericParam('eta', 0.1),
makeNumericParam('lambda', 0, 200),
makeIntegerParam('max_depth', 1, 20)
)
tc <- makeTuneControlMBO(budget=100)
tr <- tuneParams(lrn,tsk.train,cv5,acc,ps,tc)
mdl <- train(learner = lrn,task = tsk.train)
prd <- predict(mdl,tsk.test)
calculateConfusionMatrix(prd)
另外,推荐一个网站:https://rdrr.io/