本文是机器学习系列的第三篇,涵盖了线性回归、逻辑回归和Softmax回归的基础知识。重点在于实际操作,以便读者能通过编程实践更好地理解这些概念。
在回归问题中,我们通常需要预测连续值。然而,在分类问题中,我们需要预测的是离散的类别。逻辑回归是一种特殊的回归模型,它将连续的预测值转化为离散的分类结果。具体而言,我们将预测值限制在0到1之间,并以此作为分类决策的标准。当预测值大于0.5时,我们认为属于一类;否则,属于另一类。
我们首先导入必要的库,包括NumPy、Pandas、Seaborn和Matplotlib,以及Scikit-Learn库中的相关模块。然后,我们加载一个关于听力测试的数据集,该数据集记录了5000名参与者的年龄、健康得分以及是否通过听力测试的情况。
```python import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.modelselection import traintestsplit from sklearn.preprocessing import StandardScaler from sklearn.linearmodel import LogisticRegression from sklearn.metrics import accuracyscore, classificationreport, plotconfusionmatrix
df = pd.readcsv('https://blog.caiyongji.com/assets/hearingtest.csv') ```
通过绘制散点图和配对图,我们发现年龄超过60岁的参与者很难通过测试,而通过测试的参与者往往健康得分较高。
python
sns.scatterplot(x='age', y='physical_score', data=df, hue='test_result')
sns.pairplot(df, hue='test_result')
接下来,我们使用逻辑回归模型进行训练,并通过测试数据进行验证。最终模型的准确率为92.2%。
```python X = df.drop('testresult', axis=1) y = df['testresult'] Xtrain, Xtest, ytrain, ytest = traintestsplit(X, y, testsize=0.1, randomstate=50)
scaler = StandardScaler() scaledXtrain = scaler.fittransform(Xtrain) scaledXtest = scaler.transform(X_test)
logmodel = LogisticRegression() logmodel.fit(scaledXtrain, ytrain) ypred = logmodel.predict(scaledX_test)
accuracyscore(ytest, y_pred) ```
为了进一步了解模型的表现,我们绘制了混淆矩阵,并计算了准确率、精确率和召回率。
python
plot_confusion_matrix(log_model, scaled_X_test, y_test)
print(classification_report(y_test, y_pred))
Softmax回归是一种多分类算法,它基于逻辑回归,但可以处理多个类别。它首先计算每个类别的得分,然后通过Softmax函数将其转化为概率分布。最终,我们选择具有最高概率的类别作为预测结果。
我们使用另一个鸢尾花数据集,该数据集包含150个样本,每个样本有四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。标签为三种鸢尾花的种类。
python
df = pd.read_csv('https://blog.caiyongji.com/assets/iris.csv')
通过绘制散点图和配对图,我们发现花瓣尺寸较小的通常是山鸢尾,中等尺寸的是变色鸢尾,而较大的是维吉尼亚鸢尾。
python
sns.scatterplot(x='sepal_length', y='sepal_width', data=df, hue='species')
sns.scatterplot(x='petal_length', y='petal_width', data=df, hue='species')
sns.pairplot(df, hue='species')
我们使用Softmax回归模型进行训练,并通过测试数据进行验证。最终模型的准确率为92.1%。
```python X = df.drop('species', axis=1) y = df['species'].factorize(['setosa', 'versicolor', 'virginica'])[0] Xtrain, Xtest, ytrain, ytest = traintestsplit(X, y, testsize=0.25, randomstate=50)
scaler = StandardScaler() scaledXtrain = scaler.fittransform(Xtrain) scaledXtest = scaler.transform(X_test)
softmaxmodel = LogisticRegression(multiclass="multinomial", solver="lbfgs", C=10, randomstate=50) softmaxmodel.fit(scaledXtrain, ytrain) ypred = softmaxmodel.predict(scaledX_test)
accuracyscore(ytest, ypred) print(classificationreport(ytest, ypred)) ```
本文通过实例讲解了逻辑回归和Softmax回归的应用。通过动手实践,读者应该对这两种分类算法有了更深刻的理解。希望这些内容能帮助读者进一步掌握机器学习的基础知识。
如果您有任何疑问或需要进一步的帮助,请随时参考相关的前置课程。