2019-07-25 17:07:25 qq872890060 阅读数 350
  • 人工智能之机器学习算法的介绍

    机器学习算法入门教程,主要介绍人工智障机器学习常见算法,包括决策树、基于概率论的分类方法:朴素贝叶斯、Logistic回归、支持向量机、第利用AdaBoost元算法提高分类性能。

    4275 人正在学习 去看看 CSDN讲师

八个经典算法

单变量线性回归
多变量线性回归
逻辑斯特回归
神经网络算法
支持向量机
聚类算法之KMeans聚类
降维算法之PCA降维
决策树(回归树、分类树)

机器学习

现在的机器学习算法大都分为监督学习和无监督学习,工业界也在用一些半监督学习,就是两者的混合。
监督学习是使用带有标签结果的数据喂给机器去学习,多用于连续之预测和离散值分类。
无监督学习是使用没有标签的数据喂给机器去学习,多用于聚类和降维。
聚类是机器通过学习,将特征值相近的样本,自动划分为一类,具体划分效果,事先并不可知。
降维是机器通过学习,将样本的特征进行压缩,使多维度的数据降低到低维度,但是特征价值并不会损失太多。

算法实现思路

线性回归

线性回归的实现思路是我们要去使机器学习一类样本的分布规律,从而可以对新来的样本进行结果的预测。
假设一类样本本身具有一定的分布规律g,我们让机器通过大量的历史样本数据,去寻找近似于g的一个规律h。线性回归算法实现的优劣,就在于h和g的接近程度。h和g的差异,叫做代价函数或损失函数,我们对机器不断的训练,其实就是在不断的降低代价值或损失值。我们用的基本方法是对损失函数进行求导,找到是损失函数下降最快的方向,然后对模型的参数进行更新,进而是损失函数下降。这个方法叫做梯度下降法。直到损失值的范围达到我们的期望,或者梯度下降达到我们设定的最大次数,又或者更新的参数变化值小于我们预定的范围,模型训练完毕。

逻辑回归

逻辑回归用于离散值的分类。机器学习的架构都绕不开这几个模块:定义激活函数,定义模型,定义代价函数,定义更新函数。
逻辑回归,在线性回归模型的基础上,加入了一个激活函数-sigmoid函数,这个数学函数可以很神奇的将任何数值给变换到0,1之间,自然而然的,线性回归的连续值,在逻辑回归中就成了0-1之间的概率值,根据这一特性,逻辑回顾就定义,经过激活函数得到的值,大于0.5的,归类于正向类,标记为1,小于0.5的,归类于负向类,标记为0。所以,逻辑回归实现了离散值分类。
对于多分类问题,在逻辑函数中的解决思路就是,有几个类别,构造几个逻辑函数模型,属于该类别的为正向类1,不属于该类别的统统视为一类,为负向类0。这样就很好的实现了多分类。

神经网络

神经网络可以看做是简单逻辑回归的叠加,每一个神经元都是一个逻辑回归模型。
神经网络可以分为三个部分,输入层,隐藏层,输出层,其中隐藏层类似于一个黑匣子,它可以有很多层的隐藏层,每个隐藏层也可以有很多个的神经元,由我们根据具体问题,调试设定。
神经网络通过模仿生物神经网络,将上一层的线性输入投入激活函数中进行加工,得到非线性输出,作为下一层的输入,这样一来,每一层得到的输出,都可以作为一组新的样本特征,喂给下一层,这样的大大提高的神经网络对于各种数据的适应性,使其泛化能力更强。
神经网络正向传播,通过层层的计算与转化,获得预测值。
神经网络反向传播,通过每层的误差传递到前一层,进行参数的更新,乍看较为复杂,其实就是链式求导,层层地推而已,和线性回归及逻辑回归的求导方式一样的。

SVM

SVM的构建思路,其实就是将线性回归的判定 边界加粗,寻找一条更为严格的判定边界,这样在训练模型的时候,会获得众多线性可分模型中的最好的那一条,然后在测试集使用的时候,该判定边界适应能力很强,进而使SVM有很强的鲁棒性。
数学实现的话,涉及到有条件的二次最优化问题。
SVM多用于分类问题,也可以用于回归问题。

决策树

决策树的逻辑解释性很强,由于什么特征,进行了怎样的判断,思路很清晰。
构建一棵决策树,首先要确定根节点,而后确定各个子节点,我们可以操控的范围就在于此。
根节点的选取,我们要根据训练数据的所有特征,选取一个特征,这个特征要求是所有特征中,能够是信息熵下降程度最大的那个特征。
很自然的引出了熵的概念。
决策树中使用的信息熵,指的是信息的不确定性。我们使用决策树的思路就是,将一个事前,由最大的不确定性,降低直至时间确定为止。信息熵的求法是:此事件发生的概率乘以log(次事件发生的概率)取负值,那么熵的下降程度就是,原先的信息熵减去此时的信息熵,叫做信息增益。
决策树的深度,越浅越说明,熵的值下降越快。

聚类

聚类属于机器学习中的无监督学习算法。它主要用于将一组样本数据,根据其特征的相似性,进行自动划分为不同的类别。
聚类的实现思路是随机给予几个聚类中心,然后计算每个样本点到不同聚类中心的距离,比较距离哪一个聚类中心最近,就将该样本划分为这一类;所有样本点划分完毕后,会得到一组拥有全新类别的样本点,然后去掉原有的聚类中心,重新计算划分后的聚类中心;接下来就是重复前一步的操作,直到所有的样本点到其属于的聚类中心距离最近,或者聚类中心的位置不再发生变化,又或者达到最大迭代次数后,训练完毕。

降维

降维算法顾名思义,用于将多维度的样本数据,降低为低维度的样本数据。
但是降维和直接剔除特征列还有区别,降维在维度降低的同时,并没有使特征的价值发生太大的损失,直接剔除特征,有可能会剔除掉对预测模型很有用的特征,导致特征价值降低。所以,降维后的数据,所拥有的特征,不再是我们能够清楚定义物理含义的特征,这类特征类似于多种特征的压缩值,没有确切的含义。
那什么样的数据需要降维呢?
经过学习,我认为不是所有的数据都需要降维,有些数据维度特别的大,导致我们在进行模型训练时,计算量太大,并且通过协方差矩阵我们可以分析出,多个特征之间有很多的相关性,那么我们可以把有相关性的特征,整合成一个特征,这是降维的前提思想。

代码实现框架

手写底层实现

我们学习的手写底层有线性回归,逻辑回归,神经网络,整合框架模块为:

# 第一部分导入相关的库和包
# 第二部分 读取数据

# 第三部分 数据预处理
def preprocess(data):
	# 处理如下,具体要求按题目来做
	# 数据提取
	# 特征缩放
	# 数据初始化
	# 数据洗牌
	# 数据切割
	# 返回数据

