一元线性回归(Simple Linear Regression)是一种统计方法,用于分析一个自变量(independent variable)和一个因变量(dependent variable)之间的线性关系。它是线性回归分析中最简单和最基本的形式。
一元线性回归的数学模型可以表示为:
y = w x + b y = w x + b y=wx+b
估计一元线性回归模型的最常用方法是最小二乘法,它是一种常用的参数估计方法,用于求解一元线性回归模型的斜率 w w w和截距 b b b。
损失函数:
L ( w , b ) = ∑ i = 1 n ( y i − ( w x i + b ) ) 2 L(w,b) = \sum_{i=1}^n(y_i - (wx_i + b))^2 L(w,b)=i=1∑n(yi−(wxi+b))2
分别对 w w w和 b b b求偏导,并令其等于0,之后进行求解:
w = ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 w = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sum (x_i - \bar{x})^2} w=∑(xi−xˉ)2∑(xi−xˉ)(yi−yˉ)
b = y ˉ − w x ˉ b = \bar{y} - w \bar{x} b=yˉ−wxˉ
Python实现一元线性回归
准备数据:Student Performance (Multiple Linear Regression) | Kaggle,下载数据。
处理数据:由于是一元线性回归模型,因此仅需要 x x x和 y y y两个变量,在这里选取了以往成绩
作为 x x x,表现指数
作为 y y y。
import numpy as np
import pandas as pddef get_data():"""x:以往成绩y:表现指数"""data = pd.read_csv('./Student_Performance.csv', header=0)dataXY = np.array((data.iloc[0:,[1,5]].values))return dataXY[:,0], dataXY[:,1]print(get_data())
实现一元线性回归模型:根据上面给出的公式进行实现即可。
由于numpy向量化更优,故仅使用numpy,不使用list等python原始类型。
import numpy as np
import pandas as pd"""y = wx + b
"""# print(dataset)
# print(x)
# print(y)
def get_w_b(inputx: np.array, inputy: np.array):x = np.array(inputx)y = np.array(inputy)# w = ((x - x.mean()) * (y - y.mean())).sum() / ((x - x.mean())**2).mean()w = ( (y * (x - x.mean())).sum()) / ( (x**2).sum() - (x.sum()**2) / len(x))b = y.mean() - w * x.mean()return w, b
使用算法:
导入数据集:
import data_processing_1LR as gd
x, y = gd.get_data()
print(x)
查看数据:
plt.scatter(x, y)
引入实现的算法模型:
import LinearRegression1 as LR1
w ,b = LR1.get_w_b(x, y)
print(w,b)
y_hat = w*x + b
plt.plot(x, y_hat, color='r')
plt.scatter(x, y)
南瓜书 PumpkinBook-课程详情 | Datawhale