利用sklearn里的函数对多项式进行拟合
第一幅图是数据图
第二幅图是用一元线性回归拟合的图
第三幅图是用多项式回归拟合出来的
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression # 线性回归
from numpy import genfromtxt
from sklearn.preprocessing import PolynomialFeatures # 生成多项式
# 载入数据
data = genfromtxt(r"C:\\ML\\chapter-1\\job.csv",delimiter=",")
x_data = data[1:,1]
y_data = data[1:,2]
plt.scatter(x_data,y_data)
plt.show()
x_data = data[1:,1,np.newaxis] # 给数据加上维度
y_data = data[1:,2,np.newaxis]
# 创建并拟合模型 一元线性回归
model = LinearRegression()
model.fit(x_data,y_data)
# 画图
# 使用直线来拟合曲线,有对比性
plt.plot(x_data,y_data,'b.') # b代表blue .表示用.画出来
plt.plot(x_data,model.predict(x_data),'r') # 画线,r代表red
plt.show()
# 定义多项式回归,degree的值可以调节多项式的特征
poly_reg = PolynomialFeatures(degree=5)
# 特征处理
x_poly = poly_reg.fit_transform(x_data)
# 定义回归模型
lin_reg = LinearRegression()
# 训练模型
lin_reg.fit(x_poly,y_data)
# print(x_poly)
# 结果如下(当degree=1):
# [[ 1. 1.]
# [ 1. 2.]
# [ 1. 3.]
# [ 1. 4.]
# [ 1. 5.]
# [ 1. 6.]
# [ 1. 7.]
# [ 1. 8.]
# [ 1. 9.]
# [ 1. 10.]]
# 结果如下(degree=2):
# [[ 1. 1. 1.]
# [ 1. 2. 4.]
# [ 1. 3. 9.]
# [ 1. 4. 16.]
# [ 1. 5. 25.]
# [ 1. 6. 36.]
# [ 1. 7. 49.]
# [ 1. 8. 64.]
# [ 1. 9. 81.]
# [ 1. 10. 100.]]
# 画图
plt.plot(x_data,y_data,'b.')
plt.plot(x_data,lin_reg.predict(poly_reg.fit_transform(x_data)), c='r')
plt.title('Truth or Bluff (Polynomial Regression)') # 标题
plt.xlabel('Position level') # X坐标
plt.ylabel('Salary') # Y坐标
plt.show()