机器学习——预测员工离职情况

作业要求:

根据给定的影响员工离职的因素和员工是否离职的记录,分别建立多个分类预测模型:基于信息增益的决策树模型、基于基尼指数的决策树模型、朴素贝叶斯模型、支持向量机模型,还有逻辑回归模型,预测有可能离职的员工;并对各模型进行模型评估。

#本文中的训练集为dataset1,测试集为dataset2
dataset1=pd.read_csv('pfm_train.csv')
dataset2=pd.read_csv('pfm_test.csv')

先导入可能需要的库:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
  
from sklearn.tree import DecisionTreeClassifier  
from sklearn import datasets 
from sklearn.naive_bayes import GaussianNB 
from sklearn.svm import SVC 

一.数据清洗

1.缺失值处理

检查数据集中是否有缺失值,并决定如何处理(如填充、删除或插值) 

# 统计缺失值
print(dataset1.isnull().sum())#训练集
print(dataset2.isnull().sum())#测试集

 2.检查重复值

# 检查重复值
dataset1.duplicated().sum()

3.查看数据信息

# 查看数据信息
dataset1.info()

4.类别变量编码

对于类别变量(如Gender, BusinessTravel, Department等),我们需要进行编码(如独热编码或标签编码)。,根据上个步骤可知,attr数组中的特征则为object类型的。

# 对Dtype为object类型的字段进行编码
from sklearn.preprocessing import LabelEncoder

attr = ['BusinessTravel', 'Department', 'EducationField', 'Gender', 'JobRole', 'MaritalStatus', 'Over18', 'OverTime']
lbe = LabelEncoder()
for feature in attr:
    data_train[feature] = lbe.fit_transform(data_train[feature])
    data_test[feature] = lbe.transform(data_test[feature])
    
data_train.info()

5.查看列

# 查看统计信息
pd.set_option('display.max_columns',None) # 显示所有的列
dataset1.describe()

6.删除无用信息

通过上一步的运行结果可以观察到StandardHoursOver18这两个字段标准差为0,说明所有人的该项数据值相同,也就是说该字段对结果预测不起作用,可以删除。

此外,通过常识可以判断EmployeeNumber这个字段对离职率的预测也是不起作用的,故可以删除

# 将EmployeeNumber、StandardHours、Over18三列删除
dataset1.drop(columns=['EmployeeNumber', 'StandardHours', 'Over18'], inplace=True)
dataset2.drop(columns=['EmployeeNumber', 'StandardHours', 'Over18'], inplace=True)

二.数据集划分

1.选择目标变量

这里预测员工离职与否,目标变量为Attrition,通常是一个二元变量,用0表示未离职,1表示离职。 

dataset1['Attrition']=dataset1['Attrition'].map(lambda x:1 if x=='Yes' else 0)
dataset2['Attrition']=dataset2['Attrition'].map(lambda x:1 if x=='Yes' else 0)
# 选择特征和目标变量
X = dataset1.drop(columns=['Attrition'])
y = dataset1['Attrition']

 2.划分数据集

将dataset1划分为训练集和测试集(通常按70:30或80:20的比例)。训练集用于训练模型,而测试集用于评估模型的性能。

# 将数据集拆分为训练集和验证集
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=700)

三.建立模型

1.基于信息增益的决策树模型

 使用训练集和决策树算法(如scikit-learn中的DecisionTreeClassifier,设置criterion为'entropy')建立模型。

# 创建DecisionTreeClassifier实例,设置criterion为'entropy'  
clf = DecisionTreeClassifier(criterion='entropy', random_state=42)
# 使用训练数据拟合模型  
clf.fit(X_train, y_train)

2.基于基尼指数的决策树模型

使用训练集和决策树算法(同样使用DecisionTreeClassifier,但设置criterion为'gini')建立模型。

# 初始化DecisionTreeClassifier模型,设置criterion为'gini'  
dt_clf = DecisionTreeClassifier(criterion='gini', random_state=42) 
# 使用训练数据拟合模型  
dt_clf.fit(X_train, y_train) 

 3.朴素贝叶斯模型

使用训练集和朴素贝叶斯算法(如scikit-learn中的GaussianNB或MultinomialNB)建立模型。

# 初始化GaussianNB模型  
gnb = GaussianNB()
# 使用训练数据拟合模型  
gnb.fit(X_train, y_train) 

4.支持向量机模型

使用训练集和支持向量机算法(如scikit-learn中的SVC)建立模型。根据数据特征,可能需要调整核函数(如'linear', 'rbf', 'poly')和其他参数。

# 初始化SVC模型,这里选择'rbf'作为核函数
svm_clf = SVC(kernel='rbf', C=1.0, gamma='scale', random_state=42)
# 使用训练数据拟合模型  
svm_clf.fit(X_train, y_train) 

四.模型评估

1.在验证集上预测

# 在验证集上进行预测
y_predict = dt_clf.predict(X_valid)

y_predict = dt_clf.predict(X_valid)

y_predict = gnb.predict(X_valid)

y_predict = gnb.predict(X_valid)

2.计算准确率

# 计算准确率
correct_predictions = (y_predict == y_valid).sum()
total_predictions = len(y_valid)
accuracy = correct_predictions / total_predictions * 100

print("在验证集上的准确率:%f%%" % accuracy)

3.使用训练好的模型对测试集进行预测

# 使用训练好的模型对测试集进行预测
y_predict = clf.predict(dataset2)
print("预测结果:")
print(y_predict)

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值