这是一篇小白学习机器学习这门课程的笔记记录,如果有误请大家批评指正~
线性回归
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,是对“目标变量(y)随着某个特征变量(x)的增大而增大(或者减小)”这种关联性建模的方法。
只有一个独立的特征变量的情况叫做一元回归,有多个特征变量则是多元回归。
如果你觉得x和y的关系可以用一条直线来描述,我们就可以用线性回归模型找出这条直线。以直线 y = w0 + w1*x 为例,w0相当于y轴上的截距,w1是斜率(或者权重),我们把w0、w1称为学习参数。
均方误差
因为学习参数的不同,得到的模型也不同,为了判断更优的模型,引入均方误差。
我们通过均方误差(Mean Squared Error,简称MSE)来定量判断数据的关联性。理解为Error的各项square了再求mean。均方误差是目标变量和直线的差的平方的平均值,当存在n个数据时,可如下表示:用表示误差向量,则,或者写成
线性回归模型
# 加载模型
from sklearn.linear_model import LinearRegression
X = [[10.0], [8.0], [13.0], [9.0], [11.0], [14.0], [6.0], [4.0], [12.0], [7.0], [5.0]]
y = [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]
# 1.建立模型
model = LinearRegression()
# 2.训练模型
model.fit(X, y)
# 3.预测(无)
# 4.评价(无)
# 5.应用预测
y_pred = model.predict([[0], [1]])
print(model.intercept_) # 截距
print(model.coef_) # 斜率(系数/权重)
print(y_pred) # 对x=0, x=1的预测结果
model.intercept_
得到截距w0
model.coef_
对于一元回归得到斜率w1
对于多元回归得到的系数/权重w1,w2...wn
例:
线性回归理论推导
用numpy实现线性回归的公式
import numpy as np
X = diabetes.data
ones = np.ones([X.shape[0], 1])
X = np.concatenate((ones,X),axis = 1)
XT = X.T
XTX = XT.dot(X)
XTX_1 = np.linalg.inv(XTX)
XTy = XT.dot(y)
beta = XTX_1.dot(XTy)
print(beta)