西西要和朋友们一起来了解另一种在机器学习领域中非常常用的算法--线性模型。需要说明的是,线性模型不是某一个算法,而是一类算法的统称。它包括基本的线性回归、岭回归、套索回归,以及用于分类任务的逻辑回归等。
今天,西西先让朋友们了解一下线性模型的基本概念。已经了解线性模型概念的朋友,可以跳过今天的内容,直接阅读后面的内容。
再次提示:仅供理解,思路可以用于实盘,但是不可直接用于实盘。
一、准备用于演示的数据
为了直观的展示线性模型的原理,我们还是用一个简单的数据集做一个实践。在我们的Python中输入以下代码:
# 导入必要的库from sklearn.linear_model import LinearRegression # 修正拼写from sklearn.model_selection import train_test_split # 修正拼写from sklearn.datasets import make_regression # 修正拼写import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns # 修正拼写# 生成回归数据集X, y = make_regression( n_samples=50, # 样本数量 n_features=1, # 特征数量 noise=40, # 噪声强度 random_state=88 # 随机种子)# 绘制散点图plt.scatter( X, y, s=70, # 点的大小 c='g', # 点的颜色 edgecolor='k', # 点的边缘颜色 alpha=0.6 # 透明度)plt.grid()plt.title("生成的回归数据散点图")plt.xlabel("特征 X")plt.ylabel("目标 y")plt.show()
运行结果:
【结果分析】如果朋友也得到了图所示的结果,就说明代码运行成功。图中的横轴对应的是样本的特征(feature),纵轴对应的是样本的目标(target)。噪声参数(noise)设置为40,所以我们还是可以很明显地观察到样本的特征与目标之间有显著的线性相关关系--样本的分布情况大致呈现为一条直线,如果我们把噪声参数调高,则样本的分布会“面目全非”。
下面这行代码可以让我们查看某个样本的特征值与目标值。
二、试试最简单的线性回归
在准备好数据之后,西西就可以使用最简单的线性回归来训练模型了。说线性回归是最简单的线性模型,主要是因为它的原理非常简单,哪怕是只有初中数学知识的人也可以理解,它的公式为:
代码如下:
# 导入库from sklearn.linear_model import LinearRegressionimport numpy as npimport matplotlib.pyplot as plt# 假设你已经有了 X 和 y(由 make_regression 生成)# 如果没有,先运行这段生成数据from sklearn.datasets import make_regressionX, y = make_regression(n_samples=50, n_features=1, noise=40, random_state=42)# 创建线性回归模型实例lr = LinearRegression()# 用样本特征和目标值训练模型lr.fit(X, y)# 生成新的数据点用于绘图(横轴从 -2 到 2.5,共100个点)X_new = np.linspace(-2, 2.5, 100).reshape(-1, 1)# 使用训练好的模型预测新数据点的目标值y_new = lr.predict(X_new)# 可视化plt.scatter(X, y, s=70, c='g', edgecolor='k', alpha=0.6, label='原始数据')plt.plot(X_new, y_new, c='grey', ls='--', label='线性回归线')# 添加网格和标签plt.grid()plt.xlabel("特征 X")plt.ylabel("目标 y")plt.title("线性回归模型拟合结果")plt.legend()plt.show()
运行结果:
从图中看到一条“斜着”的虚线,这条斜线就是我们用线性回归生成的模型,这条线大致可以表达出样本分布的情况。那为什么这条线位置在这里呢?这是因为这条直线的位置,距离所有样本的距离之和,是最小的。
根据我们的数学模型可以知道,直线是有斜率和截距的,下面的代码可以让我们查看上图的斜率和截距。
【结果分析】从以上代码运行结果可知,这条直线的斜率大致是19.47,截距大致是6.43。也就是说,它的方程大约可以表示为
y=19.47x+6.43
通过这个方程,我们就可以根据样本的特征值来估计它的目标值了。举一个例子,假设现在我们有一个样本,它的特征值是3,就可以使用下面的代码来计算它的目标值。
pre =lr.predict({[3]})pre
这种预测还是比较简单的。
为了方便可视化,这里我们设置的样本只有一个特征,因此模型是一条直线。如果样本的特征更多,或者维度更高的话,模型将会是一个平面。
爱思考的朋友可能发现了,这种简单的回归方式,样本较小,噪声过大,朋友们可以尝试一下其他线性模型。
Copyright © 2024-2025 成都宁时科技有限公司 版权所有