多项式回归

4、多项式回归

4.1、多项式回归基本概念

  升维的目的是为了去解决欠拟合的问题的,也就是为了提高模型的准确率为目的的,因为当维度不够时,说白了就是对于预测结果考虑的因素少的话,肯定不能准确的计算出模型。

请添加图片描述

  在做升维的时候,最常见的手段就是将已知维度进行相乘(或者自乘)来构建新的维度,如下图所示。普通线性方程,无法拟合规律,必须是多项式,才可以完美拟合曲线规律,图中是二次多项式。

请添加图片描述

  对于多项式回归来说主要是为了扩展线性回归算法来适应更广泛的数据集,比如我们数据集有两个维度 x 1 、 x 2 x_1、x_2 x1x2,那么用多元线性回归公式就是: y ^ = w 0 + w 1 x 1 + w 2 x 2 \hat{y} = w_0 + w_1x_1 + w_2x_2 y^=w0+w1x1+w2x2,当我们使用二阶多项式升维的时候,数据集就从原来的 x 1 、 x 2 x_1、x_2 x1x2扩展成了 x 1 、 x 2 、 x 1 2 、 x 2 2 、 x 1 x 2 x_1、x_2、x_1^2、x_2^2、x_1x_2 x1x2x12x22x1x2 。因此多元线性回归就得去多计算三个维度所对应的w值: y ^ = w 0 + w 1 x 1 + w 2 x 2 + w 3 x 1 2 + w 4 x 2 2 + w 5 x 1 x 2 \hat{y} = w_0 + w_1x_1 + w_2x_2 + w_3x_1^2 + w_4x_2^2 + w_5x_1x_2 y^=w0+w1x1+w2x2+w3x12+w4x22+w5x1x2

  此时拟合出来的方程就是曲线,可以解决一些线性回归的欠拟合问题!

1、普通的线性回归

# 1.创建数据,并进行可视化
X = np.linspace(-1, 11, num=100)
y = (X - 5) ** 2 + 3 * X - 12 + np.random.randn(100)
X = X.reshape(-1, 1)
plt.scatter(X, y, color='red')

在这里插入图片描述

# 使用线性回归进行建模和预测
model1 = LinearRegression()
model1.fit(X, y)
y_pred = model1.predict(X_test)
plt.scatter(X, y, color='red')
plt.plot(X_test, y_pred, color='g')

从下图可以看出线性回归生成图像和真实的红点差距很大
在这里插入图片描述

2、多项式回归实战

# 特征升维
X_ = np.c_[X, X ** 2]
model1.fit(X_, y)
print(model1.coef_, model1.intercept_)

# 预测值
X_test_ = np.c_[X_test, X_test ** 2]
y_pred1 = model1.predict(X_test_)
plt.scatter(X,y,color='r')
plt.plot(X_test,y_pred1,color='g')

经过多项式回归推导的线性回归的图像和基本和真实的图形重合
在这里插入图片描述

3、梯度下降

新导入包

from sklearn.linear_model import SGDRegressor
# 用于构造新特征
from sklearn.preprocessing import PolynomialFeatures
# 1.对数据进行升维
ploy = PolynomialFeatures(interaction_only=False)
x_poly = ploy.fit_transform(X) # 0次幂,1次幂,2次幂
x_poly

在这里插入图片描述

X = np.linspace(-1, 11, num=100)
y = (X - 5) ** 2 + 3 * X - 12 + np.random.randn(100)
X = X.reshape(-1, 1)
plt.scatter(X, y, color='red')

在这里插入图片描述

model2 = SGDRegressor(eta0=0.001,fit_intercept=False)
model2.fit(x_poly,y)
X_test_poly = ploy.transform(X_test)
y_pred2 = model2.predict(X_test_poly)
plt.scatter(X,y,color='red')
plt.plot(X_test,y_pred2,color='g')
print(model2.coef_,model2.intercept_)

在这里插入图片描述

归一化处理

from sklearn.preprocessing import StandardScaler
model3 = SGDRegressor(eta0=0.1,fit_intercept=True)
scaler = StandardScaler()
X_poly_scaler = scaler.fit_transform(x_poly)
model3.fit(X_poly_scaler,y)

x_test_poly = ploy.transform(X_test)
x_test_poly_scaler = scaler.transform(x_test_poly)

y_pred3 = model3.predict(x_test_poly_scaler)
plt.scatter(X,y,color ='red')
plt.plot(X_test,y_pred3,color='g')
print(model3.coef_,model3.intercept_)

经过归一化处理和参数调优后预测值和真实点基本上重合
在这里插入图片描述
坚持学习,整理复盘
在这里插入图片描述

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿龙的代码在报错

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

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

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

打赏作者

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

抵扣说明:

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

余额充值