# 第四部分 定义激活函数(线性回归不需要)
def g(z):
	# 这里我们使用的sigmoid函数
	# 神经网络需要返回g()函数的导数

# 第五部分 定义模型
def model():
	# 线性回归和逻辑回归使用线性模型
	h = X.theta
	# 神经网络使用正向传播

# 第六部分定义代价函数
def cost():

# 第七部分 定义梯度下降
def gradeDesc():
	# 第一部分
	# 数据准备
	# 执行梯度下降

# 输出各种数据

# 画图部分 按要求画图
	

调库模块整合

# 导入相关包

# 读取数据

# 数据预处理

# 定义算法模型 (类似于java对象的初始化)

# 模型训练
model.fit()
# 或
model.fit_transform()

# 查看输出各种数据

# 画图部分

数据集梳理

数据集:
回归问题:波士顿房价(特征缩放:标准化)

分类问题:(数据洗牌)
西瓜数据集(m:17  特征:2  标签:0,1)
乳腺癌数据集:(m:569  特征:30  标签:0,1)
鸢尾花数据集:(m:150  特征:4  标签:0,1,2)
手写体识别:(标签0-9)(标签1-10)
	如果标签值有10的,把10 换成0
对特征进行特征缩放(归一化)
	对标签进行独热编码
多分类求准确率:比较的事最大值的索引(argmax)

评估指标

评估指标:
回归问题:精度1-u/v   u = np.sum(h-y)²  v=np.sum(y-y.mean)²
分类问题:准确率、混淆矩阵、分类报告

画图部分

代价曲线:建议都画一个代价曲线,可以很好的展现出模型训练的如何
在这里插入图片描述
回归:样本/回归方程的直线,真实值预测值对比图(横坐标为真实值,纵坐标:一个是真实值,一个是预测值)
在这里插入图片描述
真实值和预测值对比图
在这里插入图片描述
无监督学习:聚类(散点、聚类中心),降维(降维后的样本分布)

正则化

正则化:(L1、L2正则)解决过拟合问题
过拟合:模型在训练集上表现出非常好的拟合能力,但是再测试集上的效果不好(减少特征数量、正则化(首选方法))
R = λ/2m *np.sum(θ²)   theta0不参与正则化
λ过大,相当于θ小,欠拟合,减小λ
λ过小,相当于θ大,过拟合,增大λ

代价函数的正则化是为了防止训练模型过拟合,我们训练模型是为了寻找一个相对接近于真实规则的规则,但是不能为了使接近程度为0,就使训练模型可以拟合每一个样本,从而失去了模型的泛化能力,其实这样的模型对我们预测新样本来说是没有意义的。
代价函数的代价值符合我们可以接受的范围时,有两种情况,第一种就是找到了一个相对不错的模型,对于训练样本的大部分情况都可以拟合的很好,所以代价很低;第二种情况就是过拟合,模型为了迎合代价值的这一种情况,将自身的曲线变得很扭曲,以至于可以拟合所以的点,达到代价值很低的这种情况。
我们知道,第一种情况是我们想要的,但是第二种绝对不是我们想要的。在模型训练中,其实很容易出现过拟合的情况,所以为了缓解这种情况轻易的发生,我们需要对代价函数做一些改变。
在模型的训练过程中,没一次训练,都会有一组权重参数产生,我们给所有组的权重参数同时加上一个相对相同的值,其实并不影响谁最后是最小值,同加同减,最后最小的还是最小的。所以我们决定为代价函数加上一点点惩罚,就是当模型出现过拟合而导致代价很低时,我们要加上一个很大的数,将代价值提起来,来告诉模型,这并不是我们想要的。这就是正则化项的功能。
对于恰好拟合的参数来说,加入正则化项,其值对代价整体并没有很大的影响。
正则化分为l1正则化,和l2正则化
这里介绍的是l2正则化。
l2正则化是为原来的代价函数加上所有参数theta的均方和,因为在发生过拟合的时候,曲线过于弯曲会导致某一项的theta值很大,所以加上theta的均方和,会使即使过拟合的代价不大,也会因为正则化项而使代价值变大,大到不符合我们的期望。

2017-04-14 12:08:13 YCM1101743158 阅读数 44928
  • 人工智能之机器学习算法的介绍

    机器学习算法入门教程,主要介绍人工智障机器学习常见算法,包括决策树、基于概率论的分类方法:朴素贝叶斯、Logistic回归、支持向量机、第利用AdaBoost元算法提高分类性能。

    4275 人正在学习 去看看 CSDN讲师
       机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。本文为您总结一下常见的机器学习算法,以供您在工作和学习中参考。

       机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性。

学习方式

根据数据类型的不同,对一个问题的建模有不同的方式。在机器学习或者人工智能领域,人们首先会考虑算法的学习方式。在机器学习领域,有几种主要的学习方式。将算法按照学习方式分类是一个不错的想法,这样可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果。

监督式学习:

 

1479572800-6899-evMLVhLXNyCVuzslOH6trnicCxIA

在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。常见算法有逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network)。

非监督式学习:

1479572801-7126-ekuYvKanIu4oBcJLm4yvfbDYos0g

在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。

半监督式学习:

1479572801-6242-FrMf8f7298cBr0DPW5flDlDMicIw

在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。

 

强化学习:

1479572801-3762-Y2Xia0H1SegEtIt80ZphH1rueoxg

在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。常见的应用场景包括动态系统以及机器人控制等。常见算法包括Q-Learning以及时间差学习(Temporal difference learning)

 

在企业数据应用的场景下, 人们最常用的可能就是监督式学习和非监督式学习的模型。 在图像识别等领域,由于存在大量的非标识的数据和少量的可标识数据, 目前半监督式学习是一个很热的话题。 而强化学习更多的应用在机器人控制及其他需要进行系统控制的领域。

 

算法类似性

根据算法的功能和形式的类似性,我们可以把算法分类,比如说基于树的算法,基于神经网络的算法等等。当然,机器学习的范围非常庞大,有些算法很难明确归类到某一类。而对于有些分类来说,同一分类的算法可以针对不同类型的问题。这里,我们尽量把常用的算法按照最容易理解的方式进行分类。

回归算法:

1479572801-1279-psQzicMbvjWArXBU2JNAOPBODxPA

回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。在机器学习领域,人们说起回归,有时候是指一类问题,有时候是指一类算法,这一点常常会使初学者有所困惑。常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)。

基于实例的算法

1479572801-1131-ac78ib7ynEpxJzhsOGARzvdvicKA

基于实例的算法常常用来对决策问题建立模型,这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较。通过这种方式来寻找最佳的匹配。因此,基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map , SOM)

正则化方法

1479572801-7007-cm573ULFNhgoEA8EJujubjLDb2qA

正则化方法是其他算法(通常是回归算法)的延伸,根据算法的复杂度对算法进行调整。正则化方法通常对简单模型予以奖励而对复杂算法予以惩罚。常见的算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator(LASSO),以及弹性网络(Elastic Net)。

 

