机器学习一共有两条主线:
问题提出要求,模型给予解决。
线性回归:用线性模型来解决回归问题。
线性回归的重点:
机器学习的核心概念:在错误中学习。这需要两个步骤,首先知道偏离了多少,然后向减少偏差的方向调整权值。
\(\hat{y}\) 表示估计值,\(y\)表示实际值。
1.线性回归的假设函数
\[H(x) : \hat{y} = w^Tx_i + b \]2.线性回归的损失函数
线性回归的损失函数使用L2范数来度量偏差。
\[L(x) = \| \hat{y} - y \|_2^2 \]3.线性回归的优化方法表达式
\[\min\limits_{w,b} L(x) = \min\limits_{w,b} \| \hat{y} - y \|_2^2 \]这个公式的含义是,通过调节参数 \(w\) 和 \(b\) ,使得损失函数的表达式 \(\| \hat{y} - y \|_2^2\) 求得最小值。
4.范数
参考:
L1和L2 详解(范数、损失函数、正则化)
范数在欧几里得空间称为欧式距离。
机器学习中最常用的是L1,L2范数。
L1范数:
\[\|x\|_1 = \sum_{i=1}^n|x_i| \]L2范数:
\[\|x\|_2 = \sqrt{\sum_{i=1}^n x_i^2} \]L1,L2范数都可以做损失函数使用。
L1损失函数
也被称为最小绝对值偏差(LAD),绝对值损失函数(LAE)。
\[L = \sum_{i=1}^n |y - \hat{y}| \]L2损失函数
也被称为最小平方误差(LSE)。
\[L = \sum_{i=1}^n (y - \hat{y})^2 \]线性回归算法信息表
线性回归问题可分为三步解决:
这个不断调整参数使得损失值最小的过程就是线性回归的学习过程,通常称为训练模型。
Scikit-Learn涵盖了主流的机器学习算法,常用的几个库如下:
在使用算法之前,先构造一个简单的数据集:
import matplotlib.pyplot as plt import numpy as np # 生成数据集 x = np.linspace(-3, 3, 30) y = 2 * x + 1 # 数据集绘图 plt.scatter(x, y)
数据点分布图如下:
因为Scikit-Learn中线性回归算法的fit方法需要传入的x和y是两组矩阵,每一行为同一样本的信息,因此需要把刚刚生成的数据进行格式转换:
# 构造成矩阵形式 x = [[i] for i in x] # 训练集特征值 y = [[i] for i in y] # 训练集标签值 x_ = [[1], [2]] # 测试集特征值
Scikit-Learn对各类机器学习算法进行了良好封装,对于不同的模型算法,都只需要经过类似的简单三步就可以进行预测。
# 从sklearn中导入线性模型中的线性回归算法 from sklearn import linear_model model = linear_model.LinearRegression() # 训练线性回归模型 model.fit(x, y) # 进行预测 model.predict(x_)
预测结果:
array([[3.], [5.]])
同时可以通过model.coef_
和model.intercept_
分别查看斜率和截距:
(array([[2.]]), array([1.]))
线性回归算法确实正确地学习到了目标函数 \(y=2x+1\) 的相关参数。
线性回归算法的特点