有监督、无监督、泛化能力、过拟合和欠拟合(以及各自解决方法)、方差和偏差、交叉验证
监督学习,就是常说的分类。通过已有的训练样本(即已知数据以及对应的标签)去训练一个最佳模型,再利用这个模型将未知样本(没有标签的数据)的输入映射为输出(有标签了),对输出进行判断从而实现分类目的。例如,父母告诉小孩这是鸟和猫,我们所见的鸟和猫就是已知的输入数据,父母的认知(这是鸟还是猫)就是相应的输出。后来见识多了,我们脑子就会训练出一个泛化模型,会抓住一些特征总结出一些规律,当再看见其他类的鸟或者猫时,我们也能对他们进行分类。
无监督学习,与监督学习不同,样本数据类别未知(输入数据没有标签),需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。通俗点讲就是实际应用中,不少情况下无法预先知道样本的标签,也就是说没有训练样本对应的类别,因而只能从原先没有样本标签的样本集中学习分类器设计。无监督学习里典型的例子就是聚类了,聚类的目的在于把相似的东西聚在一起,而我们并不关心这一类是什么。
泛化能力,指用来表征学习模型对于未知数据的预测能力。例如上面提到的小孩脑子里的泛化模型,每一个小孩都有不同的泛化模型,对应的泛化能力是不一样的。
当一个模型过于复杂后,它可以很好的处理训练数据的每一个数据,甚至包括其中的随机噪点,而没有总结训练数据中趋势,以至于模型在新的数据上表现很差。
解决方法:
1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
2)特征值过多也可能会导致过拟合但不一定。特征之间要分析相关性,若某两个特征是有相关性的,很容易导致过拟合。
3)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。
4)采用正则化方法。
指模型过于简单或训练样本做的不够,以至于模型没有很好地捕捉到数据特征,不能够很好地拟合数据。
解决方法:
1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。
2)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
Bias:误差,对象是单个模型,期望输出与真实标记的差别(可以解释为模型对本训练集的拟合程度)
Variance:方差,对象是多个模型(这里更好的解释是换同样规模的训练集,模型的拟合程度怎么样;也可以说方差是刻画数据扰动对模型的影响,描述的是训练结果的分散程度)
从同一个数据集中,用科学的采样方法得到几个不同的子训练集,用这些训练集训练得到的模型往往并不相同。
交叉验证(cross-validation)是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先用训练集对分类器进行训练,在利用验证集来测试训练得到的模型,以此来做为评价分类器的性能指标。
常见的交叉验证方法如下:
1).Hold-Out Method
将原始数据随机分为两组,一组做为训练集,一组做为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此Hold-OutMethod下分类器的性能指标.此种方法的好处的处理简单,只需随机把原始数据分为两组即可,其实严格意义来说Hold-Out Method并不能算是CV,因为这种方法没有达到交叉的思想,由于是随机的将原始数据分组,所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性.
2).K-fold Cross Validation(记为K-CV)
将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标.K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2.K-CV可以有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性.
3).Leave-One-Out Cross Validation(记为LOO-CV)
如果设原始数据有N个样本,那么LOO-CV就是N-CV,即每个样本单独作为验证集,其余的N-1个样本作为训练集,所以LOO-CV会得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为此下LOO-CV分类器的性能指标.相比于前面的K-CV,LOO-CV有两个明显的优点:
①每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠。
②实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
转自:https://www.cnblogs.com/sddai/p/5696834.html
首先解释什么是回归?例如有一个函数,我们只要往这个函数传一些参数作为输入,就能得到一个结果作为输出。简单来说输出的结果是个连续的值就是回归,如果不是连续值而是个离散值那就叫分类。
(线性不用解释了吧…)
给定一个数据集:D={(X1,Y1),(X2,Y2),…,(Xm,Ym),}
其中 Xi=(Xi1;Xi1;…;Xid)
“线性回归”(linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记。
所以线性回归可以被看做是样本点的最佳拟合直线。
梯度下降法(随机梯度下降法和批量梯度下降法)、牛顿法、拟牛顿法
梯度下降法是最早最简单,也是最为常用的最优化方法。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是最速下降法。由xn+1=xn− α∗f′(xn)可知,梯度下降算法是用平面拟合函数的局部曲面。
最速下降法越接近目标值,步长越小,前进越慢。所以在接近最优解的区域收敛速度明显变慢,利用梯度下降法求解需要很多次的迭代。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。(这里不做介绍)
对于牛顿法求极值点,考虑以下泰勒展开:
f(x+Δx)=f(x)+f′(x)Δx+1/2∗f′′(x)∗Δx2
同样我们希望左式最小,那么将左式看成是Δx的函数,当取合适的Δx值时,左边的式子达到极小值,此时导数为0。因此对上式进行求导数,得到公式: 0=f′(x)+f′′(x)∗Δx
此时可得到公式: xn+1=xn−f′(xn)/f′′(xn)
所以说牛顿下降法是用二次曲面来拟合函数的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
在上面讨论的是2维情况,高维情况的牛顿迭代公式是:
其中H是hessian矩阵,定义为:
高维情况也可以用牛顿迭代求解,但是Hessian矩阵引入的复杂性,使得牛顿迭代求解的难度增加,解决这个问题的办法是拟牛顿法(Quasi-Newton methond)。
拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。
主要过程是先推导出海塞矩阵需要满足的条件,即拟牛顿条件(也可以称为拟牛顿方程)。然后我们构造一个满足拟牛顿条件的近似矩阵来代替原来的海塞矩阵。
SSE(误差平方和)、MSE(均方误差)、RMSE(均方根误差)、MAE(平均绝对误差)、R Squared(R方)
sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)
参数 | 说明 |
---|---|
fit_intercept | 布尔型,默认为True,若参数值为True时,代表训练模型需要加一个截距项;若参数为False时,代表模型无需加截距项(即直线过原点)。 |
normalize | 布尔型,默认为False,若fit_intercept参数设置False时,normalize参数无需设置;若normalize设置为True时,则输入的样本数据将标准化。 |
copy_X | 布尔型,默认为true,即是否对X复制,如果选择false,则直接对原数据进行覆盖。(即经过中心化,标准化后,是否把新数据覆盖到原数据上) |
n_jobs | 整型, 默认为1,计算时设置的任务个数(number of jobs)。如果选择-1则代表使用所有的CPU。这一参数的对于目标个数>1(n_targets>1)且足够大规模的问题有加速作用。 |