决策树学习

1479572801-4358-PiaYUw7zqu3954RyeBwhTHkHWk6Q

决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。常见的算法包括:分类及回归树(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine, GBM)

 

贝叶斯方法

1479572802-1427-c3vzbPgNXvHoaaNyzGPlN8PBGZFw

贝叶斯方法算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN)。

基于核的算法

1479572802-7140-pibItcdx0RaA35mJGsoZKgBpPmzA

基于核的算法中最著名的莫过于支持向量机(SVM)了。 基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题能够更容易的解决。 常见的基于核的算法包括:支持向量机(Support Vector Machine, SVM), 径向基函数(Radial Basis Function ,RBF), 以及线性判别分析(Linear Discriminate Analysis ,LDA)等

聚类算法

1479572802-3592-ibHWZ7EllSXgcrDJB9wKJVwbaQ2Q

聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM)。

关联规则学习

1479572802-6857-9tm3bibPFEcJ9w2KBxLV7mRn1exQ

关联规则学习通过寻找最能够解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。

 

人工神经网络

1479572803-5509-3CeY57PHXriauFqH1dVnOmP3P4RA

 

人工神经网络算法模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论),重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation), Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)

 

深度学习

1479572802-5101-zwjPk6sicl7s6PDnQWfsibJZ4SDQ

深度学习算法是对人工神经网络的发展。 在近期赢得了很多关注, 特别是百度也开始发力深度学习后, 更是在国内引起了很多关注。 在计算能力变得日益廉价的今天,深度学习试图建立大得多也复杂得多的神经网络。很多深度学习的算法是半监督式学习算法,用来处理存在少量未标识数据的大数据集。常见的深度学习算法包括:受限波尔兹曼机(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷积网络(Convolutional Network), 堆栈式自动编码器(Stacked Auto-encoders)。

 

降低维度算法

1479572803-3312-5jc4UiaQCF66HAQia3icnwxyYK2A

像聚类算法一样,降低维度算法试图分析数据的内在结构,不过降低维度算法是以非监督学习的方式试图利用较少的信息来归纳或者解释数据。这类算法可以用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS), Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(Projection Pursuit)等。

 

集成算法:

1479572803-6688-tf1SIoQxZaasKHftspLAvvpDWANQ

集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆叠泛化(Stacked Generalization, Blending),梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。

决策树

一、  决策树优点

1、决策树易于理解和解释,可以可视化分析,容易提取出规则。

2、可以同时处理标称型和数值型数据。

3、测试数据集时,运行速度比较快。

4、决策树可以很好的扩展到大型数据库中,同时它的大小独立于数据库大小。

二、决策树缺点

1、对缺失数据处理比较困难。

2、容易出现过拟合问题。

3、忽略数据集中属性的相互关联。

4、ID3算法计算信息增益时结果偏向数值比较多的特征。

三、改进措施

1、对决策树进行剪枝。可以采用交叉验证法和加入正则化的方法。

2、使用基于决策树的combination算法,如bagging算法,randomforest算法,可以解决过拟合的问题

三、应用领域

企业管理实践,企业投资决策,由于决策树很好的分析能力,在决策过程应用较多。

 

KNN算法

一、KNN算法的优点

 

1、KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练

2、KNN理论简单,容易实现

二、KNN算法的缺点

1、对于样本容量大的数据集计算量比较大。

2、样本不平衡时,预测偏差比较大。如:某一类的样本比较少,而其它类样本比较多。

3、KNN每一次分类都会重新进行一次全局运算。

4、k值大小的选择。

三、KNN算法应用领域

文本分类、模式识别、聚类分析,多分类领域

支持向量机(SVM)

一、  SVM优点

1、解决小样本下机器学习问题。

2、解决非线性问题。

3、无局部极小值问题。(相对于神经网络等算法)

4、可以很好的处理高维数据集。

5、泛化能力比较强。

二、SVM缺点

1、对于核函数的高维映射解释力不强,尤其是径向基函数。

2、对缺失数据敏感。

三、SVM应用领域

文本分类、图像识别、主要二分类领域

AdaBoost算法

一、  AdaBoost算法优点

1、很好的利用了弱分类器进行级联。

2、可以将不同的分类算法作为弱分类器。

3、AdaBoost具有很高的精度。

4、相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重。

二、Adaboost算法缺点

1、AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定。

2、数据不平衡导致分类精度下降。

3、训练比较耗时,每次重新选择当前分类器最好切分点。

三、AdaBoost应用领域

模式识别、计算机视觉领域,用于二分类和多分类场景

朴素贝叶斯算法

一、  朴素贝叶斯算法优点

1、对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已。

2、支持增量式运算。即可以实时的对新增的样本进行训练。

3、朴素贝叶斯对结果解释容易理解。

二、朴素贝叶斯缺点

1、由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好。

三、朴素贝叶斯应用领域

文本分类、欺诈检测中使用较多

Logistic回归算法

一、logistic回归优点

1、计算代价不高,易于理解和实现

二、logistic回归缺点

1、容易产生欠拟合。

2、分类精度不高。

三、logistic回归应用领域

用于二分类领域,可以得出概率值,适用于根据分类概率排名的领域,如搜索排名等。

Logistic回归的扩展softmax可以应用于多分类领域,如手写字识别等。

人工神经网络

一、  神经网络优点

1、分类准确度高,学习能力极强。

2、对噪声数据鲁棒性和容错性较强。

3、有联想能力,能逼近任意非线性关系。

二、神经网络缺点

1、神经网络参数较多,权值和阈值。

2、黑盒过程,不能观察中间结果。

3、学习过程比较长,有可能陷入局部极小值。

三、人工神经网络应用领域

目前深度神经网络已经应用与计算机视觉,自然语言处理,语音识别等领域并取得很好的效果。

 ===============================================================================================

原文:http://suanfazu.com/t/qian-tan-wo-dui-ji-qi-xue-xi-de-dian-li-jie/305

