机器学习:一元线性回归
一元线性回归(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 pd
def 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