Mechine Learning on Coursera 总结

机器学习分为监督学习、非监督学习和半监督学习。课程只提到前两个,第三个是监督学习与无监督学习相结合的一种学习方法。它主要考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题。半监督学习对于减少标注代价,提高学习机器性能具有非常重大的实际意义。

监督学习非监督学习其他
Linear Regression
Logistic Regression
Neural Network
SVM
K-Means
Principal Component Analysis(PCA)
Anomaly detection
Recommend System
Big Data

总体来讲,上面提到的机器学习都遵循一个整体结构。设置一个假设,假设参数是需要学习的。提供一个函数,来计算当前参数所产生的误差(cost),然后用某种方式使用误差迭代更新参数。

使用的更新办法有(Batch/Stochastic)Gradient Descent、fminc、Conjugate gradient、BFGS、L-BFGS等,很多octave的大规模优化方法。基本都是需要输入一个误差函数、参数列表,输出参数的最优解。

0.学习算法

Linear Regression
假设误差
结果通过输入feature的线性组合计算得出。是一个实数。
均方误差(欧氏距离)的二分之一(为了求导方便)
如果不能完全用线性组合,可以将非线性如X^2作为一个新feature加入,继续使用Linear Regression。

Logistic Regression
假设误差
首先通过线性方程计算出一个实数z。使用sigmoid函数算出一个[0,1]的值,
视为概率。通过比较概率与阀值,来确定0/1结果。
Sigmoid:
Hypothesis:
表示概率距离,即概率下最短编码长度,没有二分之一。
Logistic Regression可以扩展为多分类系统,即目标结果是一个1多个0的组合。使用One-vs-all,即对每个输出节点计算一次Logistic Regression。此时该节点为1,其他节点统一定义为0.

以上二者都会加入X0===1,来代表常数项。


Neural Network
假设误差
所有输入以数种不同参数计算出数层中间层,最后一层中间层再经过不同参数的同种函数计算出数个目标结果的概率。最终求得分类。
最简单的可以看做是每层的一个节点是一次Logistic Regression,结果是多次Logistic Regression的组合。
多层Logistic Regression Cost Function的组合。

Neural Network由于结构复杂,使用特殊的参数迭代方法,叫Backpropagation。

Backpropagation的思想很简单:Neural Network是有向图,从左到右输入节点通过参数矩阵影响输出结果;从右向左输出误差通过相同的参数矩阵影响输入节点的预期值(为了得到该输出,输入应该有的值)。更新的值仍然是使用偏导数和固定步长。但是为了加快计算使用了链式规则简化计算。,其中.最终形成了Backpropagation的计算公式。具体看代码吧。唯一需要铭记的是,所有更新量都是偏导数。


SVM原理没看懂。但是有代码。


K-means
假设误差
同组的数据距离小于组间距离。所有点与其所属的中心点的平均距离。
其实就是更新中心点和更新分组两步的循环。中心点的选择可能会影响最终结果,可以随机选择+多次计算,使用最好的一次分类。

PCA,一些输入变量存在线性相关性。基本如果使用Linear Regression的话,能够很好的表征整个分布(回归到一个直线)。此时,可以使用输入在直线上的映射点作为其代表。此时输入个数少很多,能够简化计算。需要Feature Scaling。计算使用SVD函数。

Anomaly Detection,默认属性都是相互独立的,而且同属正态分布。所谓异常量就是符合该联合分布的可能性低于某阀值。如果属性不独立,可以使用多元高斯分布。所有参数都使用统计学方法计算出来。

Collaborative Filtering
假设误差
相同行为的用户有相同的使用偏好(feature),
被相近的人打分相近的物品具有相近的属性(feature)。
将X和Theta同时作为变量,进行Linear Regression。


通过用户行为(对物品的打分)同时求出用户和物品的feature权重,二者的feature个数相等。在求出feature之后,可以求出用户或物品间的距离,来进行推荐。X是物品与feature的映射,Theta是用户对feature的评价。由于X和Theta是对称的,所以要进行随机初始化。


1.方法

Batch Gradient Descent,是常用迭代更新方法。思想是求出各个参数对误差值的贡献值(偏导数),使用同样的步长(alpha)同时更新参数集。每次迭代都要读入所有数据。

Stochastic GD,每次使用一个训练用例进行计算,多次不准确的更新会合成一个准确的更新。最终会得到全局最优解附近的一个区域中。

Mini-Batch GD,每次都使用少数几个训练用例组成的子集进行计算。介于上二者之间。

测试,使用训练集(60%)训练参数,交叉检验集(20%)评价不同算法的优劣,测试集(20%)评价最优算法在实际应用中的优劣。

区分bias/variance,以Training Size为自变量,Error为函数plot。Underfitting(variance)时训练集和测试集的error很接近、较大,接近速度很快。Overfitting(bias)时二者的差距较大,接近很慢。

随机初始化,在有很多相同算法施加在相同初始值的变量上时,所有学到的参数都会相同,为了避免这样的情况,需要将初始值设置为较小的(接近零)的值。

2.技巧

Regularization是指当参数Theta过大时,可能会导致overfitting,为了避免overfitting,在误差(cost)中加入惩罚项。惩罚项是.

Feature Scaling是当各个输入的量级相差较大时,需要把他们统一到相同量级上,因为输入值其实是与之对应的参数的权重。

Gradient Checking,使用最基础的偏导数计算方法(y1-y0)/(x1-x0)计算当前偏导数,看是不是与复杂算法(Gradient Descent)计算出的偏导数相近。

Unrolling Parameters,现有计算方法只接受向量作为参数,不接受矩阵。为了计算矩阵参数,可以使用mapping将矩阵映射成向量。

Precision, (true positive/predict positive); Recall, (true positive/actula positive).

Real-number metric,使用单个实数表征算法优劣。如果正负实例数量接近的话,可以直接用正负正确率的平均值;如果差别很大可以用,越大越好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值