机器学习方法非常多,也很成熟。下面我挑几个说。

  1. 首先是SVM。因为我做的文本处理比较多,所以比较熟悉SVM。SVM也叫支持向量机,其把数据映射到多维空间中以点的形式存在,然后找到能够分类的最优超平面,最后根据这个平面来分类。SVM能对训练集之外的数据做很好的预测、泛化错误率低、计算开销小、结果易解释,但其对参数调节和核函数的参数过于敏感。个人感觉SVM是二分类的最好的方法,但也仅限于二分类。如果要使用SVM进行多分类,也是在向量空间中实现多次二分类。
    SVM有一个核心函数SMO,也就是序列最小最优化算法。SMO基本是最快的二次规划优化算法,其核心就是找到最优参数α,计算超平面后进行分类。SMO方法可以将大优化问题分解为多个小优化问题求解,大大简化求解过程。某些条件下,把原始的约束问题通过拉格朗日函数转化为无约束问题,如果原始问题求解棘手,在满足KKT的条件下用求解对偶问题来代替求解原始问题,使得问题求解更加容易。 SVM还有一个重要函数是核函数。核函数的主要作用是将数据从低位空间映射到高维空间。详细的内容我就不说了,因为内容实在太多了。总之,核函数可以很好的解决数据的非线性问题,而无需考虑映射过程。

  2. 第二个是KNN。KNN将测试集的数据特征与训练集的数据进行特征比较,然后算法提取样本集中特征最近邻数据的分类标签,即KNN算法采用测量不同特征值之间的距离的方法进行分类。KNN的思路很简单,就是计算测试数据与类别中心的距离。KNN具有精度高、对异常值不敏感、无数据输入假定、简单有效的特点,但其缺点也很明显,计算复杂度太高。要分类一个数据,却要计算所有数据,这在大数据的环境下是很可怕的事情。而且,当类别存在范围重叠时,KNN分类的精度也不太高。所以,KNN比较适合小量数据且精度要求不高的数据。
    KNN有两个影响分类结果较大的函数,一个是数据归一化,一个是距离计算。如果数据不进行归一化,当多个特征的值域差别很大的时候,最终结果就会受到较大影响;第二个是距离计算。这应该算是KNN的核心了。目前用的最多的距离计算公式是欧几里得距离,也就是我们常用的向量距离计算方法。
    个人感觉,KNN最大的作用是可以随时间序列计算,即样本不能一次性获取只能随着时间一个一个得到的时候,KNN能发挥它的价值。至于其他的特点,它能做的,很多方法都能做;其他能做的它却做不了。

  3. 第三个就是Naive Bayes了。Naive Bayes简称NB(牛X),为啥它牛X呢,因为它是基于Bayes概率的一种分类方法。贝叶斯方法可以追溯到几百年前,具有深厚的概率学基础,可信度非常高。Naive Baye中文名叫朴素贝叶斯,为啥叫“朴素”呢?因为其基于一个给定假设:给定目标值时属性之间相互条件独立。比如我说“我喜欢你”,该假设就会假定“我”、“喜欢”、“你”三者之间毫无关联。仔细想想,这几乎是不可能的。马克思告诉我们:事物之间是有联系的。同一个事物的属性之间就更有联系了。所以,单纯的使用NB算法效率并不高,大都是对该方法进行了一定的改进,以便适应数据的需求。
    NB算法在文本分类中用的非常多,因为文本类别主要取决于关键词,基于词频的文本分类正中NB的下怀。但由于前面提到的假设,该方法对中文的分类效果不好,因为中文顾左右而言他的情况太多,但对直来直去的老美的语言,效果良好。至于核心算法嘛,主要思想全在贝叶斯里面了,没啥可说的。

  4. 第四个是回归。回归有很多,Logistic回归啊、岭回归啊什么的,根据不同的需求可以分出很多种。这里我主要说说Logistic回归。为啥呢?因为Logistic回归主要是用来分类的,而非预测。回归就是将一些数据点用一条直线对这些点进行拟合。而Logistic回归是指根据现有数据对分类边界线建立回归公式,以此进行分类。该方法计算代价不高,易于理解和实现,而且大部分时间用于训练,训练完成后分类很快;但它容易欠拟合,分类精度也不高。主要原因就是Logistic主要是线性拟合,但现实中很多事物都不满足线性的。即便有二次拟合、三次拟合等曲线拟合,也只能满足小部分数据,而无法适应绝大多数数据,所以回归方法本身就具有局限性。但为什么还要在这里提出来呢?因为回归方法虽然大多数都不合适,但一旦合适,效果就非常好。
    Logistic回归其实是基于一种曲线的,“线”这种连续的表示方法有一个很大的问题,就是在表示跳变数据时会产生“阶跃”的现象,说白了就是很难表示数据的突然转折。所以用Logistic回归必须使用一个称为“海维塞德阶跃函数”的Sigmoid函数来表示跳变。通过Sigmoid就可以得到分类的结果。
    为了优化Logistic回归参数,需要使用一种“梯度上升法”的优化方法。该方法的核心是,只要沿着函数的梯度方向搜寻,就可以找到函数的最佳参数。但该方法在每次更新回归系数时都需要遍历整个数据集,对于大数据效果还不理想。所以还需要一个“随机梯度上升算法”对其进行改进。该方法一次仅用一个样本点来更新回归系数,所以效率要高得多。

  5. 第五个是决策树。据我了解,决策树是最简单,也是曾经最常用的分类方法了。决策树基于树理论实现数据分类,个人感觉就是数据结构中的B+树。决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。决策树计算复杂度不高、输出结果易于理解、对中间值缺失不敏感、可以处理不相关特征数据。其比KNN好的是可以了解数据的内在含义。但其缺点是容易产生过度匹配的问题,且构建很耗时。决策树还有一个问题就是,如果不绘制树结构,分类细节很难明白。所以,生成决策树,然后再绘制决策树,最后再分类,才能更好的了解数据的分类过程。
    决策树的核心树的分裂。到底该选择什么来决定树的分叉是决策树构建的基础。最好的方法是利用信息熵实现。熵这个概念很头疼,很容易让人迷糊,简单来说就是信息的复杂程度。信息越多,熵越高。所以决策树的核心是通过计算信息熵划分数据集。

  6. 我还得说一个比较特殊的分类方法:AdaBoost。AdaBoost是boosting算法的代表分类器。boosting基于元算法(集成算法)。即考虑其他方法的结果作为参考意见,也就是对其他算法进行组合的一种方式。说白了,就是在一个数据集上的随机数据使用一个分类训练多次,每次对分类正确的数据赋权值较小,同时增大分类错误的数据的权重,如此反复迭代,直到达到所需的要求。AdaBoost泛化错误率低、易编码、可以应用在大部分分类器上、无参数调整,但对离群点敏感。该方法其实并不是一个独立的方法,而是必须基于元方法进行效率提升。个人认为,所谓的“AdaBoost是最好的分类方法”这句话是错误的,应该是“AdaBoost是比较好的优化方法”才对。

好了,说了这么多了,我有点晕了,还有一些方法过几天再写。总的来说,机器学习方法是利用现有数据作为经验让机器学习,以便指导以后再次碰到的决策。目前来说,对于大数据分类,还是要借助分布式处理技术和云技术才有可能完成,但一旦训练成功,分类的效率还是很可观的,这就好比人年龄越大看待问题越精准的道理是一样的。这八个月里,从最初的理解到一步步实现;从需求的逻辑推断到实现的方法选择,每天都是辛苦的,但每天也都是紧张刺激的。我每天都在想学了这个以后可以实现什么样的分类,其实想想都是让人兴奋的。当初,我逃避做程序员,主要原因就是我不喜欢做已经知道结果的事情,因为那样的工作没有什么期盼感;而现在,我可以利用数据分析得到我想象不到的事情,这不仅满足了我的好奇感,也让我能在工作中乐在其中。也许,我距离社会的技术需求还有很远的距离,但我对自己充满信心,因为,我不感到枯燥,不感到彷徨,虽然有些力不从心,但态度坚定。

 

 

