sklearn基础--『监督学习』之线性回归

线性回归 是一种用于连续型分布预测的机器学习算法。

其基本思想是通过拟合一个线性函数来最小化样本数据和预测函数之间的误差。

1. 概述

常见的线性回归模型就是: <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) = w 0 + w 1 x 1 + w 2 x 2 + . . . + w n x n f(x) = w_0+w_1x_1+w_2x_2+...+w_nx_n </math>f(x)=w0+w1x1+w2x2+...+wnxn这样的一个函数。

其中

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> ( w 1 , w 2 , . . . w n ) (w_1,w_2,...w_n) </math>(w1,w2,...wn)是模型的系数向量
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> w 0 w_0 </math>w0是截距
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x 1 , x 2 , . . . , x n ) (x_1, x_2,...,x_n) </math>(x1,x2,...,xn)是样本数据(n是样本数据的维度

简单来说,线性回归模型的训练就是通过样本数据来确定系数向量 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( w 1 , w 2 , . . . w n ) (w_1,w_2,...w_n) </math>(w1,w2,...wn)和截距 <math xmlns="http://www.w3.org/1998/Math/MathML"> w 0 w_0 </math>w0的具体数值。

然后可以使用模型 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) f(x) </math>f(x)来预测新的样本数据。

2. 创建样本数据

首先,用scikit-learn中的自带的函数,就可以创建出适用于线性回归场景的样本数据。

python 复制代码
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 1)

X, y = make_regression(n_samples=100, n_features=1, noise=10)
ax.scatter(X[:, 0], y, marker="o")
ax.set_title("样本数据")

plt.show()

通过 make_regression 函数可以帮助我们创建任意的回归样本数据。

具体使用可以参考之前的文章: sklearn基础--『数据加载』之样本生成器

3. 模型训练

训练线性回归模型,一般使用最小二乘法 ,而scikit-learnlinear_model模块中,

已经封装好了最小二乘法的训练算法。

首先,根据上面的样本数据,划分训练集和测试集。

python 复制代码
from sklearn.model_selection import train_test_split

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

上面的代码按照9:1的比例划分了训练集测试集

然后,用基于最小二乘法的线性模型来训练数据。

python 复制代码
from sklearn.linear_model import LinearRegression

# 初始化最小二乘法线性模型
reg = LinearRegression()
# 训练模型
reg.fit(X_train, y_train)

print("模型的系数向量:", reg.coef_)
print("模型的系数截距:", reg.intercept_)

# 运行结果:
模型的系数向量: [99.59241352]
模型的系数截距: 0.6889080586801999

reg.coef_就相当于前面的 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( w 1 , w 2 , . . . w n ) (w_1,w_2,...w_n) </math>(w1,w2,...wn)
reg.intercept_就相当于前面的 <math xmlns="http://www.w3.org/1998/Math/MathML"> w 0 w_0 </math>w0

这里的样本数据为了方便绘图,只有一个维度。

最后,我们把线性模型训练集测试集都绘制出来看看效果。

python 复制代码
fig, ax = plt.subplots(1, 1)

# 训练集
ax.scatter(X_train[:, 0], y_train, marker="o", c="g")
# 测试集
ax.scatter(X_test[:, 0], y_test, marker="*", c="r")

# 线性模型
reg_x = np.array([-3, 3])
reg_y = reg.coef_ * reg_x + reg.intercept_
ax.plot(reg_x, reg_y, color="b")

plt.show()

上图中,蓝色的直线是在训练集上训练出来的线性模型

绿色的圆点是训练集 ;红色的五角星是测试集

从图中可以看出,训练的效果还不错。

总结

线性回归是一种常见的预测模型,可以用在

  1. 预测连续值:比如根据房屋面积和价格的关系预测房价,根据油耗和车辆重量之间的关系预测油耗等等。
  2. 判断因果关系:比如药物剂量和血压之间的关系,或者产品价格和销售量之间的关系

它的主要优势有简单易理解 (模型简单直观,易于理解和解释),
易于实施 (各种编程语言中都有现成的库和函数可以方便地实现和应用),

还有稳定性高(对于训练数据的小变化相对稳定,能够提供较为准确的结果)。

不过,线性回归模型需要基于一些假设 ,如误差项的独立性、同方差性等,如果这些假设不满足,模型可能无法得到准确的结果;

其次,对于一些非线性关系 的数据表现可能不佳;

而且,对异常值敏感,如果数据中存在异常值,线性回归的结果可能会受到较大影响,模型训练前最好先清洗和处理异常值。

相关推荐
明月看潮生17 分钟前
青少年编程与数学 02-015 大学数学知识点 07课题、数值分析
机器学习·青少年编程·数值分析·编程与数学
从零开始学习人工智能2 小时前
深入理解矩阵乘积的导数:以线性回归损失函数为例
机器学习
IT从业者张某某3 小时前
机器学习-04-分类算法-04-支持向量机SVM-案例
机器学习·支持向量机·分类
Uncertainty!!5 小时前
在huggingface上制作小demo
开发语言·python·机器学习·huggingface
尽一份心出一份力9 小时前
等不是办法,干才有希望,快速跑通graphRag
后端·机器学习·开源
十七算法实验室10 小时前
Matlab实现鼠群优化算法优化随机森林算法模型 (ROS-RF)(附源码)
开发语言·算法·决策树·随机森林·机器学习·支持向量机·matlab
Blossom.11810 小时前
物联网安全技术:守护智能世界的防线
人工智能·深度学习·物联网·安全·机器学习·自动化·去中心化
渝欢意10 小时前
机器学习——ROC曲线、PR曲线
人工智能·机器学习
Xiao_Ya__13 小时前
机器学习——决策树
人工智能·决策树·机器学习