#3 集成学习–机器学习中的群策群力 !

背景:

总览

机器学习方法在生产、生活和科研中有着广泛应用,而集成学习则是机器学习的热门方向之一。
集成学习是使用一系列学习器进行学习,以某种规则把各个学习结果进行整合,从而获得比基学习器有更好学习效果集成学习器.

今天, 我们在分析讨论集成学习和多类集成学习的同时, 提出目前多类集成学习的一些问题, 供大家参考。

集成学习图例

sss

研究现状

理论丰富

二类集成学习已有较成熟理论基础。多类集成理论基于二类集成。

国际成果

Bagging (Leo Breiman, 1994,Technical Report No. 421.)

Boosting (Schapire, Robert E,1990 ,“The Strength of WeakLearnability”. Machine Learning (Boston, MA: Kluwer Academic Publishers)

AdaBoost (Yoav Freund and Robert Schapire,2003)

AdaBoost.MH, SAMME, PIBoost, GentleBoost, AdaCost

国内成果:

南大周志华等人提出选择性集成理论,于2001年在国际人工智能

顶级会议IJCAI上发表。另周志华等人提出了二次学习的思想,将集成学习用作预处理,在IEEE Trans. Information Technology in Biomedicine(2003)上发表。 继续阅读#3 集成学习–机器学习中的群策群力 !

不容错过的Python小贴士—技巧, 风格和最佳实践

— 改编自 Python: Tips, Tricks and Idioms

 

1. Dict的for循环中避免使用低效的iteritems() 和 keys()

In [1]:
a = {}
for i in xrange(0, 1000000):
    a[i] = i
print(type(a))
print(len(a))
<type 'dict'>
1000000
In [2]:
def for_func1():
    for x in a:
        pass

def for_func2():
    for x in a.keys():
        pass

def for_func3():
    for x,v in a.iteritems():
        pass
In [3]:
import timeit
print(timeit.timeit(for_func1, number=100))
print(timeit.timeit(for_func2, number=100))
print(timeit.timeit(for_func3, number=100))
1.22459793091
2.30621099472
2.17837190628

是不是快多了?

 

2. for循环中获得index神器: enumerate

In [4]:
students = ('James', 'Andrew', 'Mark')
In [5]:
for i, student in enumerate(students):
    print i, student
0 James
1 Andrew
2 Mark
In [6]:
students = {'James': 'male', 'Andrew':'male', 'Alice':'female'}
In [7]:
for i, student in enumerate(students):
    print i, student
0 James
1 Andrew
2 Alice

3. 想确定for循环完整结束, 用else吧…

In [8]:
for ele in ['a', 'b', 'c']:
    if ele == 'b':
        break
else: # no break
    print('for循环完整结束')
In [9]:
for ele in ['a', 'b', 'c']:
    if ele == 'd':
        break
else: # no break
    print('for循环完整结束')
for循环完整结束

4. 迭代工具之chain连接器

继续阅读不容错过的Python小贴士—技巧, 风格和最佳实践

Brief History of Machine Learning 机器学习简史

My subjective ML timeline
My subjective ML timeline

Since the initial standpoint of science, technology and AI, scientists following Blaise Pascal and Von Leibniz ponder about a machine that is intellectually capable as much as humans. Famous writers like Jules

Pascal’s machine performing subtraction and summation – 1642
Pascal’s machine performing subtraction and summation – 1642

Machine Learning is one of the important lanes of AI which is very spicy hot subject in the research or industry. Companies, universities devote many resources to advance their knowledge. Recent advances in the field propel very solid results for different tasks, comparable to human performance (98.98% at Traffic Signs – higher than human-).

Here I would like to share a crude timeline of Machine Learning and sign some of the milestones by no means complete. In addition, you should add “up to my knowledge” to beginning of any argument in the text.

First step toward prevalent ML was proposed by Hebb , in 1949, based on a neuropsychological learning formulation. It is called Hebbian Learning theory. With a simple explanation, it pursues correlations between nodes of a Recurrent Neural Network (RNN). It memorizes any commonalities on the network and serves like a memory later. Formally, the argument states that;

Let us assume that the persistence or repetition of a reverberatory activity (or “trace”) tends to induce lasting cellular changes that add to its stability.… When an  axon  of cell  A is near enough to excite a cell  B and repeatedly or persistently takes part in firing it, some growth process or metabolic change takes place in one or both cells such that  A’s efficiency, as one of the cells firing  B, is increased.[1]

Arthur Samuel
Arthur Samuel

In 1952 , Arthur Samuel at IBM, developed a program playing Checkers . The program was able to observe positions and learn a implicit model that gives better moves for the latter cases. Samuel played so many games with the program and observed that the program was able to play better in the course of time.
继续阅读Brief History of Machine Learning 机器学习简史

[转] Ubuntu14.04LTS安装TensorFlow

1. Pip

如果已经安装过pip,可以跳过这里的安装步骤。

$ sudo apt-get install python-pip python-dev python-setuptools build-essential
$ sudo pip install --upgrade pip
$ sudo pip install --upgrade virtualenv

为了检测是否安装好,可以查看pip的版本:

$ pip --version
pip 8.1.2 from /usr/local/lib/python2.7/dist-packages (python 2.7)

2. Tensorflow

接下来,就可以按照Tensorflow Download and Setup中的Pip Installation开始安装,命令如下:

# Ubuntu/Linux 64-bit, CPU only:
$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl
继续阅读[转] Ubuntu14.04LTS安装TensorFlow

#2 大话机器学习中的贝叶斯 Bayesian

这一期, 我们来谈一谈机器学习中的贝叶斯. 概率论中贝叶斯理论, 作为概率的一种“思考方式”, 十分通用. 当机器学习应用中, 贝叶斯的强大理论提现在多个领域, 包括超参数贝叶斯, 贝叶斯推断, 非参贝叶斯等等…

入门

机器学习中的贝叶斯, 首先要区分概率中频率学派和贝叶斯学派的. 网上有各种各样的解释, 其实, 我们可以从机器学习的角度去解释.

机器学习问题可以总结为: 找到一个好的 \(\theta\) 代表一个模型, \(\theta\) 表示这个模型的所有参数, 而这个模型就是我们能够训练出的最好模型(至少我们认为是最好的).  什么是最好的模型? 假设有未知数据集 \(X_{unknown}\) , 如果 \(P\left(X_{unknown}\middle|\theta\right) = 1\) , 那么这个模型就是最好的. 当然这是不可能的, 也许只有上帝才能对所有的未知100%准确预测. 但我们一定是希望 \(P\left(X_{unknown}\middle|\theta\right)\) 越大越好, 趋向于1.

如何做到使得 \(P\left(X_{unknown}\middle|\theta\right)\) 越大越好 ? 这就引出了概率论中的两大学派: 传说中的”频率学派”和”贝叶斯学派”. 两大学派区别在哪里? 看下面这个公式:

\(P\left(\theta\middle|X_{train}\right) = \frac{P\left(X_{train}\middle|\theta\right)P\left( \theta\right)}{P\left(X_{train}\right)} \)

没错! 这就是大名鼎鼎的贝叶斯公式 ! 机器学习中, \( X_{train} \) 是真实的训练数据或者抽样数据 . \(P\left(\theta\middle|X_{train}\right)\) 是后验概率(posterior)分布 . \(P\left(X_{train}\middle|\theta\right)\)是似然概率(likelihood).  \( P\left( \theta\right) \)是先验概率分布(prior). \(P\left(X_{train}\right)\)是归一化”证据”(evidence)因子.

“频率学派”认为, 后验概率和先验概率都是不存在的, 模型 \(\theta\) 不论简单复杂, 参数已经是上帝固定好了的, 只要根据大数定理, 当训练数据足够大, 我们就能找到那个最好的 \(\theta\) . 于是公式变为:

\( P\left(X_{train}\right) = P\left(X_{train}\middle|\theta\right) \)

无论有没有 \(\theta\) , 抽样数据\( X_{train} \)出现的概率都是一样的, 因为任何数据都是从上帝指定的模型中生成的. 于是我们找到 \(\theta\) 的任务就很简单, 最大化 \(P\left(X_{train}\middle|\theta\right)\) 似然概率就行了. 数据量越大, 模型拟合度越高, 我们越相信得到的 \(\theta\) 越接近上帝指定的那个 \(\theta\). 所以”频率学派”预测投硬币正反的概率的方法就是, 投10000次硬币吧, 看看正面出现多少次. 这种基于统计的预测有很多缺点, 首先它指定了一个固定概率, 如果上帝指定的模型不是固定的呢? 另外, 如果数据量不足够大, 预测会不会非常不准确? 当数据维数增大时, 实际计算量也会变得非常大.

“贝叶斯学派”认为, 人类的知识是有限的, 我们不知道上帝的安排, 就先假设一个先验(我们已有的知识), 再根据训练数据或抽样数据, 去找到后验分布, 就能知道模型最可能是个什么样子. 继续阅读#2 大话机器学习中的贝叶斯 Bayesian

机器学习 常见面试题 总结

前言:

找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大。

纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内大点的公司里百度,阿里,腾讯,网易,搜狐,华为(华为的岗位基本都是随机分配,机器学习等岗位基本面向的是博士)等会有相关职位,另外一些国内的中小型企业和外企也会招一小部分。当然了,其中大部分还是百度北京要人最多,上百人。阿里的算法岗位很大一部分也是搞机器学习相关的。

下面是在找机器学习岗位工作时,总结的常见机器学习算法(主要是一些常规分类器)大概流程和主要思想,希望对大家找机器学习岗位时有点帮助。实际上在面试过程中,懂这些算法的基本思想和大概流程是远远不够的,那些面试官往往问的都是一些公司内部业务中的课题,往往要求你不仅要懂得这些算法的理论过程,而且要非常熟悉怎样使用它,什么场合用它,算法的优缺点,以及调参经验等等。说白了,就是既要会点理论,也要会点应用,既要有点深度,也要有点广度,否则运气不好的话很容易就被刷掉,因为每个面试官爱好不同。

朴素贝叶斯:

有以下几个地方需要注意:

1. 如果给出的特征向量长度可能不同,这是需要归一化为统一长度的向量(这里以文本分类为例),比如说是句子单词的话,则长度为整个词汇量的长度,对应位置是该单词出现的次数。

2. 计算公式如下:29224144-9bad2a8789f549cd88a567a7c2ca7465

其中一项条件概率可以通过朴素贝叶斯条件独立展开。要注意一点就是\(P\left(w\middle|c_i\right)\)的计算方法, 而由朴素贝叶斯的前提假设可知: \(P\left(w_0,w_1,w_2…w_N\middle|c_i\right) =P\left(w_0\middle|c_i\right)P\left(w_1\middle|c_i\right)P\left(w_2\middle|c_i\right)…P\left(w_N\middle|c_i\right)\)

因此一般有两种,一种是在类别为ci的那些样本集中,找到wj出现次数的总和,然后除以该样本的总和;第二种方法是类别为ci的那些样本集中,找到wj出现次数的总和,然后除以该样本中所有特征出现次数的总和。

3. 如果\(P\left(w\middle|c_i\right)\)中的某一项为0,则其联合概率的乘积也可能为0,即2中公式的分子为0,为了避免这种现象出现,一般情况下会将这一项初始化为1,当然为了保证概率相等,分母应对应初始化为2(这里因为是2类,所以加2,如果是k类就需要加k,术语上叫做laplace光滑, 分母加k的原因是使之满足全概率公式)。

朴素贝叶斯的优点:

对小规模的数据表现很好,适合多分类任务,适合增量式训练。

缺点

对输入数据的表达形式很敏感。 继续阅读机器学习 常见面试题 总结

快速入门机器学习 图解机器学习10张经典图片

入门机器学习, 总有几张图片, 令人印象深刻. 以下是十张经典图片, 图解机器学习, 非常有 启发性:

1.  训练错误和测试错误。这张图告诉我们训练错误越小,不一定是最好的。训练误差和测试误差要达到一个平衡,才是最好的。下图展示了ESL 图 2.11, 训练错误和测试错误与模型复杂度的关系.

Test and training error
Test and training error

2. 欠拟合”和”过拟合”. 出自PRML 图1.4. 下图数据点是从绿色曲线生成的. 拟合参数是M,  通过M得到的模型是红色曲线. 可见, 如果M过小, 得到的模型不够复杂, 不能还原真实模型, 也就是”欠拟合”. 如果M太大, 得到的曲线复杂度过高, 也不能真实还原模型, 也就是”过拟合”. 猜到了吧? 还是要在”欠拟合”和”过拟合”之间找到一个平衡呀~

Under and overfitting
Under and overfitting

3. 奥卡姆剃刀(Occam’s razor). 出自ITILA 图 28.3. 为什么贝叶斯推断包含着奥卡姆剃刀的原理 ? 下图展示了为什么复杂的模型会变得低效。横轴代表了贝叶斯理论的汇报模型在可能数据集上被准确预测的可能性。\(P\left(D\middle|H_1\right)\) 代表了使用复杂模型\(H_1\)情况下,数据集\(D\)被准确预测的概率和置信度(Evidence);\(P\left(D\middle|H_2\right)\) 代表了使用较简单模型\(H_2\)情况下,数据集\(D\)被准确预测的概率和置信度(Evidence)。可见复杂模型\(H_1\)在预测时,一些数据置信度,或者信心很高,但是其实整体准确度, 不如模型\(H_2\) 。说什么来着? 模型复杂度也要平衡哦~
继续阅读快速入门机器学习 图解机器学习10张经典图片