多项式回归1(Polynomial regression)

在线性回归中,我们是寻找一条直线来尽可能的拟合数据。但是我们在大部分情况下并不满足简单的线性回归的。如下图所示的这种特殊的线性回归的情况,这种特殊的回归方法被称为多项式回归(Polynomial regression)。
在这里插入图片描述

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt

随机生成一批数据


plt.rcParams["figure.figsize"] = (8,6)

x = np.random.uniform(-3, 3, size = 100)#-3到3均匀分布的100个数据
y = 2 * x ** 2 + 3 * x + 3 + np.random.normal(0, 1, size = 100) # 加上一点噪声

plt.scatter(x, y)#散点图
plt.show()

在这里插入图片描述
对这些数据使用线性拟合:

X = x.reshape(-1,1)
lin_reg = LinearRegression()
lin_reg.fit(X, y)
y_pred = lin_reg.predict(X)
plt.scatter(x, y)
plt.scatter(x, y_pred, color = 'r')
plt.show()
#线性回归去拟合明显不好。为了解决这个问题,可以增加一个X的平方的特征:

在这里插入图片描述
直线拟合效果并不理想,不如用曲线。
如:

X2 = np.hstack([X, X**2])#把X,与X**2组合在一起,新的X2有了两列数据,X,X**2,作为两类特征。
lin_reg2 = LinearRegression()
lin_reg2.fit(X2, y)
y_pred2 = lin_reg2.predict(X2)
plt.scatter(x, y)
plt.scatter(x, y_pred2, color = 'r')
plt.show()

#其实在sklearn中有封装好的方法(sklearn.preprocessing.PolynomialFeatures),我们不必自己去生成这个特征了
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2) # 添加几次方特征
poly.fit(X)
X2 = poly.transform(X)#造出了新的特征数据,X2含有常数项、X、X**2
# 训练
lin_reg = LinearRegression()
lin_reg.fit(X2, y)
y_pred = lin_reg.predict(X2)
plt.scatter(x, y)
plt.scatter(x, y_pred, color = 'r')
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多项式非线性回归是一种利用多项式函数模拟非线性关系的回归方法,其中PolynomialFeatures是一个用于生成多项式特征的类。它可以将原始特征转换为多项式特征,从而使非线性关系更容易被模拟。 例如,如果我们有一个包含两个特征的数据集 x = [a, b],我们可以使用PolynomialFeatures将其转换为包含原始特征和它们的交叉项、平方项等的多项式特征。这样可以得到新的特征矩阵 X = [[1, a, b, a^2, ab, b^2], ...],其中每行表示一个样本的特征。然后我们可以使用线性回归模型对新的特征矩阵进行拟合,从而得到一个多项式回归模型。 使用PolynomialFeatures的主要步骤如下: 1. 实例化一个PolynomialFeatures对象,指定要生成的多项式的阶数(默认为2)。 2. 将原始特征矩阵 X 传递给PolynomialFeatures的fit_transform方法,将其转换为多项式特征矩阵。 3. 使用转换后的特征矩阵 X 和目标变量 y 训练回归模型。 示例代码如下: ```python from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression # 原始特征矩阵 X = [[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]] # 目标变量 y = [0.3, 0.7, 1.1] # 实例化PolynomialFeatures对象,生成二次多项式特征 poly = PolynomialFeatures(degree=2) # 将特征矩阵转换为多项式特征矩阵 X_poly = poly.fit_transform(X) # 实例化LinearRegression对象,拟合数据 model = LinearRegression() model.fit(X_poly, y) # 打印模型系数和截距 print(model.coef_, model.intercept_) ``` 输出结果为: ```python [ 0. 1.09999999 -0.19999998 -1.69999993 2.99999985 -1.49999984] 0.30000000000000284 ``` 其中,模型系数是一个包含所有特征的数组,截距是一个常数。可以看到,模型系数包含了原始特征的一次项、二次项和交叉项,这样可以更好地拟合非线性关系。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值