sklearn实现多项式线性回归_一元/多元 【Python机器学习系列(八)】


文章目录

  • 1. 多项式一元回归
  • 2. 多项式多元回归



      ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞ

                 

sklearn实现线性回归模型 python sklearn线性回归_机器学习

sklearn实现线性回归模型 python sklearn线性回归_sklearn_02

sklearn实现线性回归模型 python sklearn线性回归_sklearn_02

sklearn实现线性回归模型 python sklearn线性回归_sklearn_02

sklearn实现线性回归模型 python sklearn线性回归_多项式_05


    ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞ


今天分享的内容是,通过python的sklearn机器学习库实现多项式线性回归。blog内容分为一元和多元两部分。欢迎大家访问!


1. 多项式一元回归

自行准备一组数据,满足有两列可以做一元回归即可。读取数据并查看数据分布情况,代码如下:

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

df = pd.read_csv("data.csv")
features = [df.columns.values[1]]
# 获取数据
data = df.values


# 特征
x_data = data[1:, 1]
# 标签
y_data = data[1:, 2]

# 查看数据分布状况
plt.scatter(x_data, y_data)
plt.show()

绘制出散点图如下图所示:

        

sklearn实现线性回归模型 python sklearn线性回归_sklearn_06


以最高项为5次项为例,进行多元回归的建模,并绘制出曲线图。

# 将x_data转为二维数组
x_data = x_data[:, np.newaxis]

# 创建多项式对象,degree调节多项式的特征 5表示最高次项为5次项 x的5次方
poly_reg = PolynomialFeatures(degree=5)
# 数据转换 x0-->1  x1-->x  x2-->x^2  x3-->x^3
x_poly = poly_reg.fit_transform(x_data)

# 建模
lin_reg = LinearRegression().fit(x_poly, y_data)

# 可视化
# 绘制x,y散点图
plt.scatter(x_data, y_data, color="r")
# 绘制x,y^曲线图
plt.plot(x_data, lin_reg.predict(x_poly))
plt.show()

因为选择的数据中样本相对较少,绘制出的曲线图如下图所示:

        

sklearn实现线性回归模型 python sklearn线性回归_sklearn_07


以DataFrame的形式输出系数,以及截距。代码如下所示:

point = poly_reg.get_feature_names(features)
coefs = lin_reg.coef_
inter = lin_reg.intercept_
combine = [*zip(point, coefs)]
sort_coef = pd.DataFrame(combine, columns=['features', 'coef'])
print(sort_coef)
print(inter)

输出结果:

             

sklearn实现线性回归模型 python sklearn线性回归_机器学习_08


做预测,以x=20为例,首先需要把测试的数据转为多项式格式。然后才能使用predict()方法。

test = poly_reg.fit_transform([[20]])
print(lin_reg.predict(test))

预测结果:

             

sklearn实现线性回归模型 python sklearn线性回归_sklearn实现线性回归模型_09


2. 多项式多元回归

做完一元的多项式回归,接下来做多元的多项式回归。以最高项指定为4次项为例,使用内置的加利福尼亚房价数据集,代码示例如下:

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.datasets import fetch_california_housing as fch
from sklearn.preprocessing import PolynomialFeatures

# 读取数据集
house_value = fch()
x = pd.DataFrame(house_value.data)
y = house_value.target
# print(x.head())

# 将数据集进行多项式转化
poly = PolynomialFeatures(degree=4)
x_ = poly.fit_transform(x)
print(x_)
print(x.shape)

简单查看一下数据的结构,以便对后续代码的输出的理解。从下图可以看到,原始数据x中,共有8个特征,经过多项式转化后,特征数变为了495-1=494个。

sklearn实现线性回归模型 python sklearn线性回归_sklearn实现线性回归模型_10


# 对原始数据进行线性回归进行拟合
reg = LinearRegression().fit(x, y)
# 计算R^2
score = reg.score(x, y)

# 对多项式化数据集进行线性回归拟合
reg_ = LinearRegression().fit(x_, y)
# 获取R2指数
score_ = reg_.score(x_, y) 

point = poly.get_feature_names(house_value.feature_names)
coef = reg_.coef_
combine = [*zip(point, coef)]
sort_coef = pd.DataFrame(combine, columns=['features', 'coef'])
print(sort_coef)

输出系数与截距结果如下图所示:

           

sklearn实现线性回归模型 python sklearn线性回归_sklearn实现线性回归模型_11