python 机器学习多项式回归

本文探讨了线性回归在房价预测中的局限性,并引入了多项式回归来提高模型的拟合度。通过二次和三次回归的对比,展示了如何选择最适合的模型以避免过拟合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  现实世界的曲线关系都是通过增加多项式实现的,现在解决多项式回归问题

  住房价格样本

  

  样本图像

import matplotlib.font_manager as fm
import matplotlib.pyplot as plt
myfont = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
# plt.figure()  # 实例化作图变量
plt.title('房价面积价格样本', fontproperties = myfont)  # 图像标题
plt.xlabel('面积(平方米)', fontproperties = myfont)  # x轴文本
plt.ylabel('价格(万元)', fontproperties = myfont)  # y轴文本
# plt.axis([30, 400, 100, 400])
plt.grid(True)  # 是否绘制网格线

X = [[50], [100], [150], [200], [250], [300]]
y = [[150], [200], [250], [280], [310], [330]]

X_test = [[250], [300]]  # 用来做最终效果测试
y_test = [[310], [330]]  # 用来做最终效果测试
# plt.plot(X, y, 'b.')#点
# plt.plot(X, y, 'b-')#线
plt.scatter(X, y, marker='*',color='blue',label='房价面积价格样本')
plt.show()

  

 

  用线性回归

     添加以下代码

model = LinearRegression()
model.fit(X, y)
print('一元线性回归 r-squared', model.score(X_test, y_test))

X2 = [[30], [400]]
y2 = model.predict(X2)
plt.plot(X2, y2, 'g-')
plt.show()

  

  实际情况是,如果房屋面积一味的增加,房价并不会线性增长,因此线性关系已经无法描述真实的房价问题

  采用多项式回归

  首先我们用二次多项式
  
# 实例化一个二次多项式特征实例
quadratic_featurizer = PolynomialFeatures(degree=2)

# 用二次多项式对样本X值做变换
X_train_quadratic = quadratic_featurizer.fit_transform(X)

# 创建一个线性回归实例
regressor_model = LinearRegression()

# 以多项式变换后的x值为输入,代入线性回归模型做训练
regressor_model.fit(X_train_quadratic, y)

# 设计x轴一系列点作为画图的x点集
xx = np.linspace(30, 400, 100)

# 把训练好X值的多项式特征实例应用到一系列点上,形成矩阵
xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))

yy_predict = regressor_model.predict(xx_quadratic)

# 用训练好的模型作图
plt.plot(xx, yy_predict, 'r-')


X_test_quadratic = quadratic_featurizer.transform(X_test)
print('二次回归     r-squared', regressor_model.score(X_test_quadratic, y_test))
#
#
plt.show()  # 展示图像

  

 

  继续三次回归

cubic_featurizer = PolynomialFeatures(degree=3)
X_train_cubic = cubic_featurizer.fit_transform(X)
regressor_cubic = LinearRegression()
regressor_cubic.fit(X_train_cubic, y)
xx_cubic = cubic_featurizer.transform(xx.reshape(xx.shape[0], 1))
plt.plot(xx, regressor_cubic.predict(xx_cubic))

X_test_cubic = cubic_featurizer.transform(X_test)
print('三次回归     r-squared', regressor_cubic.score(X_test_cubic, y_test))
plt.show()  # 展示图像

 

  

 

  

 

 

   可以看到三次回归比二次回归效果又好了一些,但是不是很明显。所以二次回归更可能是最适合的回归模型,三次回归可能有过拟合现象

 

   参考:http://www.aboutyun.com/thread-19073-1-1.html

 

### PythonExcel结合进行多项式回归分析 在Python中,可以使用`pandas`库读取Excel文件中的数据,并利用`sklearn`库实现多项式回归。以下是一个完整的示例,展示如何从Excel文件中加载数据、构建多项式特征以及训练多项式回归模型。 #### 示例代码 ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # 从Excel文件中加载数据 data = pd.read_excel("data.xlsx") # 假设Excel文件名为data.xlsx x_data = data['X'].values.reshape(-1, 1) # 假设X列存储自变量 y_data = data['Y'].values # 假设Y列存储因变量 # 可视化原始数据 plt.scatter(x_data, y_data, color='blue', label='Data Points') plt.title('Original Data') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.show() # 创建多项式特征 degree = 2 # 多项式的阶数 poly = PolynomialFeatures(degree=degree) x_poly = poly.fit_transform(x_data) # 训练线性回归模型 model = LinearRegression() model.fit(x_poly, y_data) # 输出模型参数 print(f"Coefficients: {model.coef_}") print(f"Intercept: {model.intercept_}") # 预测并可视化结果 x_range = np.linspace(x_data.min(), x_data.max(), 100).reshape(-1, 1) x_range_poly = poly.transform(x_range) y_pred = model.predict(x_range_poly) plt.scatter(x_data, y_data, color='blue', label='Data Points') plt.plot(x_range, y_pred, color='red', label=f'Polynomial Fit (Degree {degree})') plt.title('Polynomial Regression') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.show() ``` #### 解释 上述代码首先通过`pandas`读取Excel文件中的数据[^1]。接着,使用`PolynomialFeatures`将原始特征转换为多项式特征[^2]。然后,训练一个线性回归模型来拟合这些多项式特征[^3]。最后,通过可视化展示原始数据点和拟合曲线[^4]。 #### 注意事项 - Excel文件需要包含两列数据:一列表示自变量(如`X`),另一列表示因变量(如`Y`)。 - `PolynomialFeatures`的`degree`参数决定了多项式的阶数。选择合适的阶数对于避免欠拟合或过拟合至关重要。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值