机器学习笔记
机器学习分作监督学习和非监督学习:其中,
监督学习是有预测结果的,最常见的算法是分类算法
非监督学习是无预测结果的,最常见的算法是聚类算法
梯度下降算法是用于得到极值点的方法,在线性回归中,梯度下降算法可以应用于回归过程,得到最小二乘法的结果。
线性回归算法试图用线性方程来回归数据集,回归时,一个或多个outlier的存在会把回归方程畸形化,所以在做分类时,用线性回归不是一个好主意,而做logistic回归的时候,可以将输出从连续值转换为0或者1的分类值,适用于分类算法。logistic回归的时候,ML算法同样会运用梯度上升的算法得到极大值点时候的theta值,从而确定分类关系。
牛顿梯度算法是梯度下降算法的优化,可以快速算法过程,在数据维度为vector的时候,每一次逼近都需要计算一次hessian矩阵的逆(二次求导矩阵),因此当维度过大的时候计算量会很大。
线性回归容易欠拟合,如果当选择维度过多的时候又容易出现过拟合的情况。过拟合一般是分类算法最大的问题,因此,有很多解决算法出现,比如对于决策树算法,RF(随机森林)是一个避免过拟合的优化。
discriminative model(判别式模型)包括logistic回归,SVM等,是将数据集分类的模型,而另一类generative model(产生式模型)的思想是,先分别取各类数据集,建立模型来总结各类数据,然后当新的数据出现的时候,分析他更类似于哪种模型来做区分,常见的基本都属于这类,包括高斯模型(建立多维高斯模型来描述各类模型),决策树模型,主题模型,高斯模型等等。
混合高斯模型可以推出logistic回归的sigmoid分布,将高斯的概率值设为0~1,Pr(y=1|x)的值在高斯x轴上呈现sigmoid函数形状(s型)。
产生式模型需要对于数据有清晰的认识,对于高斯分布,如果建立了泊松分布或者是伯努利分布,那么在模型的判别上会造成准确性的丧失,而判别模型则不需要考虑数据模型的分布。
判别模型需要大量的数据支撑从而得到较为正确的分类器,而产生式模型没有这个限制。
对于垃圾邮件甄别算法,离散型词袋可以用朴素贝叶斯算法进行分类,而对于因为分类从未出现的词导致概率为0/0,可以使用laplace平滑算法(即给所有的计数都加1)的方式来解决。
甄别方法有两种:
1.一个词是否出现为值,0和1
2.记录每个词出现的概率,用多项分布的模型,将所有词的概率相乘(较优于第一种)
logistic回归的核H()为e^(theta*T),所以指数型的核都会得到线性的分类结果,而高斯分布也是指数型的核,为了得到非指数型的核,可以考虑用神经网络的方法,即用多个核形成hidden layer,然后再用一个输出核将hidden layer的输出作为输入,得到最终输出。
神经网络算法不如SVM常用,而SVM也是现在最常用的算法,神经网络算法的最大问题是取得最优值的难度太大,如果是Logistic回归算法,用梯度下降算法或者ML算法可以得到一个全局的最优解,对于有隐藏层的神经网络来说,会有多个最优解的结果。
神经网络得到最优解的算法是反向传播(BP)算法
SVM的核是将数据集投射到高维空间中,然后SVM算法在线性可分的假设下将数据分类,当数据不是线性可分的时候,有软分类算法(L1型SVM算法--加入补偿系数;L2型SVM算法--SMO等)。
用于SMO取得最佳值的算法是坐标上升算法,即,在若干未知系数求最大值的时候,改变某一个系数,固定其他系数不变,每次迭代取得最佳值。
坐标上升算法相比于牛顿算法等需要迭代更多次数,但是每次迭代的计算量有可能很cheap,对于SMO算法的最优值取得有很好的效果。
识别ocr或者图像的时候,比如邮编,传统的算法中神经网络算法的性能是最好的,但是SVM算法在使用多项式核和高斯核的时候,可以得到一个不逊于神经网络算法的结果,其中,SVM算法允许任意打乱pixel的顺序,不考虑几个pixel之间的相对位置关系,很有意义。
识别蛋白质族的时候,也优选SVM算法,将四个字母得到4^26次方个组合形式,只统计各种氨基酸出现的次数,由于组合形式太多,考虑采用内积的方式简化(?)