import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 读入数据
data = genfromtxt(r"Delivery.csv",delimiter=',')
print(data)
![在这里插入图片描述](https://img-blog.csdnimg.cn/743a927095c04830a15161d3e6cf786b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_13,color_FFFFFF,t_70,g_se,x_16)
# 切分数据
x_data = data[:,:-1]
y_data = data[:,-1]
print(x_data)
print(y_data)
![在这里插入图片描述](https://img-blog.csdnimg.cn/190fab059d7e4f2a896adffed7523f40.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_14,color_FFFFFF,t_70,g_se,x_16)
# 引用模型
model = linear_model.LinearRegression()
model.fit(x_data, y_data)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a9a35f73d13b4d4a8556ac2fe594ce5c.png)
# 系数
print("coefficients:",model.coef_)
# 截距
print("intercept:",model.intercept_)
# 测试
x_test = [[102,4]]
predict = model.predict(x_test)
print("predict:",predict)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9e555f1e425f4be59e7df240c1d4ffc8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_14,color_FFFFFF,t_70,g_se,x_16)
ax = plt.figure().add_subplot(111, projection = '3d')
ax.scatter(x_data[:,0], x_data[:,1], y_data, c = 'r', marker = 'o', s = 100)
#点为红色圆形
x0 = x_data[:,0]
x1 = x_data[:,1]
# 生成网格矩阵
x0, x1 = np.meshgrid(x0, x1)
z = model.intercept_ + x0*model.coef_[0] + x1*model.coef_[1]
# 画3D图
ax.plot_surface(x0, x1, z)
#设置坐标轴
ax.set_xlabel('Miles')
ax.set_ylabel('Num of Deliveries')
ax.set_zlabel('Time')
#显示图像
plt.show()
![在这里插入图片描述](https://img-blog.csdnimg.cn/00ab3cf58e844510b6b0e9ab70394604.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_18,color_FFFFFF,t_70,g_se,x_16)
多项式回归
![在这里插入图片描述](https://img-blog.csdnimg.cn/8a403c592c904b84adeb3e4de2514a4d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_14,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8aa8670fcce14470b0f069f6b5e1cc23.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16)
例子
![在这里插入图片描述](https://img-blog.csdnimg.cn/98ab15118df0440fa7d7972deb21ddc6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
数据:
![在这里插入图片描述](https://img-blog.csdnimg.cn/25b395bef41440598b1d7bd8a7b0ca68.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_11,color_FFFFFF,t_70,g_se,x_16)
# 载入数据
data = np.genfromtxt("job.csv", delimiter=",")
x_data = data[1:,1]
y_data = data[1:,2]
plt.scatter(x_data,y_data)
plt.show()
![在这里插入图片描述](https://img-blog.csdnimg.cn/4e30f8b8310444d181123a6ba752f3bc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_16,color_FFFFFF,t_70,g_se,x_16)
x_data
![在这里插入图片描述](https://img-blog.csdnimg.cn/3e81ce9b209b4b9181a91d841f3de01c.png)
#增加维数
x_data = x_data[:,np.newaxis]
y_data = y_data[:,np.newaxis]
x_data
![在这里插入图片描述](https://img-blog.csdnimg.cn/2b64ac209ecc4478be37f3056c855ad3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_12,color_FFFFFF,t_70,g_se,x_16)
# 画图
plt.plot(x_data, y_data, 'b.')
plt.plot(x_data, model.predict(x_data), 'r')
plt.show()
![在这里插入图片描述](https://img-blog.csdnimg.cn/eb90d88503614beeb0982f07b7c05f99.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_16,color_FFFFFF,t_70,g_se,x_16)
# 定义多项式回归,degree的值可以调节多项式的特征
poly_reg = PolynomialFeatures(degree=5)
# 特征处理
x_poly = poly_reg.fit_transform(x_data)
# 定义回归模型
lin_reg = LinearRegression()
# 训练模型
lin_reg.fit(x_poly, y_data)
![在这里插入图片描述](https://img-blog.csdnimg.cn/1e13bbd4438346489c7b84c632e6ecc9.png)
这里的degree是什么意思呢?
![在这里插入图片描述](https://img-blog.csdnimg.cn/1a3cae21e8094034af77cb0a3542cef1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_16,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9e378035088942be96bbba41d333c300.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_15,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0396282bd6a94e508706661a59dc3546.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_17,color_FFFFFF,t_70,g_se,x_16)
degree的意思其实就是要建立几次多项式拟合
# 画图
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')
plt.ylabel('Salary')
plt.show()
![在这里插入图片描述](https://img-blog.csdnimg.cn/a78902fecbcb45b68655126272a7d793.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_19,color_FFFFFF,t_70,g_se,x_16)
我们会发现上面的曲线不够平滑,这是因为仅取了10个点,我们取数多一点的时候就会正常
# 画图
plt.plot(x_data, y_data, 'b.')
x_test = np.linspace(1,10,100)#从1开始到10结束,均匀生成100个点(等差数值)
x_test = x_test[:,np.newaxis]#增加维度
plt.plot(x_test, lin_reg.predict(poly_reg.fit_transform(x_test)), c='r')
plt.title('Truth or Bluff (Polynomial Regression)')
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()
![在这里插入图片描述](https://img-blog.csdnimg.cn/de269aadbbcd40eaa8bbbbeee22cd758.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_19,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0c7b5fac95834e6db461fe4698d4a382.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZmI6ZmI55qE57OW572Q5a2Q,size_15,color_FFFFFF,t_70,g_se,x_16)