sklearn-简单线性回归

简单线性回归模型

y = α + β x y = \alpha+\beta x y=α+βx

import numpy as np
import matplotlib.pyplot as plt
# "np" 和 "plt" 分别是Numpy库和Matplotlib库的常用别名
# 在scikit-learn中的一个惯用法是将特征向量的矩形命名为X
# 大写字母表示矩阵,小写字母表示向量
X = np.array([[6], [8], [10], [14], [18]]).reshape(-1, 1)

print(X)
# X表示我们的训练数据的特征
y = [7, 9, 13, 17.5, 18]
print(y)
# y是一个标签向量

plt.title('test')
plt.xlabel('x')
plt.ylabel('y')
plt.plot(X, y, 'k.')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.show()
from sklearn.linear_model import LinearRegression
model = LinearRegression() # 创建一个估计器实例
model.fit(X, y) # 用训练数据拟合模型
test_pizza = np.array([[12]])
predicted_price = model.predict(test_pizza)[0]
# 预测一个直径之前从未见过的x
print('x=12时,y= %.2f' % predicted_price)

用代价函数评价模型的拟合性

代价函数,也被称为损失函数,它用于定义和衡量一个模型的误差。

print('残差平方和: %.2f' % np.mean((model.predict(X)- y) ** 2))

求解简单线性回归的OLS

在这一部分中,我们将求解出简单线性回归的OLS。回想一下,简单
线性回归由方程 y =α +βx给出,而我们的目标是通过求代价函数的极
小值来求解出β 和α的值。首先我们将解出β 值,为了达到目的,我们
将计算x的方差以及x和y的协方差。

import numpy as np
X = np.array([[6], [8], [10], [14], [18]]).reshape(-1, 1)
#平均值
x_bar = X.mean()
print(x_bar)

# 注意我们在计算样本方差的时候将样本的数量减去1
# 这项技巧称为贝塞尔校正,它纠正了对样本中总体方差估计的偏差
variance = ((X - x_bar)**2).sum() / (X.shape[0] - 1)
print(variance)
#Numpy库也提供了一个叫作var的方法来计算方差。计算样本方差时关
#键字参数ddof可以设置贝塞尔校正
print(np.var(X, ddof=1))
# 之前我们使用一个列表表示y
# 在这里我们改为使用一个Numpy多位数组,它包含了几个计算样本均值的方法
y = np.array([7, 9, 13, 17.5, 18])
y_bar = y.mean()
# 我们将X转置,因为所有的操作都必须是行向量
covariance = np.multiply((X - x_bar).transpose(), y -
y_bar).sum()/(X.shape[0] - 1)
print(covariance)
print(np.cov(X.transpose(), y)[0][1])

评价模型

我们可以使用一些衡量方法来评估模型的预测能力。在此我们使用一
种叫作R方的方法来评估披萨价格预测器。R方,也被称为决定系数,
它用来衡量数据和回归线的贴近程度。计算R方的方法有多种,在简
单线性回归模型中,R方等于皮尔森积差相关系数(PPMCC)的平
方,也被称为皮尔森相关系数r的平方。使用该计算方法,R方必须是
0和1之间的正数,其原因很直观:如果R方描述的是由模型解释的响
应变量中的方差的比例,这个比例不能大于1或者小于0。其他一些计
算方法,包括scikit-learn库使用的方法,不使用皮尔森相关系数r的平
方公式计算R方。如果模型的表现非常差,由这些计算方法求出的R方
可能为负值。了解性能指标的局限性非常重要,R方对于异常值尤其
敏感,当新的特征增加到模型中时,它常常会出现异样的增长。

import numpy as np
from sklearn.linear_model import LinearRegression
X_train = np.array([6, 8, 10, 14, 18]).reshape(-1, 1)
y_train = [7, 9, 13, 17.5, 18]
X_test = np.array([8, 9, 11, 16, 12]).reshape(-1, 1)
y_test = [11, 8.5, 15, 18, 11]
model = LinearRegression()
model.fit(X_train, y_train)
r_squared = model.score(X_test, y_test)
print(r_squared )
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我小兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值