===================================================

http://blog.csdn.NET/vola9527/article/details/43347747

简述机器学习十大算法的每个算法的核心思想、工作原理、适用情况及优缺点等。

1)C4.5算法:

ID3算法是以信息论为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的归纳分类。ID3算法计算每个属性的信息增益,并选取具有最高增益的属性作为给定的测试属性。

C4.5算法核心思想是ID3算法,是ID3算法的改进,改进方面有:

1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;

2)在树构造过程中进行剪枝

3)能处理非离散的数据

4)能处理不完整的数据

 C4.5算法优点:产生的分类规则易于理解,准确率较高。

缺点:

1)在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。

2)C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

 

2)K means 算法

是一个简单的聚类算法,把n的对象根据他们的属性分为k个分割,k< n。 算法的核心就是要优化失真函数J,使其收敛到局部最小值但不是全局最小值。

其中N为样本数,K是簇数,rnk b表示n属于第k个簇,uk 是第k个中心点的值。然后求出最优的uk

 

优点:算法速度很快

缺点是,分组的数目k是一个输入参数,不合适的k可能返回较差的结果。

 

 

3)朴素贝叶斯算法:

朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。算法的基础是概率问题,分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。朴素贝叶斯假设是约束性很强的假设,假设特征条件独立,但朴素贝叶斯算法简单,快速,具有较小的出错率。

在朴素贝叶斯的应用中,主要研究了电子邮件过滤以及文本分类研究。

 

4)K最近邻分类算法(KNN)

分类思想比较简单,从训练样本中找出K个与其最相近的样本,然后看这k个样本中哪个类别的样本多,则待判定的值(或说抽样)就属于这个类别。

缺点:

1)K值需要预先设定,而不能自适应

2)当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

该算法适用于对样本容量比较大的类域进行自动分类。

 

 

5)EM最大期望算法

EM算法是基于模型的聚类方法,是在概率模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量。E步估计隐含变量,M步估计其他参数,交替将极值推向最大。

EM算法比K-means算法计算复杂,收敛也较慢,不适于大规模数据集和高维数据,但比K-means算法计算结果稳定、准确。EM经常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。

 

6)PageRank算法

是google的页面排序算法,是基于从许多优质的网页链接过来的网页,必定还是优质网页的回归关系,来判定所有网页的重要性。(也就是说,一个人有着越多牛X朋友的人,他是牛X的概率就越大。)

优点:

完全独立于查询,只依赖于网页链接结构,可以离线计算。

缺点:

1)PageRank算法忽略了网页搜索的时效性。

2)旧网页排序很高,存在时间长,积累了大量的in-links,拥有最新资讯的新网页排名却很低,因为它们几乎没有in-links。

 

7)AdaBoost

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

整个过程如下所示:
1. 先通过对N个训练样本的学习得到第一个弱分类器;
2. 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器;
3. 将和都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
4. 如此反复,最终得到经过提升的强分类器。

目前AdaBoost算法广泛的应用于人脸检测、目标识别等领域。

 

8)Apriori算法

Apriori算法是一种挖掘关联规则的算法,用于挖掘其内含的、未知的却又实际存在的数据关系,其核心是基于两阶段频集思想的递推算法 。

Apriori算法分为两个阶段:

1)寻找频繁项集

2)由频繁项集找关联规则

算法缺点:

1) 在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;

2) 每次计算项集的支持度时,都对数据库中    的全部记录进行了一遍扫描比较,需要很大的I/O负载。

 

9)SVM支持向量机

支持向量机是一种基于分类边界的方法。其基本原理是(以二维数据为例):如果训练数据分布在二维平面上的点,它们按照其分类聚集在不同的区域。基于分类边界的分类算法的目标是,通过训练,找到这些分类之间的边界(直线的――称为线性划分,曲线的――称为非线性划分)。对于多维数据(如N维),可以将它们视为N维空间中的点,而分类边界就是N维空间中的面,称为超面(超面比N维空间少一维)。线性分类器使用超平面类型的边界,非线性分类器使用超曲面。

支持向量机的原理是将低维空间的点映射到高维空间,使它们成为线性可分,再使用线性划分的原理来判断分类边界。在高维空间中是一种线性划分,而在原有的数据空间中,是一种非线性划分。

SVM在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

 

 

 

10)CART分类与回归树

是一种决策树分类方法,采用基于最小距离的基尼指数估计函数,用来决定由该子数

据集生成的决策树的拓展形。如果目标变量是标称的,称为分类树;如果目标变量是连续的,称为回归树。分类树是使用树结构算法将数据分成离散类的方法。

优点

1)非常灵活,可以允许有部分错分成本,还可指定先验概率分布,可使用自动的成本复杂性剪枝来得到归纳性更强的树。

2)在面对诸如存在缺失值、变量数多等问题时CART 显得非常稳健。







文章参考http://blog.csdn.net/u012422446/article/details/53034260


2016-08-21 23:26:48 JIEJINQUANIL 阅读数 32349
  • 人工智能之机器学习算法的介绍

    机器学习算法入门教程,主要介绍人工智障机器学习常见算法,包括决策树、基于概率论的分类方法:朴素贝叶斯、Logistic回归、支持向量机、第利用AdaBoost元算法提高分类性能。

    4275 人正在学习 去看看 CSDN讲师

       机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。本文总结一下常见的机器学习算法,以供参考。机器学习的算法很多,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里从两个方面进行总结,第一个方面是学习的方式,第二个方面是算法的类似性。

一、学习方式

       根据数据类型的不同,对一个问题的建模有不同的方式。在机器学习或者人工智能领域,人们首先会考虑算法的学习方式。将算法按照学习方式分类是一个不错的想法,这样可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果。在机器学习领域,有几种主要的学习方式:监督学习非监督学习半监督学习强化学习

1、监督式学习:

       在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。常见监督式学习算法有决策树学习(ID3,C4.5等),朴素贝叶斯分类,最小二乘回归,逻辑回归(Logistic Regression),支撑矢量机,集成方法以及反向传递神经网络(Back Propagation Neural Network)等等。

2、非监督式学习:

       在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见非监督学习算法包括奇异值分解、主成分分析,独立成分分析,Apriori算法以及k-Means算法等等。

3、半监督式学习:

       在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM)等。

