大家好,我是Python数据分析师,希望通过我的经验分享,帮助大家更好地理解和掌握人工智能技术。我编写了一套名为“人工智能四部曲”的系列书籍,分别是《15天学会Python编程》、《每天10分钟,用Python学数据分析》、《Python数据可视化实战》以及《33天搞定机器学习》。
本文是《33天搞定机器学习》系列中的第19篇,我们将通过实例来详细了解逻辑回归的应用。如果您对本专栏的质量感到满意,欢迎订阅,以便系统地学习更多内容。
本文将使用一个包含员工离职数据的数据集,该数据集涵盖了影响员工离职的多种因素,如工资水平、绩效评估、工作满意度、参与项目数量、工作时长、是否有工伤记录、是否晋升以及所在部门等。我们希望通过分析这14999个样本和10个特征,预测员工是否会离职。
关于数据探索分析的内容,在我的另一本书《用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')
df['salary'] = df.salary.map({"low": 0, "medium": 1, "high": 2})
minmaxscaler = MinMaxScaler() df['averagemonthlyhours'] = minmaxscaler.fittransform(df[['averagemonthly_hours']])
df['department'] = df['department'].replace({'support': 'technical', 'IT': 'technical'})
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中,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() ```
通过以上步骤,我们可以清楚地看到逻辑回归模型在员工离职预测任务上的表现,以及如何通过数据预处理和模型训练来优化模型效果。希望这些内容对大家有所帮助!