人工智能机器学习常用算法总结及各个常用算法精确率对比

本文讲解了机器学习常用算法总结和各个常用分类算法精确率对比。收集了现在比较热门的TensorFlow、Sklearn,借鉴了Github和一些国内外的文章。

机器学习的知识树,这个图片是Github上的,有兴趣的可以自己去看一下:

地址:https://github.com/trekhleb/homemade-machine-learning

简单的翻译一下这个树:

英文 中文
Machine Learning 机器学习
Supervised Learning 监督学习
Unsupervised Learning 非监督学习
Reinforcement Learning 强化学习
Neural Networks and Deep Learning 神经网络与深度学习
Ensemble Learning 集成学习

以下是一部分算法的概念和应用,仅供大家参考

监督学习

监督学习可以看作是原先的预测模型,有基础的训练数据,再将需要预测的数据进行输入,得到预测的结果(不管是连续的还是离散的)

决策树(Decision Tree,DT)

决策树是一种树形结构,为人们提供决策依据,决策树可以用来回答yes和no问题,它通过树形结构将各种情况组合都表示出来,每个分支表示一次选择(选择yes还是no),直到所有选择都进行完毕,最终给出正确答案。

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。在实际构造决策树时,通常要进行剪枝,这时为了处理由于数据中的噪声和离群点导致的过分拟合问题。剪枝有两种:

先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造。

后剪枝——先构造完成完整的决策树,再通过某些条件遍历树进行剪枝。

朴素贝叶斯分类器(Naive Bayesian Model,NBM)

朴素贝叶斯分类器基于贝叶斯定理及其假设(即特征之间是独立的,是不相互影响的),主要用来解决分类和回归问题。

具体应用有:

标记一个电子邮件为垃圾邮件或非垃圾邮件;

将新闻文章分为技术类、政治类或体育类;

检查一段文字表达积极的情绪,或消极的情绪;

用于人脸识别软件。

学过概率的同学一定都知道贝叶斯定理,这个在250多年前发明的算法,在信息领域内有着无与伦比的地位。贝叶斯分类是一系列分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。朴素贝叶斯算法(Naive Bayesian) 是其中应用最为广泛的分类算法之一。朴素贝叶斯分类器基于一个简单的假定:给定目标值时属性之间相互条件独立。

最小二乘法(Least squares)

你可能听说过线性回归。最小均方就是用来求线性回归的。如下图所示,平面内会有一系列点,然后我们求取一条线,使得这条线尽可能拟合这些点分布,这就是线性回归。这条线有多种找法,最小二乘法就是其中一种。最小二乘法其原理如下,找到一条线使得平面内的所有点到这条线的欧式距离和最小。这条线就是我们要求取得线。

逻辑回归(Logistic Regression)

逻辑回归模型是一个二分类模型,它选取不同的特征与权重来对样本进行概率分类,用一个log函数计算样本属于某一类的概率。即一个样本会有一定的概率属于一个类,会有一定的概率属于另一类,概率大的类即为样本所属类。用于估计某种事物的可能性。

支持向量机(Support Vector Machine)

支持向量机(support vector machine)是一个二分类算法,它可以在N维空间找到一个(N-1)维的超平面,这个超平面可以将这些点分为两类。也就是说,平面内如果存在线性可分的两类点,SVM可以找到一条最优的直线将这些点分开。SVM应用范围很广。

要将两类分开,想要得到一个超平面,最优的超平面是到两类的margin达到最大,margin就是超平面与离它最近一点的距离,如下图,Z2>Z1,所以绿色的超平面比较好。

K最近邻算法(KNN,K-NearestNeighbor)

