问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

线性回归(一)基于Scikit-Learn的简单线性回归

创作时间:
作者:
@小白创作中心

线性回归(一)基于Scikit-Learn的简单线性回归

引用
CSDN
1.
https://blog.csdn.net/mojin2005/article/details/145883859

线性回归是机器学习中最基础且应用广泛的算法之一,它通过建立输入变量和输出变量之间的线性关系来进行预测。本文将从问题背景、数学模型、假设函数、损失函数、优化方法、训练步骤、代码实现到特点等多个方面,详细介绍基于Scikit-Learn的简单线性回归。

问题背景

回归问题是一类预测连续值的问题,满足这样要求的数学模型称作回归模型

线性方程指未知数都是一次的方程,其图像为一条直线。

线性回归问题的回归模型使用线性方程,适用于数据集点沿线性分布的场景。

数学模型

假设函数

假设函数是一个将输入映射到输出的函数,用于预测输出变量的值。

线性回归模型的假设函数:

H ( x ) = w T x i + b H(x)=\boldsymbol w^Tx_i+bH(x)=wTxi +b

其中w \boldsymbol ww为模型参数/权重,x i x_ixi 为模型输入,均为n nn维向量。b bb为偏置项。

损失函数

损失函数是一个体现预测值与真实值的偏差的函数。

线性回归模型的损失函数:

L ( x ) = ∥ y ^ − y ∥ 2 2 L(x)=\left|\hat y-y\right|^2_2L(x)=∥y^ −y∥22

其中y ^ \hat yy^ 为预测值,y yy为真实值。

符号∥ ∥ \left|\right|∥∥为范数正则化,简称范数。下标n nn表示L n \mathrm LnLn范数,即n nn维欧几里得空间的距离,例如:

∥ x ∥ 1 = ∑ i = 1 n ∣ x i ∣ \left|x\right|1=\displaystyle\sum^n{i=1}|x_i|∥x∥1 =i=1∑n ∣xi ∣

∥ x ∥ 2 = ∑ i = 1 n x i 2 \left|x\right|2=\displaystyle\sqrt{\sum^n{i=1}x_i^2}∥x∥2 =i=1∑n xi2

优化方法

优化方法是以损失函数为依据将偏差减到最小的方法,通常使用梯度下降等现成算法,此处即通过调节参数w \boldsymbol ww和b bb使损失函数求得最小值:

min ⁡ w , b ∥ y ^ − y ∥ 2 2 \underset{\mathrm w,b}{\min}\left|\hat y-y\right|^2_2w,bmin ∥y^ −y∥22

以w \boldsymbol ww为例,其调节方法为 :

w 新 = w 旧 − 学习率 ∗ 损失值 \boldsymbol w_新=\boldsymbol w_旧-学习率*损失值w新 =w旧 −学习率∗损失值

学习率是一个由外部输入用于控制训练过程的参数,称为超参数,影响每次偏差带来的参数调整幅度。

损失值可通过损失函数对w \boldsymbol ww求偏导得出。

训练步骤

①为假设函数初始化参数w \boldsymbol ww和b bb。

②将每个训练样本x i x_ixi 代入假设函数,最终计算损失值。

③利用优化方法调整假设函数的参数,重复以上步骤使得损失值最小。

代码实现

Scikit-Learn对各类机器学习算法进行了良好封装,可以调用简单的函数来实现模型训练,安装命令为:

pip install -U scikit-learn

基于Scikit-Learn库的线性回归算法:

#从Scikit-Learn库导入线性模型
from sklearn import linear_model 
import matplotlib.pyplot as plt  
import numpy as np  

#生成数据集,样本特征x为间隔均匀的序列,结果y由线性方程给出
x = np.linspace(-3, 3, 30)  
y = 2*x + 1  

#将数据集从一维数组转换为二维数组以符合scikit-learn的输入要求
x1 = [[i] for i in x]  
y1 = [[i] for i in y]  

#创建线性回归模型
model = linear_model.LinearRegression()  

#训练模型
model.fit(x1, y1)  

#绘制拟合线条,predict方法返回模型对输入的预测值
plt.plot(x, model.predict(x1), color='red')  

#绘制原始数据点
plt.scatter(x, y)  

#显示图像
plt.show()

运行结果:

若要添加随机扰动,生成较不规则的数据集,可将代码对应部分替换为:

x = np.linspace(-3, 3, 30)  
y = 2*x + 1  
x = x+np.random.rand(30)  

运行结果:

可以通过model.coef _ \texttt{model.coef}_model.coef_和model.intercept _ \texttt{model.intercept}_model.intercept_得到模型当前w \boldsymbol ww和b bb的值。

特点

优点:形式简单,可解释性强,容易理解和实现。

缺点:不能表达复杂的模式,对于非线性问题表现不佳。

应用领域:金融、气象预报等能够用线性关系进行描述的问题领域。

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号