二次回归和线性回归的拟合效果的对比

二次回归和线性回归的拟合效果的对比

0 导入相关库

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r"/usr/share/fonts/vista/YaHeiConsolas.ttf", size=20) 

1 预处理

1.1 绘图相关参数设置

def runplt():
    plt.figure()# 定义figure
    plt.title(u'披萨的价格和直径',fontproperties=font_set)
    plt.xlabel(u'直径(inch)',fontproperties=font_set)
    plt.ylabel(u'价格(美元)',fontproperties=font_set)
    plt.axis([0, 25, 0, 25])
    plt.grid(True)
    return plt

1.2 训练集和测试集数据

X_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
X_test = [[7], [9], [11], [15]]
y_test = [[8], [12], [15], [18]]

1.3 画出横纵坐标以及若干散点图

plt = runplt()
plt.scatter(X_train, y_train,s=40)

在这里插入图片描述

2 线性回归

2.1 训练模型&预测

xx = np.linspace(0, 26, 5) # 给出一些点
regressor = LinearRegression() # 创建模型
regressor.fit(X_train, y_train) # 训练
yy = regressor.predict(xx.reshape(xx.shape[0], 1)) #预测

2.2 画出线性回归的曲线

plt = runplt()
plt.scatter(X_train, y_train, s=40, label='orginal')

plt.plot(xx, yy, 'g-', label='linear equation')
plt.legend(loc='upper left')
plt.show()

在这里插入图片描述

3 多项式回归(二次回归)

3.1 生成多项式特征

quadratic_featurizer = PolynomialFeatures(degree=2)
X_train_quadratic = quadratic_featurizer.fit_transform(X_train)

regressor_quadratic = LinearRegression()
regressor_quadratic.fit(X_train_quadratic, y_train)

在这里插入图片描述

X_train

在这里插入图片描述

X_train_quadratic

在这里插入图片描述
PolynomialFeatures(degree=2)
在这里插入图片描述

3.2 画出多项式回归的曲线

numpy.reshape # 给数组一个新的形状而不改变其数据

xx = np.linspace(0, 26, 5)
print('xx.shape', xx.shape)
print('xx.reshape', xx.reshape(xx.shape[0], 1).shape)
xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))
print('xx_quadratic', xx_quadratic.shape)

在这里插入图片描述

xx

在这里插入图片描述

xx.reshape(xx.shape[0], 1)

在这里插入图片描述

xx_quadratic

在这里插入图片描述

plt = runplt()
plt.scatter(X_train, y_train, s=40, label='orginal')

plt.plot(xx, yy, 'g-', label='linear equation')

plt.plot(xx, regressor_quadratic.predict(xx_quadratic), 'r--',label="quadratic equation")
plt.legend(loc='upper left')
plt.show()

在这里插入图片描述

4 评估模型

4.1 线性回归在训练集&测试集的表现

plt = runplt()
plt.scatter(X_train, y_train, s=40, label='orginal')
plt.plot(xx, yy, 'g-', label='linear equation')
plt.scatter(X_test, y_test, c='r', s=100, label='test')

plt.legend(loc='upper left')
plt.show()

在这里插入图片描述

4.2 二次回归在训练集&测试集的表现

plt = runplt()
plt.scatter(X_train, y_train, s=40, label='orginal')
plt.plot(xx, regressor_quadratic.predict(xx_quadratic), 'g--',label="quadratic equation")    
plt.scatter(X_test, y_test, c='r', s=100, label='test')

plt.legend(loc='upper left')
plt.show()

在这里插入图片描述

4.3 r-squared

X_test_quadratic = quadratic_featurizer.transform(X_test)
print('linear equation  r-squared', regressor.score(X_test, y_test))
print('quadratic equation r-squared', regressor_quadratic.score(X_test_quadratic, y_test))

在这里插入图片描述

import pandas as pd
vs = pd.DataFrame({'r-squared': pd.Series(['linear equation', 'quadratic equation']),
         'score': pd.Series([regressor.score(X_test, y_test), regressor_quadratic.score(X_test_quadratic, y_test)])})
vs

在这里插入图片描述

vs.set_index('r-squared', inplace=True)

vs.plot.barh()

在这里插入图片描述

要使用`sklearn`对比二次回归线性回归拟合效果,可按以下步骤操作: 1. **导入所需库**:使用`numpy`进行数值计算,`matplotlib.pyplot`进行绘图,`sklearn.linear_model`中的`LinearRegression`进行线性回归,`sklearn.preprocessing`中的`PolynomialFeatures`生成多项式特征。 ```python import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures ``` 2. **创建训练数据集测试数据集**:准备训练集测试集数据,并绘制训练集的散点图。 ```python # 训练集数据 X_train = [[6], [8], [10], [14], [18]] y_train = [[7], [9], [13], [17.5], [18]] # 测试集数据 X_test = [[7], [9], [11], [15]] y_test = [[8], [12], [15], [18]] # 绘图相关参数设置 def runplt(): plt.figure() plt.title(u'披萨的价格直径') plt.xlabel(u'直径(inch)') plt.ylabel(u'价格(美元)') plt.axis([0, 25, 0, 25]) plt.grid(True) return plt # 绘制训练集的散点图 plt = runplt() plt.scatter(X_train, y_train, s=40) ``` 3. **进行线性回归并绘制线型图**:使用`LinearRegression`进行线性回归,并绘制线性回归作用后的线型图。 ```python # 创建线性回归模型 regressor = LinearRegression() # 拟合线性回归模型 regressor.fit(X_train, y_train) # 生成用于绘制直线的数据 xx = np.linspace(0, 26, 100) yy = regressor.predict(xx.reshape(xx.shape[0], 1)) # 绘制线性回归直线 plt.plot(xx, yy, label='线性回归') ``` 4. **进行二次回归并绘制线型图**:使用`PolynomialFeatures`生成多项式特征(最高次为2),并拟合二次回归曲线,绘制二次回归作用后的线型图。 ```python # 生成多项式特征(最高次为2) quadratic_featurizer = PolynomialFeatures(degree=2) X_train_quadratic = quadratic_featurizer.fit_transform(X_train) # 创建二次回归模型 regressor_quadratic = LinearRegression() # 拟合二次回归模型 regressor_quadratic.fit(X_train_quadratic, y_train) # 生成用于绘制二次曲线的数据 xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1)) yy_quadratic = regressor_quadratic.predict(xx_quadratic) # 绘制二次回归曲线 plt.plot(xx, yy_quadratic, label='二次回归') ``` 5. **显示图形并进行性能对比总结**:显示图形,并通过计算测试集上的均方误差等指标对比两种回归的性能。 ```python # 显示图例 plt.legend() # 显示图形 plt.show() # 计算线性回归在测试集上的均方误差 y_pred_linear = regressor.predict(X_test) mse_linear = np.mean((y_pred_linear - y_test) ** 2) print(f'线性回归测试集均方误差: {mse_linear}') # 计算二次回归在测试集上的均方误差 X_test_quadratic = quadratic_featurizer.transform(X_test) y_pred_quadratic = regressor_quadratic.predict(X_test_quadratic) mse_quadratic = np.mean((y_pred_quadratic - y_test) ** 2) print(f'二次回归测试集均方误差: {mse_quadratic}') ``` 通过对比均方误差等指标,可以判断二次回归线性回归拟合效果。均方误差越小,说明拟合效果越好。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值