线性回归算法梳理1
- 机器学习的一些概念
有监督学习、无监督学习
根据数据是否拥有标记信息,学习任务可以分为有监督学习和无监督学习。
有监督学习:用已知某种或某些特性的样本作为训练集,以建立一个数学模型,再用已建立的模型来预测未知样本,此种方法称为有监督学习。
分类(离散)和回归(连续)属有监督学习;
无监督学习:根据类别样本(没有被标记)的训练样本解决模型识别中的各种问题。
聚类属无监督学习
泛化能力
学得模型应用于新样本的能力称为泛化能力
训练样本越多,得到关于“分布”D的信息越多,越有可能通过学习获得具有强泛化能力的模型。
过拟合欠拟合
过拟合:因为学习能力太好,把训练样本所包含的不太一般的特点当成所有潜在样本都会具有的一般性质,导致泛化性能下降的情况。
解决方法:①留出法——将数据集分成互斥的训练集和测试集
②交叉验证法——将数据集D分为k个大小相似的互斥子集,然后,每次用k-1个并集作为训练集,余下的那个子集作为测试集,这样,可以得到k组训练集和测试集,从而进行k次的训练和测试,最终返回K个测试结果的均值。
③ 自助法——在m个数据集中采样组成训练集,数据集\训练集用作测试集的方法。适用数据集较小,难以区分训练集/测试集的情况
欠拟合:因为学习能力太差,训练样本的一般性质尚未学好的情况。
解决方法:①在决策树学习中拓展分支
②在神经网络中增加轮数等
方差-偏差
方差:度量同样大小的训练集的变动所导致的学习性能的变化
偏差:度量了学习算法的期望预测与真实结果的偏离程度
-
线性回归的原理
线性回归:两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
表达形式为
b为误差服从均值为0的正态分布。 -
线性回归损失函数、代价函数、目标函数
度量拟合程度:
损失函数:一个样本的真实值与预测值之间的差异
代价函数:整个训练集上所有样本误差的平均
目标函数:防止过拟合,对过拟合的回归函数进行正则化的函数j(f),使经验风险和结构风险达到平衡的函数 -
优化方法
梯度下降法:代价函数对各个参数求偏导来迭代参数的方法,分为随机梯度下降法和批量梯度下降法。
假设h(x)是要拟合的函数,J(theta)为损失函数,theta是参数,迭代求解的值,theta求解,h(theta)也能得解。其中m是训练集的样本个数,n是特征的个数。
1)批量梯度下降法(Batch Gradient Descent,BGD)
(1)将J(theta)对theta求偏导,得到每个theta对应的的梯度:
(2)由于是要最小化风险函数,所以按每个参数theta的梯度负方向,来更新每个theta:
2)随机梯度下降(Stochastic Gradient Descent,SGD)
(1)上面的风险函数可以写成如下这种形式,损失函数对应的是训练集中每个样本的粒度,而上面批量梯度下降对应的是所有的训练样本:
(2)每个样本的损失函数,对theta求偏导得到对应梯度,来更新theta:
牛顿法:使用f(x)的泰勒级数的前几项来寻找f(x)=0时的根
选择一个接近函数 f (x)零点的 x0,计算相应的 f (x0) 和切线斜率f ’ (x0)(这里f ’ 表示函数 f 的导数)。然后我们计算穿过点(x0, f (x0)) 并且斜率为f '(x0)的直线和 x 轴的交点的x坐标,也就是求如下方程的解:
我们将新求得的点的 x 坐标命名为x1,通常x1会比x0更接近方程f (x) = 0的解。因此我们现在可以利用x1开始下一轮迭代。迭代公式可化简为如下所示:
3)拟牛顿法(Quasi-Newton Methods):通过测量每一步迭代时目标函数的梯度,构造一个目标模型使之具有收敛性。
构造目标函数在当前迭代xk的二次模型:
取其最优解作为搜索方向,并且得到新的迭代点:
假设得到一个新的迭代xk+1,并得到一个新的二次模型:
要求
得割线方程
- 线性回归的评估指标
①皮尔逊相关系数:衡量线性相关强弱的指标
当相关系数越接近1或者-1时,表示其相关性越高。
缺点:受样本量影响较大
②均方根误差RMSE:
③平均绝对误差MAE - sklearn参数详解
官方文档:https://scikit-learn.org/stable/
fit函数用于拟合输入输出数据,调用形式为model.fit(X,y, sample_weight=None):
X : X为训练向量;
y : y为相对于X的目标向量;
sample_weight : 分配给各个样本的权重数组,一般不需要使用,可省略。
调用sklearn.linear_model.LinearRegression()所需参数:
fit_intercept : 布尔型参数,表示是否计算该模型截距。可选参数。
normalize : 布尔型参数,若为True,则X在回归前进行归一化。可选参数。默认值为False。
copy_X : 布尔型参数,若为True,则X将被复制;否则将被覆盖。 可选参数。默认值为True。
n_jobs : 整型参数,表示用于计算的作业数量;若为-1,则用所有的CPU。可选参数。默认值为1。