机器学习笔记—线性模型(回归)算法介绍(4)—附完整代码
以下都是本人在学习机器学习过程中的一些心得和笔记,仅供参考。
线性模型是在实践中广泛使用的一类模型,被广泛研究。
线性模型利用输入特征的**线性函数(linear function)**进行预测。
文章目录
1.用于回归的线性模型
- 对于回归问题,线性模型预测的一般公式如下:

其中的w[0]是斜率,b是y轴偏移。
- 下面在一维
wave数据集上学习参数w[0]和b:
In:
import matplotlib.pyplot as plt
import mglearn
mglearn.plots.plot_linear_regression_wave()
plt.show()
Out:
w[0]: 0.393906 b: -0.031804

wave数据集的预测结果
从w[0]可以看出,斜率应该在0.4左右,在图像中也可以直观地确认这一点。
截距是指预测直线与y轴的交点:比0略小,也可以从图中确认。
用于回归的线性模型可以表示为这样的回归模型:对单一特征的预测结果是一条直线,两个特征的时候是一个平面,或者更高维度(即更多特征)时是一个超平面。
但是将直线的预测结果与KNeighborsRegressor的预测结果进行比较,能够发现直线的预测能力非常受限。
似乎数据的细节都丢失了。
对一维数据得出的观点有些片面,对于有多个特征的数据集而言,线性模型可以非常强大。
2.线性回归(普通最小二乘法)
- 有许多不同的线性回归模型。这些模型之间的区别在于如何从训练数据中学习参数
w和b,以及如何控制模型的复杂度。 - 线性回归也就是普通最小二乘法(
OLS),是回归问题最简单也是最经典的线性方法。 OLS寻找参数w和b,使得对训练集的预测值与真实的回归目标值y之间的均方误差最小。- 均方误差是预测值与真实值之差的平方和除以样本数。
PS:线性回归没有参数,这是一个优点,但是也因此无法控制模型的复杂度。
import mglearn
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X,y=mglearn.datasets.make_wave(n_samples=60)
#导入wave数据集
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42)
#random_state参数指定随机数生成器的种子,使每次拆分的数据集相同
lr = LinearRegression().fit(X_train, y_train)
斜率参数被保存在coef_属性中,而偏移或截距被保存在intercept_属性中:
In:
print("lr.coef_:", lr.coef_)
#w(权重或系数)被保存在coef_属性中
print("lr.intercept_:", lr.intercept_)
#b(偏移或截距)被保存在intercept_属性中
Out:
lr.coef_: [0.394]
lr.intercept_: -0.031804343026759746
coef_属性和intercept_属性的简单介绍:
coef_和intercept_结尾处都有着下划线。其实,在sklearn中总是将从训练数据中得出的值保存在以下划线结尾的属性中。
- 这是为了将其与其他用户设置的参数区分开。
intercept_属性是一个浮点数,而coef_属性是一个NumPy数组,每个元素对应一个输入特征。
接下来继续看模型在训练集和测试集上的性能:
In:
print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lr.score(X_test, y_test)))
Out:
Training set score: 0.67
Test set score: 0.66
R²约为0.66,这个结果不算好,但是可以发现,训练集和测试集的分数非常接近,表明可能存在欠拟合。
接下来导入波士顿房价数据集,这个数据集有506个样本和105个导出特征:
In:
import matplotlib.pyplot as plt
import mglearn
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X,y=mglearn.datasets.load_extended_boston()
#导入波士顿房价数据集
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)
#random_state参数指定随机数生成器的种子,使每次拆分的数据集相同
lr = LinearRegression().fit(X_train, y_train)
print("Training set score: {:.2f}".format(lr.score

本文介绍了线性模型在回归问题中的应用,包括线性回归和岭回归。线性回归通过最小化均方误差来学习参数,而岭回归引入正则化来防止过拟合。通过调整正则化参数,可以在模型复杂度和泛化性能之间找到平衡。实验结果显示,岭回归在测试集上的表现优于线性回归,尤其是在数据量有限的情况下。
最低0.47元/天 解锁文章
---线性模型(分类)算法介绍4---附完整代码&spm=1001.2101.3001.5002&articleId=114263355&d=1&t=3&u=717e73aa7ac7495c8524c98253dd0cef)
2671

被折叠的 条评论
为什么被折叠?



