机器学习笔记-VC Dimension, Part I

笔记整理自台大林轩田老师的开放课程-机器学习基石,笔记中所有图片来自于课堂讲义。

  上一篇讲到,learning的时候如果遇上bad sample,如果遇上bad sample我们就无法保证$E_{in}$和$E_{out}$很接近。我们用了一个不等式来衡量遇上bad sample的概率:

$$\mathbb{P}_\mathcal{D}[BAD\ D]\leq 2Mexp(-2\epsilon ^2N)$$

机器学习笔记-机器为何能够学习?

笔记整理自台大林轩田老师的开放课程-机器学习基石,笔记中所有图片来自于课堂讲义。

机器学习的基础架构 (Learning From Data)

  银行在决定是否要通过贷款申请人的授信请求前,会根据申请人的资料对其进行风险评估,(通常银行会为其计算信用评分),申请人状况符合银行要求时,银行通过其申请,反之则婉拒。那么银行凭借什么来判断申请人将来是否会违约呢?通过银行之前的信用贷款记录,这些记录中,有些客户发生了违约行为,其他则表现良好,银行从这些违约与非违约的记录中learning到了一些规律,然后利用这些规律,来对新申请人的违约风险进行估计。因此信用评估模型就是一个learning的问题,那么我们该如何使用历史数据做好learning呢?

  下面这张图描述了learning的基础架构:


R统计图表与好玩的字体

  本文参考至统计之都的showtext:字体,好玩的字体和好玩的图形以及R能不能绘制这种图形??。当中讨论了在R图表中显示中文以及其他自定义字体的方法。这两篇文章中使用到showtext这个包,但实际测试发现好像不使用showtext也能达到同样的效果。下面的R code我是在Mac下的RStudio下实验的,因此如果windows达不到同样的效果,可以参考上面这两篇文章。

R语言求函数的偏导数

  在Machine Learning的课上,老师讲到用gradient decent的方法解logistic regression中cost function的最小值。这当中就要涉及到对cost function的求偏导数。其实在R当中可以很方便的做到这一点。

  R语言中可以使用D()来求一元函数的导数,用deriv()来求多元函数的偏导数。这两个function都在package:stats中,会在R启动时默认加载。

  下面以一个多元函数作为demo,希望通过gradient decent的方法求最小值:

$$E(u,v) = e^u + e^{2v} + e^{uv} + u^2 - 2uv + 2v^2 - 3u - 2v$$

Perceptron Learning Algorithm (PLA)

Perceptron 是什么?


  Perceptron - 感知机,它能够根据每笔资料的特征,把资料判断为不同的类别。令$h(x)$是一个perceptron,你给我一个$x$($x$是一个特征向量),把$x$输入$h(x)$,它就会输出这个$x$的类别,譬如在信用违约风险预测当中,输出就可能是这个人会违约,或者不会违约。本质上讲,perceptron是一种二元线性分类器,它通过对特征向量的加权求和,并把这个”和”与事先设定的门槛值(threshold)做比较,高于门槛值的输出1,低于门槛值的输出-1。

AUC与ROC - 衡量分类器的好坏

二元分类器


  二元分类器是指要输出(预测)的结果只有两种类别的模型。例如预测阳性/阴性,有病/没病,在银行信用评分模型中,也用来预测用户是否会违约,等等。

  既然是一种预测模型,则实际情况一定是有些结果猜对了,有些结果猜错了。因为二元分类器的预测结果有两种类别(以下以阴/阳为例),对应其真实值,则会有以下四种情形:

1. 预测为阳性,真实值为阴性 (伪阳性)
2. 预测为阴性,真实值为阳性 (伪阴性)
3. 预测为阴性,真实值真的为阴性 (真阴性)
4. 预测为阴性,真实值真的为阴性 (真阴性)


图1.confusion matrix (混乱矩阵)

利用智能手机加速度传感器与三轴陀螺仪预测用户活动状态

本次实验是coursera上的一门课Data Analysis的一次小作业。将使用智能手机加速度传感器与三轴陀螺仪采集到的数据,来预测用户当前的活动(walking, walking_upstairs, walking_downstairs, sitting, standing, laying)。所用的数据可以从课程提供的链接下载,https://spark-public.s3.amazonaws.com/dataanalysis/samsungData.rda 。.rda为R专用的数据文件,在R中直接使用load()即可将其载入,比较方便。除此之外,也可到UCI Machine Learning Repository下载原始文件,当中包含dataset的中各个变量以及衍生变量的简介,数据格式为纯文本。

Random Forests - 林子大了,什么树都有

本文参考自Layman’s Introduction to Random Forests

  在machine learning中,随机森林(Random Forests)是一个包含多个决策树(decision tree)的分类器,其输出的类别由个别树输出的类别的众数决定[1]。如何从一个比较通俗易懂的角度来理解这座森林呢?
  某天你想看某部电影但你不确定自己是否会喜欢,此时你可能会问你的好友小赵,问他认为你会不会喜欢这部电影。这个小赵是个非常认真负责的人,他想先了解了解你喜欢哪种类型的电影。于是你给了小赵一份电影清单,上面写了你喜欢哪些电影,不喜欢哪些电影(a labeled training set)。于是小赵去豆瓣上查这些电影的相关信息,他把每一部电影转换成一个特征向量:(导演,编剧,主演,类型,国家,语言,片长…),接着在小赵心目中,就建立起了一套判断准则,这个判断准则中有一系列的衡量标准,譬如动作片+有xxx出演->喜欢,或者爱情片+悲剧->不喜欢等等。此时小赵就变成了一棵decision tree。你问小赵你会不会喜欢某部电影,小赵就会根据之前建立起来的规则,猜测你喜欢或者不喜欢。

Word Cloud in R

本文参考自One R Tip A Day- Word Cloud in R


研究CRAN中R Packages所关注的最热门的领域

以下的例子将从Available CRAN Packages页面上抓取目前CRAN上所有的R包,提取当中的title,及各个R包的简介,用来分析R包所涵盖的热门领域。

1
2
3
4
5
6
7
8
9
# 载入必要的R包
require(XML)
require(tm)
u = "http://cran.r-project.org/web/packages/available_packages_by_date.html"
# 这个readHTMLTable可以直接读取网页中的table并转换为data frame
t = readHTMLTable(u)[[1]]
# 观察一下这个table
head(t)