用的是mlr
数据集
有条件的直接去kaggle找,各种数据应有尽有
用到的R包
mlr(机器学习用)
mlr3(机器学习用)
ggplot2(绘图用)
imbalance(只用过采样方法)
数据处理
-> 确定对象和数字的缺失值数目
-> 检查数据的numeric特征与character特征
-> 检查基数(checking Cardinality -> 唯一值的数量 ->日期列可以考虑分割日期列为年月日)
-> 处理缺失值
-> 对于character类型的特征
先画条形图看哪些列缺失值太多
如果列是由有限个character组成(如方向,种类,是或否),可以将特征值用重复次数最多character值填充
-> 对于numeric特征
画条形图确定缺失值太多的列
画箱型图查看异常值
移除异常值
用的是四分类点
# 这个是python的代码,看个思路就好
features_with_outliers = num_col_with_null_values
for feature in features_with_outliers:
q1 = data[feature].quantile(0.25)
q3 = data[feature].quantile(0.75)
IQR = q3-q1
lower_limit = q1 - (IQR*1.5)
upper_limit = q3 + (IQR*1.5)
data.loc[data[feature]<lower_limit, feature] = lower_limit
data.loc[data[feature]>upper_limit, feature] = upper_limit
之后所有缺失值按平均值估算填充,但要注意,某些numeric类型的列不可用平均值填充,比如那种只有1和0的列
分类数据的平衡性
画条形图,看目标数据列分类是否平衡,若不平衡,可考虑进行平衡,用过采样进行平衡
如只有1和0的列,1却占了85%,这时就需要进行过采样平衡一下
数字编码
有些机器学习的方法要求列是numeric类型的,这时就需要转换为数字编码
机器学习部分
首先是分类和回归问题,分
类问题是指类别预测,见名知意,目标变量一般是种类,或者0/1
回归问题是指计算结果,比如价格预测,目标变量一般是数字
分割数据
只分训练集和测试集的话,7:3
创建任务
两种,一种是分类,一种是回归
分类
task <- makeClassifTask(data = data5[train.set,], target = "RainTomorrow")
回归
换成makeRegrTask ( )
参数
data是训练集,target是目标变量,也就是要预测的变量,y
创建学习器
learner <- makeLearner("classif.logreg")
第一个参数是使用的模型
分类用模型:
决策树(classif.rpart),逻辑回归(classif.logreg),朴素贝叶斯(classif.naiveBayes),线性判别分析模型(classif.lda),k近邻(classif.kknn),随机森林(classif. randomForest),神经网络(classif.nnet),支持向量机(classif. ksvm )
回归用模型:
线性回归(regr. lm),k近邻(regr. kknn),决策树(regr. rpart),随机森林(regr. randomForest),神经网络(regr.nnet),支持向量机(regr. ksvm )
超参数调优
先使用learner$par.set查看是否有能调优的参数
如果没有就略过了
# 超参数调优
learner$par.set
ps <- makeParamSet(makeDiscreteParam("maxdepth",values = 2:6),makeDiscreteParam("cp",values = c(0.01,0.02,0.05)))
ctrl <- makeTuneControlGrid()
rdesc = makeResampleDesc("CV",iters = 3)
# 执行超参数调优
res = tuneParams(learner, task, resampling = rdesc, par.set = ps,control = ctrl, measures = acc)
每一个makeDiscreteParam()里放一个要调优的参数和要调优的值范围,要调优的参数也是从learner$par.set里找到
创建超参数调优后的学习器
得出最终结果后重新创建学习器
# 训练模型
learner <- makeLearner("classif.rpart",par.vals = list(maxdepth=6,cp=0.01),predict.type = "prob")
par.vals中放调优超参数的结果
训练模型
mod <- train(learner,task)
模型评估
pred <- predict(mod,newdata = data5[test.set,])
performance(pred,measures = list(acc,auc,f1))
网友评论