当前位置: 首页 > 编程日记 > 正文

机器学习算法基础知识

  在我们了解了需要解决的机器学习问题的类型之后,我们可以开始考虑搜集来的数据的类型以及我们可以尝试的机器学习算法。在这个帖子里,我们会介绍一遍最流行的机器学习算法。通过浏览主要的算法来大致了解可以利用的方法是很有帮助的。

可利用的算法非常之多。困难之处在于既有不同种类的方法,也有对这些方法的扩展。这导致很快就难以区分到底什么才是正统的算法。在这个帖子里,我希望给你两种方式来思考和区分在这个领域中你将会遇到的算法。

  第一种划分算法的方式是根据学习的方式,第二种则是基于形式和功能的相似性(就像把相似的动物归为一类一样)。两种方式都是有用的。 

学习方式

基于其与经验、环境,或者任何我们称之为输入数据的相互作用,一个算法可以用不同的方式对一个问题建模。在机器学习和人工智能教科书中,流行的做法是首先考虑一个算法的学习方式。

算法的主要学习方式和学习模型只有几个,我们将会逐一介绍它们,并且给出几个算法和它们适合解决的问题类型来作为例子。

  • 监督学习:输入数据被称为训练数据,它们有已知的标签或者结果,比如垃圾邮件/非垃圾邮件或者某段时间的股票价格。模型的参数确定需要通过一个训练的过程,在这个过程中模型将会要求做出预测,当预测不符时,则需要做出修改。

  • 无监督学习:输入数据不带标签或者没有一个已知的结果。通过推测输入数据中存在的结构来建立模型。这类问题的例子有关联规则学习和聚类。算法的例子包括Apriori算法和K-means算法。

  • 半监督学习:输入数据由带标记的和不带标记的组成。合适的预测模型虽然已经存在,但是模型在预测的同时还必须能通过发现潜在的结构来组织数据。这类问题包括分类和回归。典型算法包括对一些其他灵活的模型的推广,这些模型都对如何给未标记数据建模做出了一些假设。

  • 强化学习:输入数据作为来自环境的激励提供给模型,且模型必须作出反应。反馈并不像监督学习那样来自于训练的过程,而是作为环境的惩罚或者是奖赏。典型问题有系统和机器人控制。算法的例子包括Q-学习和时序差分学习(Temporal Difference Learning)。

当你处理大量数据来对商业决策建模时,通常会使用监督和无监督学习。目前一个热门话题是半监督学习,比如会应用在图像分类中,涉及到的数据集很大但是只包含极少数标记的数据。

算法相似性

通常,我们会把算法按照功能和形式的相似性来区分。比如树形结构和神经网络的方法。这是一种有用的分类方法,但也不是完美的。仍然有些算法很容易就可以被归入好几个类别,比如学习矢量量化,它既是受启发于神经网络的方法,又是基于实例的方法。也有一些算法的名字既描述了它处理的问题,也是某一类算法的名称,比如回归和聚类。正因为如此,你会从不同的来源看到对算法进行不同的归类。就像机器学习算法自身一样,没有完美的模型,只有足够好的模型。

在这个小节里,我将会按照我觉得最直观的方式列出许多流行的机器学习算法。虽然不管是类别还是算法都不是全面详尽的,但我认为它们都具有代表性,有助于你对整个领域有一个大致的了解。如果你发现有一个或一类算法没有被列入,将它写在回复里和大家分享。让我们来开始吧。

回归分析

回归是这样一种建模方式,它先确定一个衡量模型预测误差的量,然后通过这个量来反复优化变量之间的关系。回归方法是统计学的主要应用,被归为统计机器学习。这有些让人迷惑,因为我们可以用回归来指代一类问题和一类算法。实际上,回归是一个过程。以下是一些例子:

  • 普通最小二乘法

  • 逻辑回归

  • 逐步回归

  • 多元自适应样条回归(MARS)

  • 局部多项式回归拟合(LOESS)

基于实例的方法

基于实例的学习模型对决策问题进行建模,这些决策基于训练数据中被认为重要的或者模型所必需的实例。这类方法通常会建立一个范例数据库,然后根据某个相似性衡量标准来把新数据和数据库进行比较,从而找到最匹配的项,最后作出预测。因此,基于实例的方法还被叫做“赢者通吃”方法和基于记忆的学习。这种方法的重点在于已有实例的表示以及实例间相似性的衡量标准。

  • K最近邻算法(kNN)

  • 学习矢量量化(LVQ)

  • 自组织映射(SOM)

正则化方法

这是对另一种方法(通常是回归分析方法)的扩展,它惩罚复杂度高的模型,倾向推广性好的更加简单的模型。我在这里列下了一些正则化的方法,因为他们流行、强大,而且通常只是对其他方法简单的改进。

  • 岭回归

  • 套索算法(LASSO)

  • 弹性网络

