“A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.”
程序根据任务T和性能度量P对经验E进行学习,它在以P衡量的任务T中,性能会随着E增加。
监督学习和非监督学习(supervise learning & unsupervise learning)
vector表示向量,通常都是列向量,n×1的矩阵,如
x = [ x 1 x 2 ⋮ x n ] x=\begin{bmatrix} x_1\\ x_2\\ \vdots \\ x_n \end{bmatrix} x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤
在使用梯度下降算法时需要使用数据缩放,在使用解方程的方法解决线性回归问题的时候不需要使用数据缩放
其实是一种正则化,使得每个特征的取值范围不至于相差过大。
x ^ = x − μ s \hat{x}=\frac{x-\mu}{s} x^=sx−μ
其中, μ \mu μ是平均值, s s s是 最大值-最小值
线性回归的常规形式是 y = θ 0 x 0 + θ 1 x 1 + ⋯ + θ n x n y=\theta_0 x_0+\theta_1x_1+\dots+\theta_n x_n y=θ0x0+θ1x1+⋯+θnxn,这其中的 x n x_n xn可以换成其他变量的非线性组合,比如 x = x 1 ⋅ x 2 , x = x 1 ⋅ x 2 , x = x 2 x=x^1 \cdot x^2,x=\sqrt{x^1\cdot x^2},x=x^2 x=x1⋅x2,x=x1⋅x2,x=x2等等。但是要记得对变量进行scaling,方法仍然是 x ^ = x − μ s \hat{x}=\frac{x-\mu}{s} x^=sx−μ
除了最常见的梯度下降(gradient descend)之外,还有不少好的算法:
(这几种优化算法的数学推导和实现较为困难,但是不需要详细了解也不妨碍使用,用就行了不需要自己去实现)
这种方法的基本思想是:先将某一类作为正例,剩下的类别统统作为反例,这样就得到一个二分类的情景,以此训练一个分类器;然后将另一个类作为正例,剩下的都作为反例,以此类推,一共要训练m个分类器(m为所有的类别数)
一共有m=3个分类:
分别将class1、class2、class3作为正例,剩下的作为反例,训练3个分类器
使用时,将测试样本分别输入3个分类器,选取使得分类器结果为正例的概率最大的分类结果为该测试样本的分类。
过拟合:对训练集拟合的非常好,但是对新数据的预测不好,无法泛化到新的数据集中。
过拟合的可能原因:
解决办法:
梯度是一个关于权重 θ \theta θ的函数,我们在进行梯度下降的时候,希望能知道梯度是否真的在下降,之前我们采用可视化代价函数值的方式,但是代价函数值在下降并不意味着梯度真的在下降,因此有必要将梯度可视化。
采用近似的方法:
d d θ J ( θ ) ≈ J ( θ + ϵ ) − J ( θ − ϵ ) 2 ϵ \frac{d}{d\theta}J(\theta)\approx \frac{J(\theta+\epsilon)-J(\theta - \epsilon)}{2\epsilon} dθdJ(θ)≈2ϵJ(θ+ϵ)−J(θ−ϵ)
通常 ϵ \epsilon ϵ取 1 0 − 2 − 1 0 − 4 10^{-2} - 10^{-4} 10−2−10−4量级的数。
一般来说,训练集:测试集=7:3
最好先进行随机排序,保持训练集的数据与测试集的数据相差不至于太大
另一种划分方法:
训练集:验证集:测试集=6:2:2
为什么要加入验证集:假如我们有多个模型,需要选择一个,我们在训练集训练之后如果直接用测试集来测,那么其实这之中多了一个参数:模型的不同。别忘了我们的测试集是为了检测最终模型的泛化误差的,不应该让模型见过多余的知识(其他参数)。所以我们要引入验证集,用来选择其中最合适的模型/参数集。通常,验证集的误差要比测试集的误差要 小(因为验证集多了一个参数:模型的不同)
偏差(bias):是指模型的期望值值与真实值之间的差,描述一个模型的拟合能力。偏差通常是由欠拟合造成的。
方差(variance):是指模型的期望值与预测值之间的差的平方,描述一个模型的稳定性。方差通常是由过拟合造成的。
如图,如果训练误差高,验证集误差高->偏差大,欠拟合
训练误差低,验证集误差高->方差大,过拟合
与正则化的关系:
正则项 λ \lambda λ越大,在训练集上拟合的越差,偏差就越高,但是方差越小。
正则项 λ \lambda λ越小,在训练集上拟合的越好,偏差就越低,但是方差越大。
大致如下图:
一个很重要的点是要将错误率进行量化,也就是要算出当前的特征以及参数下这个模型的错误率是多少,进行调整之后的错误率又是多少,这样能很直观的知道对模型的改进是否有用。
$$
大量的数据集可以改善过拟合(防止过拟合),但是小的数据集影响不了过拟合。 大量的数据集对欠拟合问题没有帮助,小个数据集对欠拟合问题也没有帮助。
不一定,虽然一般情况下是以0.5作为阈值,但是这不是硬性规定的,可以按照对精确率(precision)和召回率(recall)的特殊要求进行调整。影响效果如下:当阈值>0.5时,精确率提高,但是召回率下降;当阈值<0.5时,准确率下降,但是召回率提高。
不是同一个东西,精确率是指在预测为1的例子中实际上为1的比值有多少,准确率是指所有的预测中预测正确的比值是多少,他们的公式如下:
p r e c i s i o n = t r u e    p o s i t i v e t r u e    p o s i t i v e + f a l s e    p o s i t i v e precision=\frac{true \; positive}{true \; positive + false \; positive} precision=truepositive+falsepositivetruepositive
a c c u r a c y = t r u e    p o s i t i v e + t r u e    n e g a t i v e a l l    s a m p l e s accuracy = \frac{true \; positive + true \; negative}{all \; samples} accuracy=allsamplestruepositive+truenegative