4、强化学习:

       在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。常见的应用场景包括动态系统以及机器人控制等。常见算法包括Q-Learning以及时间差学习(Temporal difference learning)。在企业数据应用的场景下, 人们最常用的可能就是监督式学习和非监督式学习的模型。 在图像识别等领域,由于存在大量的非标识的数据和少量的可标识数据, 目前半监督式学习是一个很热的话题。 而强化学习更多的应用在机器人控制及其他需要进行系统控制的领域。

二、算法类似性

       根据算法的功能和形式的类似性,我们可以把算法分类,比如说基于树的算法,基于神经网络的算法等等。当然,机器学习的范围非常庞大,有些算法很难明确归类到某一类。而对于有些分类来说,同一分类的算法可以针对不同类型的问题。这里,我们尽量把常用的算法按照最容易理解的方式进行分类。

1、回归算法:

       回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。在机器学习领域,人们说起回归,有时候是指一类问题,有时候是指一类算法,这一点常常会使初学者有所困惑。常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)。

       通常,回归可以被用于在现实世界的应用,如:

  • 信用评分
  • 度量营销活动的成功率
  • 预测某一产品的收入
  • 在一个特定的日子里会发生地震吗?

2、基于实例的算法

 

       基于实例的算法常常用来对决策问题建立模型,这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较。通过这种方式来寻找最佳的匹配。因此,基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map , SOM)。

3、正则化方法

       正则化方法是其他算法(通常是回归算法)的延伸,根据算法的复杂度对算法进行调整。正则化方法通常对简单模型予以奖励而对复杂算法予以惩罚。常见的算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator(LASSO),以及弹性网络(Elastic Net)。

4、决策树学习

       决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。常见的算法包括:分类及回归树(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine, GBM)。

5、贝叶斯方法

       贝叶斯方法算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN)。

       一些现实中的例子:

  • 标记一个电子邮件为垃圾邮件或非垃圾邮件
  • 将新闻文章分为技术类、政治类或体育类
  • 检查一段文字表达积极的情绪,或消极的情绪?
  • 用于人脸识别软件

6、基于核的算法

 

       基于核的算法中最著名的莫过于支持向量机(SVM)了。 基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题能够更容易的解决。 常见的基于核的算法包括:支持向量机(Support Vector Machine, SVM), 径向基函数(Radial Basis Function ,RBF), 以及线性判别分析(Linear Discriminate Analysis ,LDA)等。

       就规模而言,其中一些最主要的问题已经使用支持向量机解决了(通过适当的修改),如,入广告显示,人类的剪接位点识别,基于图像的性别检测,大规模图像分类等等。

7、聚类算法

 

       聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM)。


每一种聚类算法都不太一样,这里有一些:

  • 基于质心的算法
  • 基于连通性的算法
  • 基于密度的算法
  • 概率聚类
  • 降维
  • 神经网络/深度学习

8、关联规则学习

 

       关联规则学习通过寻找最能够解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。

9、人工神经网络

 

       人工神经网络算法模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论),重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation), Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)。

10、深度学习

 

       深度学习算法是对人工神经网络的发展。 在近期赢得了很多关注, 特别是百度也开始发力深度学习后, 更是在国内引起了很多关注。   在计算能力变得日益廉价的今天,深度学习试图建立大得多也复杂得多的神经网络。很多深度学习的算法是半监督式学习算法,用来处理存在少量未标识数据的大数据集。常见的深度学习算法包括:受限波尔兹曼机(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷积网络(Convolutional Network), 堆栈式自动编码器(Stacked Auto-encoders)。

11、降低维度算法

 

       像聚类算法一样,降低维度算法试图分析数据的内在结构,不过降低维度算法是以非监督学习的方式试图利用较少的信息来归纳或者解释数据。这类算法可以用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS), Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS),  投影追踪(Projection Pursuit)等。


奇异值分解示意图


PCA降维示意图


独立成分分析示意图

       其中,ICA 和 PCA 是相关的,但是它是一种更强大的技术,当那些经典的方法完全失效的时候,它能够从数据源中发现潜在的因素。它的应用包括数字图像,文档数据库,经济指标和心理测量。

12、集成算法:


       集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆叠泛化(Stacked Generalization, Blending),梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。

那么集成方法是怎样工作的,为什么他们会优于单个的模型?

  • 他们拉平了输出偏差:如果你将具有民主党倾向的民意调查和具有共和党倾向的民意调查取平均,你将得到一个中和的没有倾向一方的结果。
  • 它们减小了方差:一堆模型的聚合结果和单一模型的结果相比具有更少的噪声。在金融领域,这被称为多元化——多只股票的混合投资要比一只股票变化更小。这就是为什么数据点越多你的模型会越好,而不是数据点越少越好。
  • 它们不太可能产生过拟合:如果你有一个单独的没有过拟合的模型,你是用一种简单的方式(平均,加权平均,逻辑回归)将这些预测结果结合起来,然后就没有产生过拟合的空间了。


参考资料:

机器学习常见算法分类汇总

ML 工程师需了解的 10 大算法

机器学习10大经典算法

2018-08-09 15:24:29 thormas1996 阅读数 510
  • 人工智能之机器学习算法的介绍

    机器学习算法入门教程,主要介绍人工智障机器学习常见算法,包括决策树、基于概率论的分类方法:朴素贝叶斯、Logistic回归、支持向量机、第利用AdaBoost元算法提高分类性能。

    4275 人正在学习 去看看 CSDN讲师


机器学习算法总结

生成模型 or 判别模型:

生成模型学习的是联合分布概率P(x, y),再去求后验概率P(y|x),关心的同类样本之间的相似度。
包括逻辑回归,k近邻,感知器,支持向量机,决策树等。

判别模型则不关心样本是如何生成的,学习的是条件概率P(y|x)或者决策函数,关心的是异类样本之间的差异。
包括朴素贝叶斯,马尔科夫模型,高斯混合模型。