决策树学习

决策树方法对决策过程进行建模,决策是基于数据中属性的实际数值。决策在树形结构上分叉直到对特定的某个记录能做出预测。在分类或者回归的问题中我们用数据来训练决策树。

  • 分类与回归树算法(CART)

  • 迭代二叉树3(ID3)

  • C4.5算法

  • 卡方自动互动检视(CHAID)

  • 单层决策树

  • 随机森林

  • 多元自适应样条回归(MARS)

  • 梯度推进机(GBM)

贝叶斯算法

贝叶斯方法是那些明确地在分类和回归问题中应用贝叶斯定理的算法。

  • 朴素贝叶斯算法

  • AODE算法

  • 贝叶斯信度网络(BBN)

核函数方法

核函数方法中最为出名的是流行的支持向量机算法,它其实是一系列方法。核函数方法关心的是如何把输入数据映射到一个高维度的矢量空间,在这个空间中,某些分类或者回归问题可以较容易地解决。

  • 支持向量机(SVM)

  • 径向基函数(RBF)

  • 线性判别分析(LDA)

聚类方法

就像回归一样,聚类既表示一类问题,也表示一类方法。聚类方法一般按照建模方式来划分:基于质心的或者层级结构的。所有的方法都是利用数据的内在结构来尽量地把数据归入具有最大共性的一类里。

  • K均值法

  • 最大期望算法(EM)

关联规则学习

关联规则学习是提取规则的一类算法,这些规则能最好地解释观测到的数据中的变量之间的关系。这些规则能在大型多维数据集中发现重要且在商业上有用的关联,然后进一步被利用。

  • Apriori算法

  • Eclat算法

人工神经网络

人工神经网络是受启发于生物神经网络的结构和/或功能的算法。它们是一类常用在回归和分类问题中的模式匹配方法,但其实这个庞大的子类包含了上百种算法和算法的变形,可以解决各种类型的问题。一些经典流行的方法包括(我已经把深度学习从这个类中分出来了):

  • 感知器

  • 反向传播算法

  • Hopfield神经网络

  • 自适应映射(SOM)

  • 学习矢量量化(LVQ)

深度学习

深度学习方法是利用便宜冗余的计算资源对人工神经网络的现代改进版。这类方法试图建立大得多也复杂得多的神经网络,就如前面说到的,许多方法都是基于大数据集中非常有限的标记数据来解决半监督学习问题。

  • 受限玻尔兹曼机(RBM)

  • 深度信念网(DBN)

  • 卷积神经网络

  • 层叠自动编码器(SAE)

降维方法

如同聚类方法,降维方法试图利用数据中的内在结构来总结或描述数据,所不同的是它以无监督的方式利用更少的信息。这对于可视化高维数据或者为之后的监督学习简化数据都有帮助。

  • 主成分分析(PCA)

  • 偏最小二乘法回归(PLS)

  • 萨蒙映射

  • 多维尺度分析(MDS)

  • 投影寻踪

集成方法

集成方法由多个较弱模型组合而成,这些子模型独立训练,它们的预测结果以某种方式整合起来得出总的预测。很多努力都集中在选择什么类型的学习模型作为子模型,以及用什么方式整合它们的结果。这是一类非常强大的技术,因此也很流行。

  • 推进技术(Boosting)

  • 自展集成(Bagging)

  • 适应性推进(AdaBoost)

  • 层叠泛化策略(Blending)

  • 梯度推进机(GBM)

  • 随机森林

这是一个最适曲线集成的例子。弱成员用灰色线表示,整合后的预测用红色。这个图显示了温度/臭氧数据,曲线出自使用局部多项式回归拟合(LOESS)的模型。

 

对机器学习算法的环顾的目的是让你对目前存在的算法有一个大概的了解,也给你一些工具来把这些你有可能遇到的算法相互联系起来。

这个帖子附上的资源如你所期待的是其他一些很棒的关于机器学习算法的列表。不要觉得压力太大,知道很多算法固然有用,但是对少数几个关键算法的深入了解和有效执行也是很有用的。

转载于:https://www.cnblogs.com/gotodsp/articles/3874706.html

相关文章:

javascript_JavaScript疲劳疲劳

javascript“The Universe is under no obligation to make sense to you.” — Neil deGrasse Tyson“宇宙没有义务对您有意义。” —尼尔德格拉斯泰森 Yes, JavaScript development is complicated.是的,JavaScript开发很复杂。 Yes, it will continue to get mo…

TCP/IP基础概念及通信过程举例

TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络。后来为了验证分组交换技术的实用性,ARPANET出现了,并且在3年内逐渐发展,由4个节…

iOS 利用dSYM定位crash

What is dSYM ? xCode 的每一次编译都会生成一个dsym文件,在其内部存储了16进制函数地址的映射。 在App实际执行的二进制文件中,是通过地址来调用方法,所以在App Crash 的时候,第三方工具会抓到函数崩溃调用栈。 通过…

OCP-052 053部分答案解析

OCP~052 9. GRANT ANY OBJECT PRIVILEGE(授予任何对象权限):允许被授权人将其本身不拥有的对象的对象权限授予他人,但不能授予自己。 10. ENABLE VALIDATE 无法输入违反约束的行,而且表中的所有行都符合约束 DISABLE NOVALIDATE 可以输入任何…

您的用户界面是您产品不会因心灵感应而谦卑的补偿

by Morten Just由Morten Just 您的用户界面是您产品不会因心灵感应而谦卑的补偿 (Your UI is your product’s humble compensation for not being telepathic) 拿一些产品,然后继续问“这是要补偿什么?” 最终您将得到相同的答案。 这个答案可能就是为…

9、 Struts2验证(声明式验证、自定义验证器)

1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法、有效的.Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证:Struts2 提供了一些基于 XWork Validation Framework 的内建验证程序. 使用这些验证程序不需要编程, 只要在一个…

java中使用队列:java.util.Queue

在java5中新添加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来添加元素,使用poll()来获取并移出元素。它们的优点是通过…

xCode BuildSetting 设置

一 编译选项设置 1 Optimization Level 编译器的优化级别 编译策略是对代码编译过程的优化,优化后的代码效率比较高,但是可读性比较差,且编译时间更长。 release模式设置为Fastest, Smallest[-Os] Debug模式设置为None 设置参数None编译器不会尝试优…

react绑定this_React绑定模式:处理“ this”的5种方法

react绑定thisJavaScript’s this keyword behavior has confused developers for ages.JavaScript的this关键字行为使开发人员困惑了很长时间。 There are at least five ways to handle the this context in React. Let’s consider the merits of each approach.在React中至…

php 文件限速下载代码

<?php include("DBDA.class.php"); $db new DBDA(); $bs $_SERVER["QUERY_STRING"]; //获取由提交界面传过来的参数 $bss substr($bs,3); //截取 后面的值$sql "select video from shangpin where id{$bss}"; //获取视频文件路径 $s…

【Java】Linux下安装配置Oracle JDK 1.7版本

1 环境 Vmware虚拟机中的Ubuntu 12.04 32位系统 2具体安装步骤 ①下载最新的jdk包 注意jdk区分32位版本和64位版本&#xff0c;要与Ubuntu兼容才行 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html ②创建一个目录&#xff0c;…

Swift 换肤方案的实现使用SwiftTheme框架

SwiftTheme 框架进行换肤 本地创建多个plist文件 设置不同图片颜色数组 飞机票 demo Foundationimport SwiftTheme// 创建一个枚举类型进行换肤 enum ChangeTheme:Int {case theme1 0;case theme2 1;case theme3 2;// 创建一个静态方法去换肤 去加载本地的plist文件stati…

linux生日_代码简介:让我们用25个Linux事实来庆祝Linux的25岁生日。

linux生日Here are three stories we published this week that are worth your time:这是我们本周发布的三个值得您关注的故事&#xff1a; Linux is 25. Yay! Let’s celebrate with 25 stunning facts about Linux: 6 minute read Linux是25。是的&#xff01; 让我们用有关…

网页中;window.onerror=function(){return!0};

在浏览网页的时候发现一段&#xff1a;window.οnerrοrfunction(){return!0}; 于是就顺手点了搜索&#xff0c;发现是被 adsafe关闭了 。 把adsafe退出就能显示了。 转载于:https://www.cnblogs.com/Tiramisu001/p/6136931.html

xib 拖关联控件的时候报Could not insert new outlet connection错误

~/Library/Developer/XCode/DerivedData 目录中删除对应的项目文件 重新打开工程即可

hdu 4901

计数dp 做不出来真是惭愧。。。 #include <cstdio> #include <cstdlib> #include <cmath> #include <stack> #include <vector> #include <sstream> #include <cstring> #include <string> #include <map> #include <…

初创企业股权架构_初创企业如何以每月不到200美元的价格利用生产级基础架构...

初创企业股权架构Before you can launch a new service, you need infrastructure. You want reliability, scalability, and many other -ilities. But you don’t want to break the bank.在启动新服务之前&#xff0c;您需要基础架构。 您需要可靠性&#xff0c;可伸缩性和许…

git review devops过程

