【机器学习个人笔记】part4——用sklearn实现多项式回归

【机器学习个人笔记】part4——用sklearn实现多项式回归

先来对比简单线性回归、多元线性回归和多项式回归:

【机器学习个人笔记】part4——用sklearn实现多项式回归_第1张图片
【机器学习个人笔记】part4——用sklearn实现多项式回归_第2张图片
【机器学习个人笔记】part4——用sklearn实现多项式回归_第3张图片
“多元“指的是在方程中有多个变量,放在机器学习的角度上来说就是有多个特征
“多项式”指的是一个变量有不同的参数和幂

场景:根据职位(等级)来预测薪水

数据集预览:

代码:

  1. 数据预处理(导入标准库,导入数据集、分割、特征缩放)
# Polynomial Regression

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset = pd.read_csv('../Position_Salaries.csv')
X = dataset.iloc[:, 1:2].values  # 自变量应该是矩阵
y = dataset.iloc[:, 2].values    # 因变量应该是向量

# Splitting the dataset into the Training set and Test set
# 由于数据集太小,所以不考虑分成训练集和测试集
'''from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
'''
# 同样也不用做特征缩放,因为函数内部已经帮我们做了
  1. 用简单线性回归器(LinearRegression)去拟合训练集
# Fitting Linear Regression to the dataset
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X, y)  # 拟合线性模型
  1. 用多项式回归器(Polynomial Regression)去拟合训练集
# Fitting Polynomail Regression to the dataset
from sklearn.preprocessing import PolynomialFeatures
poly_reg = PolynomialFeatures(degree = 4) # 产生一个最高维度是4的矩阵
X_poly = poly_reg.fit_transform(X)
lin_reg_2 = LinearRegression()
lin_reg_2.fit(X_poly, y)  # 拟合多项式线性回归

这里将最高维度设置成4维,也就是x的幂最高是4,最终效果:
【机器学习个人笔记】part4——用sklearn实现多项式回归_第4张图片

  1. 画出简单线性回归的效果图
# visuallising the Linear Regression results
plt.scatter(X, y, c="red")
plt.plot(X, lin_reg.predict(X))
plt.title = "Truth or Bluff (Linear Regression)"
plt.xlabel = "possion level"
plt.ylabel = "salary"
plt.show()

【机器学习个人笔记】part4——用sklearn实现多项式回归_第5张图片
5. 画出多项式线性回归的效果图

# Visualising the Polynomial Regression results
X_grid = np.arange(min(X), max(X), 0.1) # 这样将x分成多段,可以使生成的曲线更平滑
X_grid = X_grid.reshape(len(X_grid), 1)  # 将向量转换成了矩阵
plt.scatter(X, y, c="red")
plt.plot(X_grid, lin_reg_2.predict(poly_reg.fit_transform(X_grid)))
plt.title = "Truth or Bluff (polynimal regression)"
plt.xlabel = "possion level"
plt.ylabel = "salary"
plt.show()

这里用到了画图小技巧,将x分成多段,这样画出的曲线更加平滑,但在改变x后需要用PolynomialFeatures对新的x进行转换
【机器学习个人笔记】part4——用sklearn实现多项式回归_第6张图片

  1. 分别用训练好的简单线性回归器和多项式线性回归器对数据进行预测
# Predicting a new result with Linear Regression
lin_reg.predict(6.5)  # 33w

# Predicting a new result with Polynomial Regression
lin_reg_2.predict(poly_reg.fit_transform(6.5))  # 15.8w

其预测结果分别是33w和15.8w

总结

面对这次的数据集,简单线性回归存在严重的欠拟合,无法理想的预测结果。多项式回归器能够较好的预测数据。如果在PolynomialFeatures中设置degree = 1,那么该模型将变成简单线性模型,如果设置的太高,比如10,那么很容易出现过拟合现象。

完整代码

你可能感兴趣的:(机器学习,多项式回归,机器学习,python,skleanr)