简单线性回归是我们接触最早,最常见的统计学分析模型之一。
假定自变量 x与因变量 y 线性相关,我们可以根据一系列已知的 (x,y) 数据,通过某种方法,拟合出一条直线
y=b0+b1x
并利用这条直线预测 y yy 的值 。这种方法就叫作简单线性回归
那么我们该如何去拟合出这条直线,才能使预测的结果最准确呢?
常用的方法是最小二乘法。
最小二乘法
最小二乘的思想就是要使得观测点和估计点的距离的平方和达到最小.这里的“二乘”指的是用平方来度量观测点与估计点的远近(在古汉语中“平方”称为“二乘”),“最小”指的是参数的估计值要保证各个观测点与估计点的距离的平方和达到最小。从这个上也可以看出,最小二乘也可用于拟合数据模型。
就是使得已知的 yi与通过模型预测得到的yp之差的平方和最小
梯度下降法 *
对于简单线性回归,我们可以使用解析的方法求出参数,但对于广义的、多元的线性回归以及非线性的问题,使用解析法是低效的甚至是无效的。
考虑到计算机能够进行大量重复计算,实际上我们通常使用迭代的方法来求得参数。所谓迭代,即按照一定的步长逐个取参数值,并按某种原则(如最小二乘)评估用这些值进行拟合的合理性,最终选取最合适的参数值。
梯度下降法是一种常见的迭代方法,解决了当有多个自变量(特征)时往什么方向(选取什么方向的特征向量)迭代能够使函数值最终收敛到最小值的问题。
实际上,在输入特征较多的情况下,使用迭代法所需的计算量将远远小于解析法。
线性回归处理学生数据集
处理的数据为学生数据studentscores.csv
Hours,Scores
2.5,21
5.1,47
3.2,27
8.5,75
3.5,30
1.5,20
9.2,88
5.5,60
8.3,81
2.7,25
7.7,85
5.9,62
4.5,41
3.3,42
1.1,17
8.9,95
2.5,30
1.9,24
6.1,67
7.4,69
2.7,30
4.8,54
3.8,35
6.9,76
7.8,86
#Step 1: Data Preprocessing
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
dataset=pd.read_csv('studentscores.csv')
X=dataset.iloc[:,:1].values
Y=dataset.iloc[:,1].values
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 1/4, random_state = 0)
#Step 2: Fitting Simple Linear Regression Model to the training set
from sklearn.linear_model import LinearRegression
regressor=LinearRegression()
regressor=regressor.fit(X_train,Y_train)
#Step 3: Predecting the Result
Y_pred=regressor.predict(X_test)
#Step 4: Visualization
plt.scatter(X_train,Y_train,color='red')
plt.plot(X_train,regressor.predict(X_train),color ='blue')
plt.show()
plt.scatter(X_test , Y_test, color = 'red')
plt.plot(X_test , regressor.predict(X_test), color ='blue')
plt.show()