从统计看机器学习常见算法
最近工作之余在研读一本很有趣的书:Introduction to statstics learning. 这本书是几位数学系的老师编写的,从统计的角度来解析常见的几种机器学习算法,既然是introduction,内容也是入门级别的。与计算机系的书籍比起来,这本书会告诉读者不同算法之间的联系,而这种联系本质上是由损失函数决定的。其实当你看完后发现名目繁多的算法其实不过是血脉相承的一家人,就会发现太好玩啦~
书籍相关连接:
视频网址:http://www.r-bloggers.com/in-depth-introduction-to-machine-learning-in-15-hours-of-expert-videos/
学习路线: least square, trade off between bias and viriance, trade off between accuarcy and model interpretability => linear regression ,KNN (basic regression)=>logistic regression ,linear discriminant classifer,Quadratic discriminant cliassfier (basic classification) =>Cross-Validation,boostrap(Resample,enlarge data) => predictor selection, ridge,lasso,principle component regression(decrease dimension)=>polynormial regression,step function,regression spline(varialize the fit method)=>decision tree, and improved process(simulate the real human decison) => SVM=>unsupervised learning
接下来,我会针对每一种方法,给出该方法的基本原理,优点,缺点,适用场景,参数确定,扩展方案,个人评价,工程应用复杂度(由于我并不了解优化的算法,所以该部分空缺,但是这是很重要的一个侧写) 由于本博客主要是为了个人总结,并不是为了发布给大家看,所以本文不会有任何公式编辑,因为太麻烦。上述学习路线是根据Model的复杂度从低到高来的,同时model的可解释性也在逐渐降低。
least square: 针对每一种observation的predicor,拟合所得的response数值与观测的response数值的欧几里得距离平方和mse,一般用来评估不同Model的效果,也可以作为单个model的目标函数。在评估model效果的时候,类似的criteria 还有R^2,F等。其中mse可以分解为bias variance,前者指模型的系统偏差,后者指当应用于不同数据集时model的变化幅度。一般来说灵活的Model具有较低的系统偏差,但是具有较高的方差。
linear regression: 假设response和多个predicor之间有线性关系,同一个总体的数据集,不同样本会导致Model参数来回变化,但是参数的均值会是真正关系函数的参数。优点:简单。缺点:假设条件太强。适用场景:连续性response,predictor中的离散值可以dummy为多个变量。参数确定:没有tuning参数。扩展方案:首先要观察predicor之间是否存在相关性,如果有相关性,那么适用后文的predictor selection效果会更好点;可以对Predictor做处理形成新的Predictor,而这种方式可以扩展成polynormial,other flexible vairable, 说不定真的可以找到一种变换,就是真实的关系呢~
KNN: 假设距离相近的点具有相同的性质,这个无需提前训练model,基于局部相似性,只需要拿需要预测的点和测试集进行距离判断即可。优点:简单。缺点:维度高时如果要选择一定比例的点,那么在每个维度上的选择范围会迅速扩大,丢失Local属性。应用场景:由于无需Model,应用场景十分广泛,分类(class-donimant),回归(mean response)。参数确定: k依具体情况而定。复杂度:如果训练集太多,那么要做很多个距离运算和排序呢。扩展方案:model没什么要说的,工程上对距离运算和排序肯定有提升手段。
logistic regression:假设response是二分类,preditor和概率存在一定的线性关系,但是考虑到概率值域,所以使用logistic函数进行转换,目标使likelihood函数最大化,训练处线性关系的参数。优点:简单。缺点:不太稳定,不太好适用于多分类问题;由于中间的转换关系,logistic数值虽然和概率在一个值域,但是已经不是概率了,而且阈值分界线并没有特定的规则确定。应用场景:分类,对于分类问题,不能通过简单的yummy变换,因为yummy变换具有距离值属性,然而我们并不能说一个分类和另一个分类的距离长短。参数确定:分界阈值依具体情况而定。复杂度:额 还行吧。扩展方案:其实可以使用其他basic function 来替换线性关系函数,不过此时就不一定是线性回归了。
Linear discriminant Analysis: 假设一个predictor, 把它指定到真实的response时,会发生什么: 条件概率最大,类内距离小,类间距离大,本书采用的是基于bayes的LDA,根据指定对类概率最大,假设predictor在某个类中的数值服从正态分布,且在所有类中的方差相同,那么根据bayes假设,可以获取一个判别函数,并通过数据集来估计分布的统计量。优点:可以处理多分类;缺点:这里的强假设可以看出bayes decision boundary是线性的,对于非线性的数据使用QDA更好。应用场景: 分类。参数确定:无;扩展方案:可以去掉方差相等假设,这样就转化为了QLA;另外可以用最小风险替换最小错误率优化。
QDA:如上所述,只是bayes decision boundary是非线性的,关于bayes decision boundary, 中午资料可以参考 http://wenku.baidu.com/view/ac50412c453610661ed9f470.html
resample methods: 可以通过该方法train 和test error的差异。最简单的方法是把原始数据分为两类,然而这样做使得sse on the test data 的方差特别高,而且浪费了很多数据。Leave-one-out cross-validation (LOOCV) k-fold CV e bootstrap。这几种方法,可以通过训练集数量,测试集数量,测试之间的model关联度来分析优劣。
predictor selection: 问题:当数据集不是很大,而Predictor很大的时候,很容易导致过拟合,因为寻找方法来缩减或者降低Predictor数量会缓解该问题。stepwise selection:根据criteria的变化,贪心的选择最能降低错误率的predictor,直到一个结束条件。考虑到mse r^2肯定是predictor越多,该两个creteria越小,所以这两个creteria是不能作为selection的目标,可以考虑添加predicotr数目的惩罚算子,改装后的creteria.
Ridge Regression: 添加平方的惩罚算子。使用bias -variance来提高效果;然而即使使用该方法,最后的model里面仍然是所有的predictor。 所以有了lasso
Lasso:添加绝对值的惩罚算子。
dimmension reduce method: 我们将原始predictor线性组合获得新的predictor,不过有更少的维度。例如PCR,第一个主分量使得原始数据和该分量的距离最小;接下来选取垂直上一个分量的新分量,使得距离最小,如此直到结束条件。在这个过程中,分量的组合和response 并无关系(分量系数的确定只和ovservation的数据分布有关),是一种unsuperwise的方式。这个方法可以看做是ridge算法的连续版本。
partial least squares:在确定主分量的时候,分量系数不是寻找距离最小,而是就像simple linear regression 一样,根据mse最小获取第一个主分量。上述几种降维的方法可以缓解 multicollinearity。
polynomial fit: 假设predictor可以通过多项式的方式来预测response. 考虑到该Model应用于全局数据,而将Predictor划分为几个区域分别使用不同的basic function 拟合听起来是个不错的注意,实际上这个trick和数值分析中的样条是同样的道理。考虑到人为划分区域,所以如果在区域边界处添加连续和平滑的constraint ,看起来会更自然点。优点:伸缩性较强,用于基本学习方法的提升;缺点:参数确定。参数确定:这里有两类参数需要确定,一个是分区大小,一个是分区边界位置。目前软件中一般是按照平均一致的方式放置边界,当然也可以在你认为变化比较大的放置边界。至于分区大小,文中说要试验很多次,选择sme最小的那个。。。扩展方案:这个已经属于提升方案了。。
Generalized additive models (GAMs):在每个观察点拟合一个函数,然后对函数进行线性组合,具有可加性。优点:可以进行线性和非线性拟合(分类),而且具有一定的解释性,例如一个点对整体的影响。上述提升方法实际上并不是Model的方法,而是一种MOdel的框架。应用场景:。。
Regression Trees:通过选取predictor的index和分割点 使得rss最小。考虑到分割层越多,那么mse越小,所以树结构会变得十分庞大,在目标函数中添加节点个数作为惩罚算子会达到剪枝的目的。
classfication trees: 建立model的方法同上,只是目标函数不能是mse,因为无法衡量两个类型之间的距离,考虑到按照错误率并不敏感(??),所以使用gini or entropy作为critera。决策树和上面的linear method在原理上有很大的不同,决策树在原理和决策过程中和人类的思考方式很像,然而在实际运用中,决策树的效果并不是太好,而且决策树不具有鲁棒性。
bagging:原理如同上文的boostrap,通过重复采样,建立多个Model,并在model之间均和。
Random Forests:尽管在bagging中存在数据差异,但是实际上基于不同数据简历的model的树的上层基本都一样,换句话说不同决策树之间有着较高的相关性。而随机森林则从另一个角度出发, 它的model不同之处不是数据的不同,而是选取的predictor不一样。基于经验,model的Predictor的自己个数大约为sqart(q)是比较合适的。很难想象把。。。
boost:通过在多重数据集上生成简单的树桩结构,然后对树桩进行组合学习,而获得不错的结果。参数确定:1 树桩深度,一般1比较合适;2 model数量,3 学习速度。http://www.cnblogs.com/LeftNotEasy/archive/2011/01/02/machine-learning-boosting-and-gradient-boosting.html
Support Vector Machines:在数据空间中寻找一个超平面,使得分开的类型间距离最大。support vector classifier 的公式和 lasso的公式很像;在效果上和regression的表现很像;实际上SVM的unique 并不是因为核函数可以进行非线性分析, 因为对于logistics regreesion也可以代入非线性函数,只是历来习惯如此。