关于线性回归算法

线性回归属于监督学习算法中,回归算法的一种,主要应用场景是连续数值型变量的预测问题。

模型

线性回归的模型为:
y i ^ = w x i + b \hat{y_i}=wx_i+b yi^=wxi+b
其中 w : 特 征 权 重 w:特征权重 w: b : 偏 置 值 b:偏置值 b: y i ^ 为 自 变 量 的 预 测 值 \hat{y_i} 为自变量的预测值 yi^ x i 为 因 变 量 x_i为因变量 xi y i 为 自 变 量 的 真 实 值 y_i为自变量的真实值 yi

策略

线性回归通过拟合一条直线,使得预测值与真实值之间的差异最小。基于此目的,我们确定损失函数
L = ∑ i ( y i − y i ^ ) 2 L=\sum_{i}(y_i-\hat{y_i})^2 L=i(yiyi^)2

参数 ( w , b ) (w, b) (w,b)的估计值 ( w ^ , b ^ ) (\hat{w}, \hat{b}) (w^,b^),将使得损失函数 L L L达到最小值,即:
( w ^ , b ^ ) = a r g m i n w , b ∑ ( y i − w x i − b ) 2 (\hat{w}, \hat{b})=argmin_{w,b}\sum(y_i-wx_i-b)^2 (w^,b^)=argminw,b(yiwxib)2

参数求解

使用梯度下降法求解参数 ( w ^ , b ^ ) (\hat{w}, \hat{b}) (w^,b^),即分别对损失函数中的 w , b w,b w,b一阶偏导数
∂ ∂ w L = ∂ ∂ w ∑ ( y i − w x i − b ) 2 = 2 ( w x i + b − y i ) x i \begin{aligned} \frac{\partial}{\partial_w}L &=\frac{\partial}{\partial_w}\sum(y_i-wx_i-b)^2 = 2(wx_i+b-y_i)x_i\end{aligned} wL=w(yiwxib)2=2(wxi+byi)xi

∂ ∂ b L = ∂ ∂ b ∑ ( y i − w x i − b ) 2 = 2 ( w x i + b − y i ) \begin{aligned} \frac{\partial}{\partial_b}L &=\frac{\partial}{\partial_b}\sum(y_i-wx_i-b)^2 = 2(wx_i+b-y_i)\end{aligned} bL=b(yiwxib)2=2(wxi+byi)

可以得到参数 w w w b b b的更新公式为:
w ⟵ w − η ( w x i + b − y i ) x i w \longleftarrow w-\eta(wx_i+b-y_i)x_i wwη(wxi+byi)xi
b ⟵ b − η ( w x i + b − y i ) b \longleftarrow b-\eta(wx_i+b-y_i) bbη(wxi+byi)
其中, η \eta η为学习率,即学习的步长,取值范围在 [ 0 , 1 ] [0,1] [0,1]之间。

线性回归的scikit-learn实现

在scikit-learn中通过 sklearn.linear_model.LinearRegression 类进行实现,该类的主要参数和方法如下:

class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)

参数

  • fit_intercept:是否计算偏置项
  • normalize:是否归一化
  • n_jobs:指定CPU核数

属性

  • coef_:输出模型的权重向量 w w w
  • intercept_:输出模型的偏置项 b b b

方法

  • fit(X_train, y_train):在训练集上训练模型
  • score(X_test, y_test):返回模型在测试集上的得分,这里的得分是实际上是决定系数 R 2 R^2 R2,可以理解成回归模型对原始数据的可解释程度,计算公式如下:
    R 2 = 1 − ∑ ( y i − y i ^ ) 2 ∑ ( y i − y i ˉ ) 2 = 1 − 回 归 误 差 均 方 误 差 R^2 = 1-\frac{\sum(y_i-\hat{y_i})^2}{\sum(y_i-\bar{y_i})^2}=1-\frac{回归误差}{均方误差} R2=1(yiyiˉ)2(yiyi^)2=1

我们使用官方自带的波士顿房价数据建立线性回归预测模型,代码运行环境如下:

