机器学习:逻辑回归模型运用指南
作者头像
  • 廖娅
  • 2020-05-13 07:15:28 2

序文

大家好,我是Python数据分析师,希望通过我的经验分享,帮助大家更好地理解和掌握人工智能技术。我编写了一套名为“人工智能四部曲”的系列书籍,分别是《15天学会Python编程》、《每天10分钟,用Python学数据分析》、《Python数据可视化实战》以及《33天搞定机器学习》。

本文是《33天搞定机器学习》系列中的第19篇,我们将通过实例来详细了解逻辑回归的应用。如果您对本专栏的质量感到满意,欢迎订阅,以便系统地学习更多内容。

预测任务分析

本文将使用一个包含员工离职数据的数据集,该数据集涵盖了影响员工离职的多种因素,如工资水平、绩效评估、工作满意度、参与项目数量、工作时长、是否有工伤记录、是否晋升以及所在部门等。我们希望通过分析这14999个样本和10个特征,预测员工是否会离职。

数据集特征说明

  • satisfaction_level:对公司满意度,范围为0到1。
  • last_evaluation:上次评估以来的时间。
  • Number_projects:完成的工作项目数量。
  • averagemonthlyhours:平均每月工作时长。
  • Timespendcompany:在公司工作的年数。
  • Work_accident:员工在工作中是否有过事故。
  • Left:员工是否已离职(1表示离职,0表示在职)。
  • Promotionlast5years:过去五年内是否有晋升。
  • Department:员工所在的部门。
  • Salary:相对薪酬水平。

关于数据探索分析的内容,在我的另一本书《用Python学数据分析》中已经详细讨论,感兴趣的朋友可以参考。

导入库

在本文中,我们使用了pandas、numpy、scikit-learn等库来处理数据和建立模型。

数据导入与预处理

首先,我们从文件路径中加载数据,并对其进行预处理。

```python import pandas as pd from sklearn.preprocessing import MinMaxScaler, OneHotEncoder from sklearn.modelselection import traintestsplit from sklearn.linearmodel import LogisticRegressionCV from sklearn.metrics import confusionmatrix, roccurve, auc, plotroccurve import matplotlib.pyplot as plt

path = r"...HRcommasep.csv" df = pd.read_csv(path, encoding='utf-8')

将特征'salary'转换为数值型变量

df['salary'] = df.salary.map({"low": 0, "medium": 1, "high": 2})

归一化特征'averagemonthlyhours'

minmaxscaler = MinMaxScaler() df['averagemonthlyhours'] = minmaxscaler.fittransform(df[['averagemonthly_hours']])

合并特征'department'中的'technical'、'support'和'IT'

df['department'] = df['department'].replace({'support': 'technical', 'IT': 'technical'})

将特征'department'转换为独热编码,并与原始数据集合并

ohe = OneHotEncoder(categories='auto').fit(df[['department']]) encodeddepartment = ohe.transform(df[['department']]).toarray() encodedcolumns = ['RandD', 'accounting', 'hr', 'management', 'marketing', 'productmng', 'sales', 'technical'] encodeddf = pd.DataFrame(encodeddepartment, columns=encodedcolumns) df = pd.concat([df, encoded_df], axis=1) df.drop('department', axis=1, inplace=True)

分割特征变量和标签变量

X = df.drop('Left', axis=1) Y = df['Left']

划分训练集和测试集

Xtrain, Xtest, Ytrain, Ytest = traintestsplit(X, Y, testsize=0.3, randomstate=42) ```

使用Sklearn实现逻辑回归

在Sklearn中,LogisticRegression和LogisticRegressionCV都是逻辑回归模型的实现,主要区别在于LogisticRegressionCV使用交叉验证来选择正则化系数C,而LogisticRegression需要手动指定正则化系数C。除了交叉验证外,两者的使用方法基本相同。

```python clf = LogisticRegressionCV(cv=5, randomstate=0).fit(Xtrain, Ytrain) print(f"训练集准确率:{clf.score(Xtrain, Ytrain)}") print(f"测试集准确率:{clf.score(Xtest, Y_test)}")

混淆矩阵

confusionmatrix = confusionmatrix(Ytest, clf.predict(Xtest)) print(confusion_matrix) ```

模型评估

为了进一步评估模型性能,我们绘制了ROC曲线。ROC曲线是一种常用的二分类评估工具,可以用来衡量分类器的好坏。一个优秀的分类器应该尽可能远离随机分类器的ROC曲线(朝向左上角)。

```python lrfpr, lrtpr, _ = roccurve(Ytest, clf.predictproba(Xtest)[:, 1]) lrrocauc = auc(lrfpr, lrtpr)

plt.figure(figsize=(8, 5)) plt.plot([0, 1], [0, 1], '--', color='r') plt.plot(lrfpr, lrtpr, label=f'LogisticRegression (AUC = {lrrocauc:.2f})') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.0]) plt.title('ROC Curve') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.legend() plt.show() ```

通过以上步骤,我们可以清楚地看到逻辑回归模型在员工离职预测任务上的表现,以及如何通过数据预处理和模型训练来优化模型效果。希望这些内容对大家有所帮助!

    本文来源:图灵汇
责任编辑: : 廖娅
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
逻辑模型回归运用机器指南学习
    下一篇