Sklearn实现普通最小二乘法

LinearRegression拟合一个带有系数 w = ( w 1 , . . . , w p ) w=(w_1,...,w_p) w=(w1,...,wp)的线性模型,使得数据集实际观测数据和预测数据之间的残差平方和最小,其数学表达式为:
m i n w ∣ ∣ X w − y ∣ ∣ 2 2 min_w||Xw-y||^2_2 minwXwy22

ols

LinearRegression 会调用 fit 方法来拟合数组 Xy,并且将线性模型的系数 w 存储在其成员变量 coef_ 中:

>>> from sklearn.linear_model import LinearRegression
>>> ols = LinearRegression()
# 训练
>>> ols.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
# 线性模型的系数存储在coef_
>>> print(ols.coef_)
[0.5 0.5]
# 线性模型的截距项
>>> print(ols.intercept_)
2.220446049250313e-16

然而,对于普通最小二乘的系数估计问题,其依赖于模型各个特征的相互独立性。当各个特征是相关的,且设计矩阵 X X X的各项近似线性相关,那么,设计矩阵会趋向于奇异矩阵,这种特性导致最小二乘估计对于随机误差非常敏感,可能产生很大的方差。例如,在没有实验设计的情况下收集到的数据,这种多重共线性的情况可能真的会出现。

线性回归示例

下面的示例只使用了糖尿病数据集diabetes的第一个特征,便于绘图。可以在图中看到线性回归如何试图绘制一条最小化残差平方和的直线。

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

# 加载糖尿病数据
diabetes_x, diabetes_y = datasets.load_diabetes(return_X_y=True)
# 取糖尿病数据第三列为训练集
diabetes_x = diabetes_x[:, np.newaxis, 2]
# 划分训练集和测试集
diabetes_x_train, diabetes_x_test = diabetes_x[:-20], diabetes_x[-20:]
diabetes_y_train, diabetes_y_test = diabetes_y[:-20], diabetes_y[-20:]
# 创建线性模型对象
reg = linear_model.LinearRegression()
# 训练
reg.fit(diabetes_x_train, diabetes_y_train)
# 使用测试集预测
diabetes_y_pred = reg.predict(diabetes_x_test)
# 线性模型的系数
print("线性模型的系数:%s" % reg.coef_) # 线性模型的系数:[938.23786125]
# 均方误差
print("均方误差:%.2f" % mean_squared_error(diabetes_y_test, diabetes_y_pred)) # 均方误差:2548.07
# r2
print("R^2: %.2f" % r2_score(diabetes_y_test, diabetes_y_pred)) # R^2: 0.47

# 绘图
plt.scatter(diabetes_x_test, diabetes_y_test, color='black')
plt.plot(diabetes_x_test, diabetes_y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()

ols

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值