机器学习系列—10.聚类

在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律。聚类试图将数据集中的样本划分为若干个通常是不想交的子集,每个子集称为一个“簇”(cluster)。聚类既能作为一个单独过程,用于找寻数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。其实异常检测(anomaly detection)也常借助聚类或距离计算进行,如将远离所有簇中心的样本作为异常点,获奖密度极低处的样本作为异常点。
基于不同的学习策略,人们设计出多种类型的聚类算法,主要划分及设计到的聚类算法如下:

  1. 原型聚类:
    (1)用原型向量刻画聚类结构:
    a.Kmean
    b.LVQ(学习向量量化)
    (2)概率模型(高斯分布):GMM(高斯混合模型
  2. 密度聚类(样本分布的紧密程度):DBSCAN
  3. 层次聚类(树形的聚类结构):
    (1)“自底向上”的聚合策略:AGNES (2)“自顶向下”的分拆策略:
    本文会先讨论聚类算法涉及到的两个基本问题——性能度量和距离计算,然后对上面涉及到的不同类型的聚类进行介绍。

    Read More

机器学习系列—5.决策树

基本流程

决策树(decision)是一类常见的机器学习方法,其时基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。

一般的,一颗决策树包含一个根结点、若干个内部结点和若干个叶结点。叶结点对应于决策结果,其他每个结点则对应于一个属性测试;决策树学习的目的是为了产生一颗泛化能力强,即处理未见实例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略。

Read More

机器学习系列—9.集成学习

集成学习(ensemble learning)通过构建并结合多个学习器来完成任务,有时也被称为多分类器(multi-classifier system)、基于委员会的学习等。
若集成中只包含同种类型的个体学习器,则这样的集成是“同质”的,其个体学习器称为“基学习器”。若包含的是不同类型的个体学习器,则称为“异质”,其基学习器称为“组件学习器”。

Read More

机器学习系列—7.支持向量机SVM

本文主要介绍以下内容,对于分类任务,最基本的想法就是找到一个划分平面,离超平面最近的样本点称为支持向量,支持向量到超平面的距离称为间隔,支持向量机的核心思想就是找到间隔最大的超平面,这是一个凸优化问题(即带约束的优化问题),使用拉格朗日乘子法引入拉格朗日乘子求得拉个朗日函数,对其求偏低得到其对偶问题,通过求解对偶问题得到主问题的解。因为支持向量的约束是不等式约束,所以还需满足KKT条件。现实任务通常是线性不可分的,可以采用将特征空间从高维映射到低维的方法。因此引入核函数的概念。为了防止过拟合,可以采用软间隔和正则化,软间隔是相对于硬间隔的概念,硬间隔是要求所有样本都分类正确,软间隔允许部分分类错误。正则化是引入结构风险,以期希望得到复杂度低一点的模型。最后描述了支持向量回归,用于解决回归问题。

Read More

机器学习系列—4.参数估计方法(最大似然估计和贝叶斯参数估计)

贝叶斯决策论可以根据先验概率(可以估计)和假设类条件概率来得到最优的分类器,但估计通常存在困难,原因如下:

  1. 训练样本数太少(
  2. 特征向量的维数较大时,计算复杂

其解决方法是将条件概率密度函数参数化。即假设类条件概率密度P(x|w)是一个多元正态分布,已知均值和协方差矩阵,这样就可以从估计完全未知的类条件概率密度P(x|w)转化为估计参数均值和协方差矩阵。这也叫参数估计,最常用的方法是极大似然估计贝叶斯参数估计
极大似然估计是把待估计的参数看做是确定性的量,只是值未知,因此只需要求得最佳估计即可,就是使得产生已观测到的样本概率为最大值的那个值。
而贝叶斯估计是把待估计的参数看成是符合某种先验概率分布的随机变量。对比两种方法,极大似然估计更简单,样本量增大时收敛效果更好。

Read More

机器学习系列—3.贝叶斯决策理论

贝叶斯决策论事解决模式分类问题的一种基本统计途径,其出发点是利用概率的不同分类决策与相应的决策代价之间的定量折中,它做出了如下的假设,即决策问题可以用概率的形式来描述,并且假设所有有关的概率结构均已知。本文主要是学习Pattern Classify的第2章后的笔记总结,若有错误,望指出。

Read More

机器学习系列—1.机器学习介绍

当我们晚上抬头看天空的时侯,如果看到许多的星星,我们通常会认为明天会是个好天气。我们之所以能做出有效的预判,是因为我们过往积累的经验,人类可以通过对经验的总结利用,然后做出有效的预判,那么计算机可以吗?机器学习正是这样一门学科,它致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中,“经验”通常以“数据”的形式存在。因此,机器学习研究的内容就是关于在计算机上从数据中产生“模型”的算法。对于机器学习的定义,业界主要有两种:

  1. Arthue Samuel :Field of study that gives computers the ability to learn without being explicitly programmed.(在没有明确训练的条件下,教给计算机学习的能力 )
  2. Tom Mitchell:A computer program is said to learn from experience E with respect to some task T and some performance measure P. if its performance on T as measured by P.improves with experience E.(计算机程序从经验E中学习任务T并用度量 P来衡量性能。条件是它由 P定义的关于T的性能随着经验 E而提高)

Read More

Caffe学习系列——6使用Faster-RCNN进行目标检测

由于要实现服装的目标检测,所以一直在研究Faster-RCNN 。讲到目标检测,不得不提到rbg大神的深度神经网络检测算法系列RCNN、Fast-RCNN、Faster-RCNN,其还在github上开源了自己的代码,造福广大码农。这是rbg大神的主页 https://people.eecs.berkeley.edu/~rbg/index.html ,以及本篇博文会用到的Faster-RCNN的github源码地址 https://github.com/rbgirshick/py-faster-rcnn,欢迎前去膜拜学习。对于RCNN、Fast-RCNN、Faster-RCNN的介绍就不在这里赘述了,可以看看我的上一篇博文 。该github源码是Faster-RCNN python版本的实现,并使用caffe。除了python版本,rbg大神还提供了matlab代码。这两种实现方式有些许的不同,主要体现在以下几点:

  1. 由于使用了python layer,python版本的在测试时间上会比matlab版本的慢10%左右,但是准确率差不多甚至略高一点。
  2. 由于在实现方式上有一点点不同,所以使用MATLAB代码训练的模型与Python版本的不兼容
  3. 目前已经实现的方式有两种:Alternative training和Approximate join training。推荐使用第二种,因为第二种使用的显存更小,而且训练会更快。

本篇博文主要分为两部分,第一部分讲如何配置py-faster-rcnn并训练PASCALVOC2007,运行demo。第二部分讲如何对代码和数据集进行修改实现自己数据的训练与检测。

Read More