机器学习之简单线性回归

举报
外围的小尘埃 发表于 2022/02/22 15:59:54 2022/02/22
【摘要】 最广为人知的线性回归模型——将数据拟合成一条直线。直线拟合的模型方程为 y = ax + b,其中 a 是直线斜率,b 是直线截距。看看下面的数据,它们是从斜率为 2、截距为 -5 的直线中抽取的散点:rng = np.random.RandomState(1) x = 10 * rng.rand(50) y = 2 * x - 5 + rng.randn(50) plt.scatter(x...

最广为人知的线性回归模型——将数据拟合成一条直线。直线拟合的模型方程为 y = ax + b,其中 a 是直线斜率,b 是直线截距。
看看下面的数据,它们是从斜率为 2、截距为 -5 的直线中抽取的散点:

rng = np.random.RandomState(1) 
x = 10 * rng.rand(50) 
y = 2 * x - 5 + rng.randn(50) 
plt.scatter(x, y);

可以用 Scikit-Learn 的 LinearRegression 评估器来拟合数据,并获得最佳拟合直线:

from sklearn.linear_model import LinearRegression 
model = LinearRegression(fit_intercept=True) 
model.fit(x[:, np.newaxis], y) 
xfit = np.linspace(0, 10, 1000) 
yfit = model.predict(xfit[:, np.newaxis]) 
plt.scatter(x, y) 
plt.plot(xfit, yfit);

数据的斜率和截距都在模型的拟合参数中,Scikit-Learn 通常会在参数后面加一条下划线,即 coef_ 和 intercept_:

print("Model slope: ", model.coef_[0]) 
print("Model intercept:", model.intercept_) 

输出结果如下所示:

Model slope: 2.02720881036 
Model intercept: -4.99857708555

可以看到,拟合结果与真实值非常接近,这正是我们想要的。
然而,LinearRegression 评估器能做的可远不止这些——除了简单的直线拟合,它还可以处理多维度的线性回归模型:
y = a 0 + a 1 x 1 + a 2 x 2 + … 

里面有多个 x 变量。从几何学的角度看,这个模型是拟合三维空间中的一个平面,或者是为更高维度的数据点拟合一个超平面。
虽然这类回归模型的多维特性使得它们很难可视化,但是我们可以用 NumPy 的矩阵乘法运算符创建一些数据,从而演示这类拟合过程:

rng = np.random.RandomState(1) 
X = 10 * rng.rand(100, 3) 
y = 0.5 + np.dot(X, [1.5, -2., 1.]) 
model.fit(X, y) 
print(model.intercept_) 
print(model.coef_) 

输出结果如下所示:

0.5 
[ 1.5 -2. 1.]

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200