系统/软件版本
WindowsWindows 10专业版
PythonPython 3.7
# 忽略警告
import warnings
warnings.filterwarnings('ignore')

# 导入波士顿房价数据
from sklearn.datasets import load_boston
boston = load_boston()
X = boston.data
y = boston.target
print (X.shape)
print(y.shape)

'''
上述步骤运行结果如下:
(506, 13)
(506,)
'''

# 划分数据集:训练集、测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)

# 数据标准化
from sklearn import preprocessing

standard_X = preprocessing.StandardScaler()
X_train = standard_X.fit_transform(X_train)
X_test = standard_X.fit_transform(X_test)

standard_y = preprocessing.StandardScaler()
y_train = standard_y.fit_transform(y_train.reshape(-1, 1))
y_test = standard_y.fit_transform(y_test.reshape(-1, 1))

# 使用普通线性回归模型训练和预测
from sklearn.linear_model import LinearRegression
model_linearRegression = LinearRegression()
model_linearRegression.fit(X_train, y_train.ravel())
print('普通线性回归模型得分:%.3f'% model_linearRegression.score(X_test, y_test.ravel()))
print('特征权重:', model_linearRegression.coef_)
print('偏置值', model_linearRegression.intercept_)

'''
普通线性回归模型得分:0.778
特征权重: [-1.25033986e-01  8.31820979e-02  2.21863444e-03  4.95293742e-02
 -2.30770283e-01  2.66947733e-01  3.62496237e-04 -3.38742538e-01
  3.13757680e-01 -2.00036848e-01 -2.48256928e-01  1.24455186e-01
 -4.28563706e-01]
偏置值 3.997687893659791e-15
'''

# 画图(以普通线性回归模型的测试集数据示例)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 设置中文显示
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

fig = plt.figure(figsize=(20, 5), dpi=100)
ax = fig.add_subplot(111)
ax.set_title('线性回归模型得分:%.3f'%model_linearRegression.score(X_test, y_test.ravel()))
line1 = ax.plot(range(len(y_test)), y_test, 'b', label='真实值')
line2 = ax.plot(range(len(model_linearRegression.predict(X_test))), model_linearRegression.predict(X_test),'r--', label='预测值',linewidth=2)
legend = plt.legend(shadow=True)
legend.get_frame().set_facecolor('#6F93AE')

#保存图片
plt.savefig('线性回归模型结果.png')
#显示图片
plt.show()

最终可视化呈现如下:
在这里插入图片描述
可以看到模型最终的拟合效果与得分。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性回归算法的发展历程可以追溯到19世纪末。以下是线性回归算法的发展历程: 1. 19世纪末,高尔顿和他的学生K·Pearson观察了1078对夫妇,以每对夫妇的平均身高作为自变量,取他们的一个成年儿子的身高作为因变量。他们发现父母身高和子代身高之间存在近乎一条直线的关系,即回归直线方程为:y^=33.73+0.516x。这是线性回归算法的最早应用之一。 2. 在20世纪初,统计学家卡尔·皮尔逊进一步发展了线性回归算法。他提出了最小二乘法,用于拟合回归直线并估计回归系数。最小二乘法通过最小化残差平方和来确定最佳拟合直线,使得预测值与实际观测值之间的差异最小化。 3. 在20世纪中叶,计算机的发展使得线性回归算法得以广泛应用。计算机的出现使得回归分析的计算更加高效和准确。此时,线性回归算法开始在各个领域得到广泛应用,包括经济学、社会科学、医学等。 4. 随着时间的推移,线性回归算法不断发展和改进。研究人员提出了各种改进的线性回归模型,如多元线性回归、岭回归、lasso回归等。这些改进的模型考虑了更多的因素和变量,提高了模型的预测能力和解释能力。 5. 近年来,随着机器学习和深度学习的兴起,线性回归算法也得到了进一步的发展。线性回归算法被用作其他更复杂模型的基础,如神经网络中的线性层。 总结起来,线性回归算法的发展历程可以追溯到19世纪末,经过了统计学家的研究和改进,以及计算机的发展,逐渐成为一种广泛应用的预测和分析工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值