最近一直觉得,其实机器学习的门槛并不高,以R语言的角度,甚至稍微学过一点,就可以针对相关数据进行各种算法模型的建立和测试。
而真正有难度的地方一是算法优化部分,二是和对于模型评价的部分,这两个部分往往涉及更多的知识点。
本文用的数据集是kaggle上的员工离职数据集,大家可以自行下载,下面是用R选择逻辑回归算法建模预测的过程。
首先加载数据
hrdata
看数据结构,预测变量是left,就是员工是否离职
str(hrdata)
'data.frame':14999 obs. of 10 variables:
$ satisfaction_level : num 0.38 0.8 0.11 0.72 0.37 0.41 0.1 0.92 0.89 0.42 ...
$ last_evaluation : num 0.53 0.86 0.88 0.87 0.52 0.5 0.77 0.85 1 0.53 ...
$ number_project : int 2 5 7 5 2 2 6 5 5 2 ...
$ average_montly_hours : int 157 262 272 223 159 153 247 259 224 142 ...
$ time_spend_company : int 3 6 4 5 3 3 4 5 5 3 ...
$ Work_accident : int 0 0 0 0 0 0 0 0 0 0 ...
$ left : int 1 1 1 1 1 1 1 1 1 1 ...
$ promotion_last_5years: int 0 0 0 0 0 0 0 0 0 0 ...
$ Department : Factor w/ 10 levels "accounting","hr",..: 8 8 8 8 8 8 8 8 8 8 ...
$ salary : Factor w/ 3 levels "high","low","medium": 2 3 3 2 2 2 2 2 2 2 ..ka
把数据分为训练数据和测试数据:
set.seed(123)
ind
train
test
看看两个数据集是否均衡
table(train$left)
0 1
8029 2511
table(test$left)
0 1
3399 1060
当下不做任何探索和优化,直接建模,把除了离职left数据之外的所有数据列作为特征进行预测。
hrdata_glm
summary(hrdata_glm)
上面一句话就完成了逻辑回归模型的建立和训练,然后看看我们的模型对于训练数据集的准确性度,使用混淆矩阵进行查看
train.result =0.5,1,0)
confusionMatrix(factor(train.result),factor(train$left))
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 7474 1590
1 555 921
Accuracy : 0.7965
95% CI : (0.7887, 0.8041)
No Information Rate : 0.7618
P-Value [Acc > NIR] : < 2.2e-16
可以看到,在没有任何特征选择和优化的情况下,训练已经能够得到0.8的准确率,也就是解释了80%的结果。但是这里有个误区,混淆矩阵里对于预测没有离职但是实际离职的人数达到1590人,占所有总离职人数的大部分,从这点上来说,模型并不让人满意。
优化模型有多种方法,一是仍然使用逻辑回归,但是进行特征和参数优化,二是选择其他模型和算法,我们以后再讲。