上周一周时间完成了Coursera的Machine Learning(Stanford Andrew Ng)原本11周schedule的课程,满分通过,整个课程偏向应用,省略了大多数数学推导,难度不大,只要有高等数学和线性代数的基础,几乎没有障碍。
最近写几篇笔记记录下自己的思考和一些整理。
“A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.”
如果一个执行任务T的程序的性能P在获得经验E之后得到提高,那么就说这个程序“学习”了。
名词:
数据集:经验E以数据集形式存在,数据集区分为标注过的和未标注过的
特征:数据集的数据以特征为主,例如身高,体重,胸围。标签过的数据会标注结果例如男或女
拟合\学习:使用某种模型以特征为输入,以结果为输出,调整模型参数使得模型在所有特征输入的输出中趋近真实结果
Cost Function:用以衡量模型在特定参数时的拟合偏差大小,一般译为成本函数
1.线性回归和逻辑回归的内涵
广义线性回归使用多项式模型,这样的函数拟合训练集即使用多项式拟合经验E,通过最小化cost function即最优化performance使得多项式的参数
得到优化,从而提升模型对于新的输入的拟合能力。
逻辑回归使用sigmoid函数模型,拟合训练集即使用多项式和sigmoid函数拟合经验E,通过最小化cost function即最优化performance P使得多项式参数的Theta得到优化,从而提升模型对于新的输入的拟合能力。
线性回归和逻辑回归的区别在于拟合函数,线性回归是从连续量映射到连续量,逻辑回归是从连续量映射到离散量,选用什么模型在于数据集中的特性能够用什么模型进行拟合。
2.Cost Function的选取
Cost Function用于衡量性能P,非常关键,错误选取cost function将使得模型偏离预期,优化后的结果也无意义。线性回归和逻辑回归的cost function均通过首先假设且
服从正态分布,由
,
求
的极大似然估计得来的优化目标函数。直观理解线性回归的Cost Function就是
与实际值在
轴上的偏差
3.sigmoid函数
sigmoid函数是为了将连续量映射到离散量{0,1},虽然sigmoid函数值取值范围是(0,1),但可以使用阈值进行0,1判定。逻辑回归的Cost Function使用log可以直观理解为如果
判定与
相悖,则施加一个很大的惩罚值,如果
判定与
相符则cost为0
4.梯度下降
梯度下降是简单的优化算法,已知cost function和训练集时需要使用优化算法找到优化的使cost function最小。cost function对
求偏导,将
减去
倍的偏导进行迭代,直到收敛,“梯度”即一介偏导,“下降”即沿着切线下降。梯度下降在凸函数中应用是可以证明找到最小值的,不过梯度下降算法有一个参数,
。
取值过小会导致步长太小,收敛极慢,
过大,可能导致迭代过程中步子太大直接越过最小值导致算法不收敛。梯度下降值得注意的一点是所有参数
必须同时一次性迭代,不能先迭代
再迭代
,因为首先迭代的
将影响到其后
偏导的计算。
5.梯度下降的验证
在梯度下降中如何取值合适的使算法收敛。可以画出
轴为cost function值,
轴为迭代次数的图用于验证梯度下降算法工作正常。工作正常的梯度下降cost function每次迭代都将减小,可以尝试不同的
找到合适的收敛曲线。在验证后,正式运行中应关闭验证,因为每次迭代时均计算cost function的开销极大。
6.数据标准化
不同的取值范围可能差别极大,这时需要对数据进行标准化(
)使其处于同一量级。这是因为梯度下降中
对于所有参数
都是一样的取值,如果
取值差距过大,可能存在
上步长过大越过其优化值,而同时在
上步长过小的情况,这会导致梯度下降过程中较无效的迭代从而导致收敛速度变慢,因此数据标准化可以显著提高梯度下降的效率。值得注意的是,如果使用了数据标准化,在测试集或实际使用时也需要进行标准化的步骤之后再输入模型。
7.过拟合和欠拟合
过拟合的内涵是,模型足够复杂,可以几乎完美的拟合训练集(60%数据)的所有真实值,但由于对于训练集过度的拟合,导致模型过于特殊化(specialized),欠缺泛化(generalization)即无法揭示数据集中的规律,在验证集(20%的数据)中反而误差较大。
欠拟合的内涵是,模型过于简单,在训练集中都存在明显的偏差,虽然泛化能力较强,但由于初始模型根本不具备拟合训练集数据的能力,导致其也无法揭示数据集中的规律,在验证集中误差同样较大。
在Andrew的讲解中,他使用high bias和high variance来解释这两个概念,实际上这里的偏差bias和方差variance是指在不同数据集上
的均值的分布,即欠拟合模型在任何数据集上均有较高的偏差,相对来说方差较低,过拟合模型在一些数据集(训练集)中表现优秀,但一些数据集(验证集和测试集)中表现糟糕,表现为方差较大而偏差略小。
8.正则化
正则化是一种解决过拟合问题的方法,在cost function中加入惩罚项,。这么做能够减少过拟合因为
变成了cost function的一部分,在最小化cost function时能够自动取得复杂模型和拟合偏差之间的trade off。当然,由于正则化同样引入了一个参数
,这要求正确选择此参数,如果过小,等于没有正则化项,模型同样会陷入过拟合;如果过大,则施加的惩罚过大,将导致cost function中拟合偏差不再是主要因素,正则化项变为主要因素,这时最小化cost function将优先最小化惩罚项从而得到某个简单的欠拟合模型。正则化不对
生效,因为
是模型中的常数,与特征项无关,与模型复杂度无关,因此忽略
。
9.Normal Equation
Normal Equation是从线性代数出发直接求解cost function最小值,与梯度下降相比,Normal Equation需要矩阵可逆,在矩阵较小时Normal Equation速度较快,但在矩阵较大时,求逆的高时间复杂度缺点凸显。
Andrew用几节课就讲清楚了机器学习的一般过程,选择模型,建立有效的评价标准cost function,使用训练集进行拟合优化得到模型参数,使用交叉验证集进行校验,最后就可以在测试集上使用机器学习系统。
课程前几个ex很简单,主要是向量化实现。如果不能一下想到向量化实现,可以先用循环遍历实现再简化。
编程作业
%linear regression cost function J=1/(2*m)*((X*theta)-y)'*((X*theta)-y); %linear regression gradient descent theta=theta-(alpha/m*((X*theta)-y)'*X)'; %sigmoid g = 1./(1+exp(-z)); %logistic regression cost function J=1/m*(sum(-y.*log(sigmoid(X*theta))-(1-y).*(log(1-sigmoid(X*theta))))); %logistic regression gradient descent grad=1./m*((sigmoid(X*theta)-y)'*X); %regularization theta1=theta; theta1(1)=0; J=1/m*(sum(-y.*log(sigmoid(X*theta))-(1-y).*(log(1-sigmoid(X*theta)))))+lambda/2/m*(theta1'*theta1); grad=(1./m*(sigmoid(X*theta)-y)'*X)' + lambda/m.*theta1;
文章评论