sklearn预测员工离职率
1、sklearn介绍
sklearn拥有可以用于监督和无监督学习的方法,一般来说监督学习使用的更多。sklearn中的大部分函数可以归为估计器(Estimator)和转化器(Transformer)两类。
1.1 估计器(Estimator)
其实就是模型,它用于对数据的预测或回归。基本上估计器都会有以下几个方法:
- fit(x,y) :传入数据以及标签即可训练模型,训练的时间和参数设置,数据集大小以及数据本身的特点有关。
- score(x,y)用于对模型的正确率进行评分(范围0-1)。但由于对在不同的问题下,评判模型优劣的的标准不限于简单的正确率,可能还包括召回率或者是查准率等其他的指标,特别是对于类别失衡的样本,准确率并不能很好的评估模型的优劣,因此在对模型进行评估时,不要轻易的被score的得分蒙蔽。
- predict(x)用于对数据的预测,它接受输入,并输出预测标签,输出的格式为numpy数组。我们通常使用这个方法返回测试的结果,再将这个结果用于评估模型。
1.2 转化器(Transformer)
用于对数据的处理,例如标准化、降维以及特征选择等等。同与估计器的使用方法类似。
- fit(x,y) :该方法接受输入和标签,计算出数据变换的方式。
- transform(x) :根据已经计算出的变换方式,返回对输入数据x变换后的结果(不改变x)
- fit_transform(x,y) :该方法在计算出数据变换方式之后对输入x就地转换。
2、数据集
2.1 数据展示
left列为结果列,0代表离职,1代表未离职。
有两列是字符列,需要类比成数字。
2.2 数据分析
检查是否有缺失数据 isnull().any()
显示统计数据 describe()
2.3 数据集地址
链接:https://pan.baidu.com/s/1AakOaVsJNvEFaoqUM0DNMA
提取码:4ey9
完整代码
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier # 随机森林
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier # KNN分类
from sklearn.tree import DecisionTreeClassifier # 决策树
from sklearn.svm import SVC # 向量机
from sklearn.naive_bayes import GaussianNB # 高斯分布的朴素贝叶斯
# 读入数据到Pandas Dataframe类型
hr_data = pd.read_csv('../HR-analytics/HR_comma_sep.csv', index_col=None)
# 将left列移到第一列(不移动没有影响)
front = hr_data['left']
hr_data.drop(labels=['left'], axis=1, inplace = True)
hr_data.insert(0, 'left', front)
# 将字符串转化成数值型
hr_data["sales"] = hr_data["sales"].astype('category').cat.codes
hr_data["salary"] = hr_data["salary"].astype('category').cat.codes
hr_data_np = np.array(hr_data)
x = np.delete(hr_data_np,0,axis=1)
# x = np.delete(x,8,axis=1) # 若string型的两列不转化,删除
# x = np.delete(x,7,axis=1)
y = hr_data_np[:,0]
# numpy转成列表
y = y.tolist()
# 划分训练集
train_x, test_x, train_y, test_y = \
train_test_split(x, y, test_size=0.3, random_state=3)
# 选择算法,决策树
dt_model = DecisionTreeClassifier()
'''
用于替换的算法
RandomForestClassifier() # 随机森林
KNeighborsClassifier() # KNN
SVC()
GaussianNB()
LogisticRegression()
'''
# 训练
dt_model.fit(train_x, train_y)
# 测试
predict_y = dt_model.predict(test_x)
score = dt_model.score(test_x, test_y)
print('输出预测值:',predict_y)
print('原有的标签:',test_y)
print('得分:', score)