刚刚完成了机器学习基石的第二讲,主要介绍了机器学习的定义,PLA算法和pocket PLA算法。下面将笔记整理在下面。
延续前面的信用卡发放问题。银行已有的用户数据可能包括用户的年龄、年薪、工作时长、债务情况等特征信息,我们分别用$x_1$,$x_2$,...,$x_d$来表示,那么对于每一个用户都有一个向量来表示其信息。我们为每一个特征信息分配一个权值$w_i$,用来衡量该特征信息在此问题中的权重(例如,年薪对应的权值应该是一个正值,年薪越高越应该可以发放信用卡;债务对应的权值应该为一个负值,负债越多越不应该发放信用卡)。对于每一个用户,我们计算他的加权分值,若该加权分值超过某一个给定的阈值(threshold),那银行就给他信用卡;若未超过,则银行不予发放。现在,我们知道了问题的输入为一个个的d维向量,输出为y:{+1(good), -1(bad)},要求的hypothesis是一个线性函数,如下所示:
Andrew Ng的Machine Learning比较简单,已经看完。林田轩的机器学习基石更多的是从概率论的角度来介绍机器学习,之前的视频已经听了大半,但好多都是模棱两可。现在从头开始,认真整理笔记,笔记的结构遵从课程视频的结构。
下面是机器学习基石的第一讲:the learning problem
机器学习是一门理论和实践相结合的课程。这门课程从基础入手,介绍机器学习的一些核心理论、核心技巧和实际应用。林田轩老师说要像讲故事一样来讲机器学习,实际上呢还是包含很多很难的推导,而作业实在是太难,且网上又找不到答案参考,实在痛苦。
这一小节介绍了整个课程的脉络,如下:
刚刚完成了Cousera上Machine Learning的最后一周课程,这周介绍了machine learning的一个应用:photo OCR(optimal character recognition,光学字符识别),下面将笔记整理在下面。
最后几小节介绍机器学习的一个应用——photo OCR(optimal character recognition,光学字符识别),这一例子的内容也可以应用于计算机视觉(computor vision)。photo OCR要解决的问题是如何让计算机识别出图像中的文字。给定一张图像,photo OCR首先要做的是确定其中文字的位置,如下图所示:
刚刚完成了Andrew Ng在Cousera上的Machine Learning的第十周课程,这周主要介绍的是大规模机器学习,现将笔记整理在下面。
在前面介绍bias-variance的时候,我们曾提到一个比较各种算法孰优孰劣的实验,结论是”it’s not who has the best algorithm that wins, it’s who has the most data.”但处理大规模的数据库时往往面临着计算问题。假设有一个数据量$m=100,000,000$的数据库,那么在做Gradient descent时,对于每一个$\theta_j$都有
$$\theta_j:=\theta_j - \alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}$$
其中的求和要进行$m=100,000,000$次,如果模型中有$n=1000$个特征,进行一次迭代的计算量将是$O(10^{11})$,整个算法的训练将耗费大量的时间。现在我们使用training set的一个很小的子集去训练模型,看看这样是否会收到好的效果。下图中给出了$J_{train}(\theta)$和$J_{cv}(\theta)$随m取值变化的图像,如果在小的子集上训练得来的$J_{cv}(\theta)$比$J_{train}(\theta)$还大得多,那增大training set会继续改善模型;如果在小的子集上得来的$J_{cv}(\theta)$和$J_{train}(\theta)$已经基本相当,那我们就没有必要再去增大training set了。(具体原因可查看第六周的bias-variance)
Andrew Ng在Machine Learning的第九周介绍了异常检测(anomaly detection)和推荐系统(recommender system),将笔记整理在下面。
视频开头,Andrew Ng告诉我们,异常检测(anomaly detection)主要应用于无监督式学习,但它更像是监督式学习。我们以飞行器发动机为例来介绍异常检测。飞行器发动机会有很多特征,这里我们用$x_1$表示产生的热量,用$x_2$表示振动强度,且假设有数据集{$x^{(1)}$,$x^{(2)}$,...,$x^{(m)}$}(注意,这里的数据是标记的),下图坐标系中每个点代表一组数据。我们的问题是怎样根据现有的这些未标记数据去判断一组新数据是否可靠(如新数据是真实的,还是编造的)。下图中有两组绿色标记的数据点,直观上,我们会觉得上面的那组数据应该更可靠一些,因为该数据点周围有许多其他的数据点;而下面的那组太孤立,可能存在问题。
刚刚完成了Machine Learning第八周的课程,这一周主要介绍了K-means和降维,现将笔记整理在下面。
今天我们开始介绍无监督式学习(unsupervised learning)。下面两张图分别代表典型的有监督式学习和无监督式学习。一个典型的有监督式学习是从一个有标记的训练数据集出发(图中的两类数据点分别用圈圈和叉叉表示,圈圈一类,叉叉一类),目标是找到一个decision boundary能成功的将两类分开,并且得来的模型能够很好的对test set中的数据进行分类。而在无监督式学习中,训练数据集是没有标记的(图中的数据点全都用黑点表示),目标是找到一个算法能够发现数据集中的一些特点(图中使用聚类算法将数据点分成了两类,当然还有其他的算法)。聚类算法在科研和实际生产中有很多应用,如市场细分(market segmentation)、社交网络分析(social network analysis)、组织运算集群(organize computing clusters)、天文数据分析(Astronomical data analysis)等。
今天在Cousera上学习了Machine Learning的第七周课程,这一周主要介绍了支持向量机(support vector machine),将学习笔记整理在下面。
现在我们来讨论一下机器学习系统设计。
假设我们想建立一个垃圾邮件分类系统,现在手上有大量的垃圾邮件和费垃圾邮件,那么我们怎样使用监督学习将垃圾邮件和非垃圾邮件分开呢?首先我们可能需要从这些邮件中选择一些能够区分垃圾邮件与非垃圾邮件的词汇,将他们作为特征X。比如说“buy”一词,邮件中含有该词汇,则很有可能是垃圾邮件。如果一封邮件中含有“buy”,则其对应的$x_{buy}^{(i)}=1$,否则$x_{buy}^{(i)}=0$。假设我们抽取100个单词作为特征,那我们就从每一封邮件抽象出一个特征向量$x^{(i)}$,一个标志$y^{(i)}$。然后再利用前面讲到的某一种分类方法,比如逻辑回顾,来对邮件进行分类。最后进行调参,判断系统性能。当然实际应用我们抽取的词汇可能远远不止100个。《机器学习实战》中介绍的第一个例子就是垃圾邮件分类,有兴趣的话可以拿来看一看。
入坑机器学习近一个月,学习资料主要是李航的《统计学习方法》、Peter Harrington的《机器学习实战》、Andrew Ng的Machine Learning和台大林田轩的机器学习基石。
只看视频不做笔记的学习效果实在太差,从Andrew Ng的Machine Learning的第六周开始,坚持笔记。
我们继续使用前面课程中提到的房价预测问题。假设我们实现了对房价进行预测的规范化后的线性回归,得到了模型参数。但当我们使用一组新的数据来测试得到的hypothesis时却得到了一个不能接受的错误率。为了提高模型的表现,我们应该采取什么措施呢?