自己搭建的devops环境是gitlab/gerrit/jenkins 1. 首先自己checkout一个自己的代码分支&#xff0c;一般不要在master上做直接修改 2. 修改后git add file, git commit 3. git review 4. jenkins自动部署测试 5. 人工review代码&#xff0c;如果可以就提交并merge&#xff0c;…

swift判断iPhone 各种型号

// iPhoneXR let iPhoneXR:Bool __CGSizeEqualToSize(CGSize(width: 828, height: 1792), UIScreen.main.currentMode?.size ?? CGSize(width: 0, height: 0)); // iPhoneX let iPhoneX:Bool __CGSizeEqualToSize(CGSize(width: 1125, height: 2436), UIScreen.main.curr…

轻有力读后感ppt_如果您希望招聘人员认真对待您,请建立强有力的个人叙述。...

轻有力读后感pptby Garreth Dottin通过Garreth Dottin 如果您希望招聘人员认真对待您&#xff0c;请建立强有力的个人叙述。 (If you want recruiters to take you seriously, build a strong personal narrative.) We’ve all been there. Hunched over a desk. Scrolling th…

每天一个linux命令(10):cat 命令

cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容&#xff0c;或者将几个文件连接起来显示&#xff0c;或者从标准输入读取内容并显示&#xff0c;它常与重定向符号配合使用。 1&#xff0e;命令格式&#xff1a; cat [选项] [文件]... 2&#xff0e;命令…

Swift 中使用Alamofire 免证书的设置

let manager SessionManager.defaultmanager.delegate.sessionDidReceiveChallenge {session,challenge inreturn (URLSession.AuthChallengeDisposition.useCredential,URLCredential(trust:challenge.protectionSpace.serverTrust!))}

“System.Data.OracleClient.OracleConnection”已过时

处理办法&#xff1a; 在oracle 安装目录下 找到 Oracle.DataAccess.dll添加引用&#xff0c;然后 using Oracle.DataAccess.Client;其他的都不用动&#xff0c;即可。连接字符串中 如有 用的是 userxxx 就改成user idxxx把原来 Using 的System.Data.OracleClient去掉即可。 --…

我开发的代码,如何申请版权_代码简介:我花了3个月时间申请开发人员职位。 这是我学到的。...

我开发的代码,如何申请版权Here are three stories we published this week that are worth your time:这是我们本周发布的三个值得您关注的故事&#xff1a; I spent 3 months applying to jobs after a coding bootcamp. Here’s what I learned: 5 minute read 编码训练营结…

Chapter 2 Open Book——29

Which left me with nothing to do but try to not look at him…unsuccessfully. 我没什么事情可以做但是我尝试不去看他&#xff0c;但是失败了。 I glanced up, and he was staring at me, that same inexplicable look of frustration in his eyes. 我瞥了一眼&#xff0c;…

js回调与异步加载的用法

以前还是菜鸟的时候&#xff08;虽然现在依然很菜 -_-|| &#xff09;对异步加载与回调函数的技术无比向往&#xff0c;但也一直没有使用过&#xff0c;这次因为页面逻辑太过复杂&#xff0c;一堆请求逻辑&#xff0c;如果还是用顺序请求&#xff0c;页面的速度。。。 领导又要…

Swift 字符串去除换行符空格符

capitalizedLetters&#xff1a;大写controlCharacters&#xff1a;控制符 whitespacesAndNewlines&#xff1a;空格换行 decimalDigits&#xff1a;小数 letters&#xff1a;文字 lowercaseLetters&#xff1a;小写字母 uppercaseLetters&#xff1a;大写字母 nonBaseCharacte…

谈论源码_6,000名自由职业者谈论金​​钱,幸福和对未来的希望

谈论源码More than 6,000 US-based freelancers responded to a new in-depth survey. I dug through the data and pulled out the most interesting insights, which paint a picture of optimistic professionals who have taken control of their own destiny.超过6,000名美…

第一篇随笔——新的开端

新的开端 这是我第一次开通博客也是第一次在博客上写随笔&#xff0c;这既是博客的新开端也是JAVA学习的新开端&#xff0c;希望能好好经营这第一个博客~。 觉得自己专业吗&#xff1f;对专业的期望 对于这个问题我不得不坦然承认虽然进入信安专业已经有一年的时间了&#xff0…

快速入门linux系统的iptables防火墙 1 本机与外界的基本通信管理

概述 iptables是一种运行在linux下的防火墙组件&#xff0c;下面的介绍可以快速的学习iptables的入门使用。 特点&#xff08;重要&#xff09; 它的工作逻辑分为 链、表、规则三层结构。数据包通过的时候&#xff0c;在对应表中&#xff0c;规则从上向下匹配&#xff0c;匹配到…