方程

y = b₀ + b₁*X₁

简单线性回归其实就是一个一元一次方程,在图像上呈现一个线性关系。

图像

如何拟合这样一条线?

拟合的原理其实很简单,就是找到一条线,使得所有的点离这条线的距离之和是所有可能中最小的情况。当这条线满足这个要求的时候,这条线就是我们方程拟合的目标结果。
我们将用这样的结果去预测与之类似的数据,查看预测效果。

数据集

YearsExperience Salary
1.1 39343.00
1.3 46205.00
1.5 37731.00
2.0 43525.00
2.2 39891.00
2.9 56642.00
3.0 60150.00
3.2 54445.00
3.2 64445.00
3.7 57189.00
3.9 63218.00
4.0 55794.00
4.0 56957.00
4.1 57081.00
4.5 61111.00
4.9 67938.00
5.1 66029.00
5.3 83088.00
5.9 81363.00
6.0 93940.00
6.8 91738.00
7.1 98273.00
7.9 101302.00
8.2 113812.00
8.7 109431.00
9.0 105582.00
9.5 116969.00
9.6 112635.00
10.3 122391.00
10.5 121872.00

数据读取

1
2
3
4
5
6
7
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

dataset = pd.read_csv("Salary_Data.csv")
X = dataset.iloc[:,:1].values
Y = dataset.iloc[:,-1].values

划分测试集与训练集

1
2
from sklearn.model_selection 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
2
3
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train,Y_train)

测试预测结果

1
y_pred = regressor.predict(X_test)

图像展示

预测结果展示

1
2
3
4
5
6
plt.scatter(X_train,Y_train,color = "red")
plt.plot(X_train,regressor.predict(X_train),color = "blue")
plt.title("Salary VS Experience (training set)")
plt.xlabel("Years of Experience")
plt.ylabel("Salary")
plt.show()

预测结果

测试结果展示

1
2
3
4
5
6
plt.scatter(X_test,Y_test,color = "red")
plt.plot(X_train,regressor.predict(X_train),color = "blue")
plt.title("Salary VS Experience (training set)")
plt.xlabel("Years of Experience")
plt.ylabel("Salary")
plt.show()

测试结果