生成方法可以还原出联合概率分布,而判别方法不能。
当存在隐变量时,仍然可以用生成方法学习,此时判别方法不能用。
生成模型可以用于判别,但判别模型无法生成。
判别方法利用了训练数据的类别标识信息,直接学习的是条件概率P(Y|X)或者决策函数f(X),直接面对预测,往往学习的准确率更高。
由于直接学习条件概率P(Y|X)或者决策函数f(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。
判别模型的缺点是不能反映训练数据本身的特性。

回归模型 or 分类模型

回归输出是连续变量,目的是找到最优拟合,损失函数一般用方差定义。
分类输出是离散变量,目的是找到决策边界,损失函数一般用准确率或者混淆矩阵定义。

1. 朴素贝叶斯模型

模型

P(y|x)=P(x|y)P(y)P(x)

P(y|x)是后验概率,P(x|y) 是似然概率,P(y)是先验概率

例子:堵车的因素假设有两种,交通事故或者天气原因。交通事故是先验概率,P(堵车|交通事故)是似然概率(由因求果),P(交通事故|堵车)是后验概率(由果求因)

一般可以写为:

P(|)=P(|)P()P()

朴素贝叶斯就是在给定先验概率和似然概率的条件下,选择一个类别y使得后验概率最大:

y=argmaxyP(y|x)=argmaxyP(x|y)P(y)

评价
朴素贝叶斯模型属于生成模型,前提是每个特征需要满足独立条件。因为只需要计数,模型非常简单,对于小样本或者满足独立假设的样本收敛速度非常快,主要缺点是它不能学习特征间的相互作用。

例子:虽然你喜欢Brad Pitt和Tom Cruise的电影,但是它不能学习出你不喜欢他们在一起演的电影。

朴素贝叶斯一般是分类模型,也可以是回归模型,得到连续的的p(y|x)后对y求期望就能得到连续的输出。

优缺点

  • 优点
    对小规模的数据表现很好,能处理多分类任务。
    对缺失数据不太敏感,算法也比较简单,常用于文本分类。
    当样本很多时,可以分批训练,即可以增量式训练。

  • 缺点
    对于属性较多或者属性之间关联性较大的情况,效果很差,容易欠拟合。
    需要计算先验概率,先验模型对预测结果有很大影响。
    由于通过先验和条件概率计算后验概率,所以分类决策存在一定的错误率。

  • 改进
    先对关联性大的属性聚类,再用朴素贝叶斯分类;

2. 逻辑回归

模型

y=11+ez

lny1y=z=wTx+b

损失函数:
如果直接用方差,loss函数不是convex的,就无法用梯度下降求解。
将y视为后验估计P(y=1|x),有

P(y=1|x)=11+ez=ϕ(z)

P(y=0|x)=ez1+ez=1ϕ(z)

损失函数L为

ly=ϕ(z)y×(1ϕ(z))1y

L=ylnly=yylnϕ(z)(1y)ln(1ϕ(z))

评价
逻辑回归是判别模型&分类模型,对于样本是二项分布的二分类问题且希望得到概率值结果时适用,对远点的样本敏感(即远离中间的样本)。

优缺点
- 优点
实现简单,分类时计算量非常小,速度很快,存储资源低。
可以观测样本概率值。

  • 缺点
    当特征空间很大时,逻辑回归的性能不是很好。
    因为模型简单,所以容易欠拟合,一般准确度不太高。
    不能很好地处理大量多类特征或变量。
    只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分。

3. KNN(K近邻)

模型
记录训练集所有数据和标签,对于测试数据,取最近k个样本的类别中数量最多一类为该数据的类别。

优缺点

  • 优点
    精度高
    对异常值不敏感
    无数据输入假定
    简单有效,并且可以随时加入新样本

  • 缺点
    复杂度太高,计算成本大,需要大量内存
    当类别存在范围重叠时,KNN分类的精度不太高

4. 感知机

模型

f(x)=sign(wx+b)

训练时:

w(t)=w(t1)+yixi

b(t)=b(t1)+yi

前馈神经网络的基础模型

5. SVM

模型
边界为

ωTx+b=0

两个类别最近的点分别在

ωTx+b=1

ωTx+b=1

最大化间隔

max2||ω||

转为一个凸优化问题:

min12||ω||2

s.t.yi(ωTxi+b)1

等价于一个拉格朗日优化问题:

L=12||ω||2+i=1mαi(1yi(ωTxi+b))

ω和b求偏导为零,得到:

ω=i=1mαiyixi

i=1mαiyi=0

转化为对偶问题:

maxi=1mαi12i=1mj=1mαiαjyiyjxiTxj

s.t.i=1mαiyi=0

解出α后可得ω和b,即可得模型

y(x)=ωTx+b

KKT 条件:
αi0
yif(x1)10
αi(yif(xi)1)=0

可以看到如果αi > 0,那么yif(xi)=1,表示该点在最大间隔边界上,反之,若αi = 0,该点对f(xi)无影响。所以SVM只考虑了边界上的点,这些有影响的被称为支持向量。

解出α可以用SMO算法,简单来说,第一步选取一对需要更新的αiαj,第二步根据对偶问题的式子求解αiαj

优缺点

  • 优点
    可以解决高维问题,即大型特征空间。
    能够处理非线性特征的相互作用。
    无需依赖整个数据。
    可以提高泛化能力。

  • 缺点
    当观测样本很多时,效率并不是很高。
    对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数。
    对缺失数据敏感。

5. 决策树

模型
划分方法:最小化信息熵,最小化Gini系数
Entropy=pklog2pk
Gini=1pk2

为了防止过拟合,决策树可以用剪枝来提升泛化能力,判断泛化能力是根据预先分为test和valid集,看其在valid中的表现。剪枝分为两种,预剪枝是指在划分前估计当前结点的划分是否能提升决策树泛化能力,如果不能就设为叶结点。还有一种是后剪枝,先构建一颗完整的决策树,再由底往上考虑,如果当前结点替换为叶结点能提升泛化能力,则当前结点为叶结点。

优点
- 优点
计算简单,易于理解,可解释性强。
比较适合处理有缺失属性的样本。
能够处理不相关的特征。
在相对短的时间内能够对大型数据源做出可行且效果良好的结果。

  • 缺点
    容易发生过拟合(随机森林可以很大程度上减少过拟合)。
    忽略了数据之间的相关性。
    对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征(只要是使用了信息增益,都有这个缺点,如RF)。

6. 集成学习

boosting & bagging
boosting 是每次迭代会给错误的样本更高的权重使得下一个弱分类器能正确观察到错的地方。最后由几个弱分类器加起来,根据准确率给每个分类器一个投票的权重。
bagging 是每次随机抽m个样本训练一个分类器,重复k次,从这k个分类其中选择表现最好的作为结果。

随机森林
bagging的代表,每个分类器均为决策树

  • 优点
    不容易出现过拟合,因为选择训练样本的时候就不是全部样本。
    可以既可以处理属性为离散值的量,比如ID3算法来构造树,也可以处理属性为连续值的量,比如C4.5算法来构造树。
    对于高维数据集的处理能力令人兴奋,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出变量的重要性程度,这是一个非常便利的功能。
    分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法

  • 缺点
    随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。
    对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子——你几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。

Adaboost
boosting的代表

  • 优点
    可以使用各种方法构造子分类器,Adaboost算法提供的是框架
    简单,不用做特征筛选
    相比较于RF,更不用担心过拟合问题

  • 缺点
    从wiki上介绍的来看,adaboost对于噪音数据和异常数据是十分敏感的。Boosting方法本身对噪声点异常点很敏感,因此在每次迭代时候会给噪声点较大的权重,这不是我们系统所期望的。
    运行速度慢,凡是涉及迭代的基本上都无法采用并行计算,Adaboost是一种”串行”算法.所以GBDT(Gradient Boosting Decision Tree)也非常慢。

GBDT
boosting的代表之一,每次是对残差建立新的分类器。

  • 优点
    非线性变换多,表达能力强,不需要做太多的特征选择

  • 缺点
    计算复杂度大,串行过程,无法并行

XGBoost
GBDT的改进,可以并行,loss函数中自带正则化,相当于加了剪枝,防止模型过拟合。

7. kmeans

模型
(1)随机选择k个样本作为k各类别的中心
(2)根据距离将样本归于每一个类别,然后对每一类别再计算中心样本
反复重复上述步骤,直至收敛。
优缺点
- 优点
算法简单,容易实现。
对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k远小于n。这个算法通常局部收敛。
当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

  • 缺点
    对数据类型要求较高,适合数值型数据。
    可能收敛到局部最小值,在大规模数据上收敛较慢。
    K值比较难以选取。
    对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果。
    不适合于发现非凸面形状的簇,或者大小差别很大的簇。
    对于”噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

8. EM

模型
利用琴生不等式E[f(X)]f(EX)构造下界函数:
最大似然函数为

l(θ)=i=1mlogp(x|θ)=i=1mlogzp(x,z|θ)

上式 = i=1mlogzQ(z)p(x,z|θ)Q(z)i=1mzQ(z)logp(x,z|θ)Q(z)

不等式中左边视为求Q(z)平均分布的函数,即x=Q(z) ; f(x)=p(x,z|θ)Q(z)
logx是一个凸函数,有 logE(p(x,z|θ))Q(z))E(logp(x,z|θ))Q(z))
再用琴生不等式即可得上面右边结果

