1.过拟合与欠拟合
机器学习有时候变成了一个经验性的事情,使用同样的模型去学习数据集,初始效果恐怕不会好,经验丰富的工程师知道接下去该怎么做才能找到更好的模型而没经验的可能就束手无策。这是一些数学和统计出身的人对传统机器学习有不屑的一点,严谨的数学模型和方法不会因经验不同而得出不同结果。
从数据集角度,数据越多越可以选用复杂模型,这是因为数据集越大意味着数据越接近总体,而非样本,那么模型可以更注重拟合而非泛化,因为拟合了总体就得到了泛化。相反地,如果数据集小,只能选用简单模型。
如何评估模型当前有没有过于复杂或过于简单,Andrew介绍的方法是画出学习曲线,x轴从两个维度1.特征复杂度;2.训练集大小;分别画出训练集和交叉验证集的error。如果随着训练集增大和
收敛,但收敛至较大的error,这代表模型过于简单。如果随训练集增大
和
不收敛,那么就是使用的模型已经较复杂。
过拟合和欠拟合的应对,主要有三个方向,增大数据集,增加或减少特征,加强或减弱惩罚项。
2.precision和recall
在数据有偏斜的情况下,直接用准确率(accuracy)会有问题。以204001为例,我曾尝试使用机器学习方法判断,204001尾盘是否会跳水。当时遇到的问题是,虽然准确率达到70%左右,但由于当时尾盘跳水的概率足够高,可能还不如无脑等到尾盘再做正回购。Andrew举的例子是判断癌症,如果要比准确率的话,机器学习模型可能还不如直接预测无癌症,因为无癌症的是大多数,这就足以得到高的准确率。这时就需要precision(在做出positive预测的样本中有多大比例是true positive)和recall(在所有的true positive中预测正确的比例有多少)。由于P和R存在trade off所以,使用进行判断,当然,在有较高准确率的前提下才有比较F的必要。
ex5没什么难点
for i = 1:m X1=[ones(i, 1) X(1:i,:)]; Xval1=[ones(m1, 1) Xval]; y1=y(1:i); yval1=yval; [theta] = trainLinearReg(X1, y1, lambda); error_train(i)=1/(2*i)*((X1*theta)-y1)'*((X1*theta)-y1); error_val(i)=1/(2*m1)*((Xval1*theta)-yval1)'*((Xval1*theta)-yval1); end
3.SVM支持向量机
SVM与神经网络相比,数学理论基础更牢靠,传统机器学习往往以最小化训练误差为优化目标,然后在交叉验证集上验证模型,SVM不仅关注训练集误差,同样注重置信风险,为何线性可分时SVM也要找到
几何间隔最大的“分类线”,这是由于在线性可分的前提下几何间隔越大置信风险越小,SVM是为了最优化结构风险。
SVM的思路是把非线性可分的数据使用核函数映射到更高维空间,如果在更高维空间线性可分那么就可以找到一个分类边界。
实际上Coursera上的这门课对SVM讲的很不深入,对于神经网络等算法,理解算法各部分思路可以分别进行,而SVM如果不能理解其数学基础内涵你就完全无法理解为什么要这么做。
如果要学习SVM,我推荐推荐一个参考资料http://www.blogjava.net/zhenandaci/category/31868.html
4.K-Means聚类
聚类是很重要的非监督学习方法,数据集本身未作任何标记,所有样本都无差别,如何从数据集中寻找规律?从需求出发,我们如果要对样本进行分类,就以几何距离为标准衡量样本差别。给定分类数量K和初始的K个分类中心,重复两个迭代过程,1.将每个样本归于K个分类中心距离最近的那一类;2.将每个分类的所有样本集合的几何中心作为新的K个分类中心。
K如何选取,是个问题,这主要取决于聚类的用途,例如要区分活跃用户和非活跃用户,那么只需K=2,如果要制作S,M,L三种尺寸衣服,只需K=3。
ex7
findClosestCentroids.m
distance = zeros(size(X,1),K); for i = 1:K temp=repmat(centroids(i,:),size(X,1),1); distance(:,i)=sum((X-temp).^2,2); end [~,idx]=min(distance,[],2);
Note:使用repmat是为了复制分类中心,得以使用向量操作
5.PCA
PCA是一个很好用的降维算法。如果特征中存在某些较强的线性相关关系,PCA可以有效的去除冗余数据,例如,此时,如果去掉
任意一个,都不会减少数据集的特征,PCA实质上就是帮我们从多元事物中找出主要影响因素。但是使用PCA基本上就意味着数据信息的丢失,更麻烦的是总的数据信息丢失了1%,你不能确定噪音丢失了多少,含特征的数据丢失了多少。我认为,如果在选用特征时,避免相关性高的特征被同时选用对后续分析也许更直接。
另外,PCA本质上以数据的方差大小来衡量信息量,如果不同特征的数字比例差距较大的PCA倾向于先挑选方差大的。所以PCA只是单单从统计上帮我们找到主要因素,但是跟解决问题是否同一方向,PCA并不能保证。
文章评论