邻近算法,或者说K最近邻(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。KNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

主要应用领域是对未知事物的识别,即判断未知事物属于哪一类,判断思想是,基于欧几里得定理,判断未知事物的特征和哪一类已知事物的的特征最接近。如上图,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。由此也说明了KNN算法的结果很大程度取决于K的选择。

集成学习(Ensemble Learning)

集成学习就是将很多分类器集成在一起,每个分类器有不同的权重,将这些分类器的分类结果合并在一起,作为最终的分类结果。最初集成方法为贝叶斯决策。

集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。

常见的算法包括:

 Boosting, Bootstrapped Aggregation(Bagging),

 AdaBoost,堆叠泛化(Stacked Generalization, Blending),

 梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。

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

他们拉平了输出偏差:如果你将具有民主党倾向的民意调查和具有共和党倾向的民意调查取平均,你将得到一个中和的没有倾向一方的结果。

它们减小了方差:一堆模型的聚合结果和单一模型的结果相比具有更少的噪声。在金融领域,这被称为多元化——多只股票的混合投资要比一只股票变化更小。这就是为什么数据点越多你的模型会越好,而不是数据点越少越好。

它们不太可能产生过拟合:如果你有一个单独的没有过拟合的模型,你是用一种简单的方式(平均,加权平均,逻辑回归)将这些预测结果结合起来,然后就没有产生过拟合的空间了。

无监督学习

聚类算法

聚类算法就是将一堆数据进行处理,根据它们的相似性对数据进行聚类。

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

聚类算法有很多种,具体如下:中心聚类、关联聚类、密度聚类、概率聚类、降维、神经网络/深度学习。

K-均值算法(K-Means)

K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。

通常,人们根据样本间的某种距离或者相似性来定义聚类,即把相似的(或距离近的)样本聚为同一类,而把不相似的(或距离远的)样本归在其他类。

主成分分析(Principal Component Analysis,PCA)

主成分分析是利用正交变换将一些列可能相关数据转换为线性无关数据,从而找到主成分。PCA方法最著名的应用应该是在人脸识别中特征提取及数据降维。

PCA主要用于简单学习与可视化中数据压缩、简化。但是PCA有一定的局限性,它需要你拥有特定领域的相关知识。对噪音比较多的数据并不适用。

SVD矩阵分解(Singular Value Decomposition)

也叫奇异值分解(Singular Value Decomposition),是线性代数中一种重要的矩阵分解,是矩阵分析中正规矩阵酉对角化的推广。在信号处理、统计学等领域有重要应用。SVD矩阵是一个复杂的实复负数矩阵,给定一个m行、n列的矩阵M,那么M矩阵可以分解为M = UΣV。U和V是酉矩阵,Σ为对角阵。

PCA实际上就是一个简化版本的SVD分解。在计算机视觉领域,第一个脸部识别算法就是基于PCA与SVD的,用特征对脸部进行特征表示,然后降维、最后进行面部匹配。尽管现在面部识别方法复杂,但是基本原理还是类似的。

独立成分分析(ICA)

独立成分分析(Independent Component Analysis,ICA)是一门统计技术,用于发现存在于随机变量下的隐性因素。ICA为给观测数据定义了一个生成模型。在这个模型中,其认为数据变量是由隐性变量,经一个混合系统线性混合而成,这个混合系统未知。并且假设潜在因素属于非高斯分布、并且相互独立,称之为可观测数据的独立成分。

ICA与PCA相关,但它在发现潜在因素方面效果良好。它可以应用在数字图像、档文数据库、经济指标、心里测量等。

上图为基于ICA的人脸识别模型。实际上这些机器学习算法并不是全都像想象中一样复杂,有些还和高中数学紧密相关。

强化学习

Q-Learning算法

Q-learning要解决的是这样的问题:一个能感知环境的自治agent,怎样通过学习选择能达到其目标的最优动作。

强化学习目的是构造一个控制策略,使得Agent行为性能达到最大。Agent从复杂的环境中感知信息,对信息进行处理。Agent通过学习改进自身的性能并选择行为,从而产生群体行为的选择,个体行为选择和群体行为选择使得Agent作出决策选择某一动作,进而影响环境。增强学习是指从动物学习、随机逼近和优化控制等理论发展而来,是一种无导师在线学习技术,从环境状态到动作映射学习,使得Agent根据最大奖励值采取最优的策略;Agent感知环境中的状态信息,搜索策略(哪种策略可以产生最有效的学习)选择最优的动作,从而引起状态的改变并得到一个延迟回报值,更新评估函数,完成一次学习过程后,进入下一轮的学习训练,重复循环迭代,直到满足整个学习的条件,终止学习。

Q-Learning是一种无模型的强化学习技术。具体来说,可以使用Q学习来为任何给定的(有限的)马尔可夫决策过程(MDP)找到最优的动作选择策略。它通过学习一个动作价值函数,最终给出在给定状态下采取给定动作的预期效用,然后遵循最优策略。一个策略是代理在选择动作后遵循的规则。当这种动作值函数被学习时,可以通过简单地选择每个状态中具有最高值的动作来构建最优策略。 Q-learning的优点之一是能够比较可用操作的预期效用,而不需要环境模型。此外,Q学习可以处理随机过渡和奖励的问题,而不需要任何适应。已经证明,对于任何有限的MDP,Q学习最终找到一个最优策略,从总体奖励的预期值返回到从当前状态开始的所有连续步骤是最大可实现的意义。

机器学习常用Python包

sklearn

开源机器学习模块,包括分类、回归、聚类系列算法,主要算法有SVM、逻辑回归、朴素贝叶斯、Kmeans、DBSCAN等;也提供了一些语料库。

学习地址:https://scikit-learn.org/stable/modules/classes.html

numpy

Python的语言扩展,定义了数字的数组和矩阵。提供了存储单一数据类型的多维数组(ndarray)和矩阵(matrix)。

学习地址:http://www.numpy.org/

scipy

其在numpy的基础上增加了众多的数学、科学以及工程计算中常用的模块,例如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等等。

学习地址:https://www.scipy.org/

pandas

直接处理和操作数据的主要package,提供了dataframe等方便处理表格数据的数据结构

学习地址:http://pandas.pydata.org/

statsmodels

统计和计量经济学的package,包含了用于参数评估和统计测试的实用工具

学习地址:https://pypi.org/project/statsmodels/

matplotlib、pyplot、pylab

用于生成统计图。pyplot 和 pylab属于matplotlib的子模块,所以只需安装matplotlib,就会有pyplot和pylab的了。

学习地址:https://matplotlib.org/

jieba

中文分词工具。

学习地址:https://github.com/fxsjy/jieba

Pattern

此库更像是一个“全套”库,因为它不仅提供了一些机器学习算法,而且还提供了工具来帮助你收集和分析数据。数据挖掘部分可以帮助你收集来自谷歌、推特和维基百科等网络服务的数据。它也有一个Web爬虫和HTML DOM解析器。“引入这些工具的优点就是:在同一个程序中收集和训练数据显得更加容易。

学习地址:https://github.com/clips/pattern

各个算法精确率对比

此次算精确率对比,总语料样本21282条,分类标签911个,语料是企业的语料集,不对外公开。精准率是把整体样本按照8:2的比例,分为80%的训练集,20%的测试集来算的,实验流程在每篇文章中都有详细记载。数据量低于21282的是取了总样本的部分数据做的实验,效果统计如下:

支持向量机(SupportVectorMachine)

升级版sklearn

Liblinear

sklearn

随机森林(Random Forest)

朴素贝叶斯(Naive Bayesian Model)

K近邻(K-NearestNeighbor)

逻辑回归(LogisticRegression)

决策树(Decision Tree)

本文简单介绍了人工智能机器学习常用算法总结及各个常用算法精确率对比,更多关于人工智能知识请查看下面的相关链接

(0)

相关推荐

  • python机器学习库scikit-learn:SVR的基本应用

    scikit-learn是python的第三方机器学习库,里面集成了大量机器学习的常用方法.例如:贝叶斯,svm,knn等. scikit-learn的官网 : http://scikit-learn.org/stable/index.html点击打开链接 SVR是支持向量回归(support vector regression)的英文缩写,是支持向量机(SVM)的重要的应用分支. scikit-learn中提供了基于libsvm的SVR解决方案. PS:libsvm是台湾大学林智仁教授等开发设

  • python适合人工智能的理由和优势

    Python借助AI和数据科学,目前已经攀爬到了编程语言生态链的顶级位置,可以说Python基本上与AI已经紧密捆绑在了一起了.为什么人工智能开发要使用到python语言?小编认为基于以下几个原因: 简洁高效 Python作为一门编程语言,对于程序员来说,想要从事AI和机器学习相关的工作,Python是再合适不过的选择.简洁优美.开发效率高,Python语言已经得到了越来越多公司的青睐,很多公司都开始选用Python进行网站Web.搜索引擎.云计算.大数据.人工智能.科学计算等方向的开发. 可移

  • python机器学习之KNN分类算法

    本文为大家分享了python机器学习之KNN分类算法,供大家参考,具体内容如下 1.KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法,是一个概念极其简单,而分类效果又很优秀的分类算法. 他的核心思想就是,要确定测试样本属于哪一类,就寻找所有训练样本中与该测试样本"距离"最近的前K个样本,然后看这K个样本大部分属于哪一类,那么就认为这个测试样本也属于哪一类.简单的说就是让最相似的K个样本来投票决定. 这里所说的距离,一

  • python机器学习实现决策树

    本文实例为大家分享了python机器学习实现决策树的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- """ Created on Sat Nov 9 10:42:38 2019 @author: asus """ """ 决策树 目的: 1. 使用决策树模型 2. 了解决策树模型的参数 3. 初步了解调参数 要求: 基于乳腺癌数据集完成以下任务: 1.调整参数criterion,使

  • python 机器学习之支持向量机非线性回归SVR模型

    本文介绍了python 支持向量机非线性回归SVR模型,废话不多说,具体如下: import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm from sklearn.model_selection import train_test_split def load_data_regression(): ''' 加载用于回归问题的数据集 ''' diabetes =

  • python机器学习之神经网络实现

    神经网络在机器学习中有很大的应用,甚至涉及到方方面面.本文主要是简单介绍一下神经网络的基本理论概念和推算.同时也会介绍一下神经网络在数据分类方面的应用. 首先,当我们建立一个回归和分类模型的时候,无论是用最小二乘法(OLS)还是最大似然值(MLE)都用来使得残差达到最小.因此我们在建立模型的时候,都会有一个loss function. 而在神经网络里也不例外,也有个类似的loss function. 对回归而言: 对分类而言: 然后同样方法,对于W开始求导,求导为零就可以求出极值来. 关于式子中

  • AI人工智能 Python实现人机对话

    在人工智能进展的如火如荼的今天,我们如果不尝试去接触新鲜事物,马上就要被世界淘汰啦~ 本文拟使用Python开发语言实现类似于WIndows平台的"小娜",或者是IOS下的"Siri".最终达到人机对话的效果. [实现功能] 这篇文章将要介绍的主要内容如下: 1.搭建人工智能--人机对话服务端平台 2.实现调用服务端平台进行人机对话交互 [实现思路] AIML AIML由Richard Wallace发明.他设计了一个名为 A.L.I.C.E. (Artificia

  • python机器学习库xgboost的使用

    1.数据读取 利用原生xgboost库读取libsvm数据 import xgboost as xgb data = xgb.DMatrix(libsvm文件) 使用sklearn读取libsvm数据 from sklearn.datasets import load_svmlight_file X_train,y_train = load_svmlight_file(libsvm文件) 使用pandas读取完数据后在转化为标准形式 2.模型训练过程 1.未调参基线模型 使用xgboost原生库

  • 为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)

    为何人工智能(AI)首选Python?读完这篇文章你就知道了.我们看谷歌的TensorFlow基本上所有的代码都是C++和Python,其他语言一般只有几千行 .如果讲运行速度的部分,用C++,如果讲开发效率,用Python,谁会用Java这种高不成低不就的语言搞人工智能呢?Python虽然是脚本语言,但是因为容易学,迅速成为科学家的工具(MATLAB也能搞科学计算,但是软件要钱,且很贵),从而积累了大量的工具库.架构,人工智能涉及大量的数据计算,用Python是很自然的,简单高效.Python

  • Python机器学习k-近邻算法(K Nearest Neighbor)实例详解

    本文实例讲述了Python机器学习k-近邻算法.分享给大家供大家参考,具体如下: 工作原理 存在一份训练样本集,并且每个样本都有属于自己的标签,即我们知道每个样本集中所属于的类别.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后提取样本集中与之最相近的k个样本.观察并统计这k个样本的标签,选择数量最大的标签作为这个新数据的标签. 用以下这幅图可以很好的解释kNN算法: 不同形状的点,为不同标签的点.其中绿色点为未知标签的数据点.现在要对绿色点进行预测.由图不难得出

  • 人工智能(AI)首选Python的原因解析

    一.为何人工智能(AI)首选Python? 读完这篇文章你就知道了.我们看谷歌的TensorFlow基本上所有的代码都是C++和Python,其他语言一般只有几千行 .如果讲运行速度的部分,用C++,如果讲开发效率,用Python,谁会用Java这种高不成低不就的语言搞人工智能呢? Python虽然是脚本语言,但是因为容易学,迅速成为科学家的工具(MATLAB也能搞科学计算,但是软件要钱,且很贵),从而积累了大量的工具库.架构,人工智能涉及大量的数据计算,用Python是很自然的,简单高效. P

  • 人工智能学习路线分享

    人工智能"六步走"学习路线,供大家参考,具体内容如下 1.学习并掌握一些数学知识 高等数学是基础中的基础,一切理工科都需要这个打底,数据挖掘.人工智能.模式识别此类跟数据打交道的又尤其需要多元微积分运算基础 线性代数很重要,一般来说线性模型是你最先要考虑的模型,加上很可能要处理多维数据,你需要用线性代数来简洁清晰的描述问题,为分析求解奠定基础 概率论.数理统计.随机过程更是少不了,涉及数据的问题,不确定性几乎是不可避免的,引入随机变量顺理成章,相关理论.方法.模型非常丰富.很多机器学习

  • JavaScript中七种流行的开源机器学习框架

    如果你是一位想要深入机器学习的 JavaScript 程序员或想成为一位使用 JavaScript 的机器学习专家,那么这些开源框架也许会吸引你. 开源工具的涌现使得开发者能够更加轻松地开发应用,这一点使机器学习领域本身获得了极大增长.(例如,AndreyBu,他来自德国,在机器学习领域拥有五年以上的经验,他一直在使用各种各样的开源框架来创造富有魅力的机器学习项目.) 虽然 Python 是绝大多数的机器学习框架所采用的语言,但是 JavaScript 也并没有被抛下.JavaScript 开发

  • 机器学习实战之knn算法pandas

    开始学习机器学习实战这本书,打算看完了再回头看 周志华的 机器学习.机器学习实战的代码都是用numpy写的,有些麻烦,所以考虑用pandas来实现代码,也能回顾之前学的 用python进行数据分析.感觉目前章节的测试方法太渣,留着以后学了更多再回头写. # coding: gbk import pandas as pd import numpy as np def getdata(path): data = pd.read_csv(path, header=None, sep='\t') cha

随机推荐