下界在取等号时成立,Q(z)=p(z|x,θ)

算法

1.(E步)固定一组参数θ,计算该参数下的隐变量的期望值Q(z) ,即计算各样本属于zi的概率。

Q(z)=p(z|x,θ)

2.(M步)固定求得的Q,最大化似然函数来求得下界函数的极大值点处的θ(t+1),作为新的参数。

θ=argmaxθi=1mzQ(z)logp(x,z|θ)Q(z)

这里写图片描述
从上图看更好理解,E step是在固定参数的条件下构造新的下界函数,满足下界函数与最大似然函数在该点的值相等。M step是在下界函数固定下,通过改变参数,找到下界函数极大值处的参数。

EM算法可以视为通过不断构造局部下界函数来逼近最大似然函数的最大值。

从连续积分的角度,将求和换为积分号并对下界做一个小变换:

l(θ)=logp(x|θ)=logp(x,z|θ)dz

l(θ)Q(z)logp(x,z|θ)Q(z)dz=Q(z)logp(z|x,θ)p(x|θ)Q(z)dz=Q(z)logp(x|θ)dzQ(z)logp(z|x,θ)Q(z)dz=logp(x|θ)+Q(z)logp(z|x,θ)Q(z)dz(Q(z)dz=1)=l(θ)KL(Q||p(z|x,θ))

这里写图片描述

似然函数l(θ)是下界和KL距离之和,那么反过去再看E和M step。E step是将KL距离取为零,此时在当前参数下似然函数与下界相等。M step就是改变参数来最小化KL距离(KL是负的),使得下界值更大,如最右边图所示。一直重复这两步,最后KL距离取到最小值,该参数就会逼近似然函数的极大值。

Reference:
机器学习算法总结归纳和分析
https://static.coggle.it/diagram/WHeBqDIrJRk-kDDY/t/categories-of-algorithms-non-exhaustive
https://zhuanlan.zhihu.com/p/25327755
朴素贝叶斯 https://www.cnblogs.com/pinard/p/6069267.html
逻辑回归 https://blog.csdn.net/zjuPeco/article/details/77165974
EM算法
http://baijiahao.baidu.com/s?id=1586809503418533687&wfr=spider&for=pc
缺失值处理
https://blog.csdn.net/w352986331qq/article/details/78639233
异常值处理
https://blog.csdn.net/u013719780/article/details/48901183

2018-08-19 19:30:55 gq930901 阅读数 150
  • 人工智能之机器学习算法的介绍

    机器学习算法入门教程,主要介绍人工智障机器学习常见算法,包括决策树、基于概率论的分类方法:朴素贝叶斯、Logistic回归、支持向量机、第利用AdaBoost元算法提高分类性能。

    4275 人正在学习 去看看 CSDN讲师

之前自己也断断续续看过一些机器学习算法,但是由于没有真正用来解决问题,每一次看都如蜻蜓点水。所以索性将其总结下来,总结过程中借鉴了许多其他博主的文章,在此深表感谢。

有这样一张图,总结了常见的算法的特点以及彼此关系:

这图中的好多算法我还都一知半解甚至不了解,接下来就会一个个填坑,首当其冲的就是参照其他博主的机器学习十大算法,具体如下:

  1. 决策树
  2. 随机森林算法
  3. 逻辑回归
  4. SVM
  5. 朴素贝叶斯
  6. K最近邻算法
  7. K均值算法
  8. Adaboost 算法
  9. 神经网络
  10. 马尔可夫

废话少说,说干就干!!!

一、决策树用于分类CART(分类回归树)

个人总结:

分类问题中,决策树就是利用一系列特征来将样本逐渐划分成不同子集,来达到分类的目的。

在构建决策树的过程中,存在特征选取的问题,一个基本的原则是所选取的特征能够使得样本划分类别的不确定性尽可能小,用来刻画样本信息的量为熵,由样本统计概率得到的熵为经验熵,信息增益定义为按照某一特征对样本集进行分类后样本集经验熵之差,是ID3算法选择特征的依据。信息增益比定义为信息增益与按某一特征划分前样本集经验熵的比,是C4.5算法选择特征的依据。此外CART算法使用 Gini 指数最小化准则来选择特征并进行划分

决策树往往泛化能力很弱,所以必须对其进行剪枝,既在其损失函数后加上正则项(损失函数的定义没看明白):

 决策树的剪枝过程(泛化过程)就是从叶子节点开始递归,记其父节点将所有子节点回缩后的子树为Tb(分类值取类别比例最大的特征值),未回缩的子树为Ta,如果Cα(Ta)≥Cα(Tb)说明回缩后使得损失函数减小了,那么应该使这棵子树回缩,递归直到无法回缩为止,这样使用“贪心”的思想进行剪枝可以降低损失函数值,也使决策树得到泛化。

CART(分类回归树)既可以用于分类也可以用于回归,回归问题中,CART使用平方误差最小化准则来选择特征并进行划分。每一个叶子节点给出的预测值,是划分到该叶子节点的所有样本目标值的均值,这样只是在给定划分的情况下最小化了平方误差。

要确定最优化分,还需要遍历所有属性,以及其所有的取值来分别尝试划分并计算在此种划分情况下的最小平方误差,选取最小的作为此次划分的依据。由于回归树生成使用平方误差最小化准则,所以又叫做最小二乘回归树。

没有更多推荐了,返回首页