Tag Archives: 机器学习

一个框架解决几乎所有机器学习问题

周一个叫 Abhishek Thakur 的数据科学家,在他的 Linkedin 发表了一篇文章 Approaching (Almost) Any Machine Learning Problem,介绍他建立的一个自动的机器学习框架,几乎可以解决任何机器学习问题,项目很快也会发布出来。这篇文章迅速火遍 Kaggle,他参加过100多个数据科学相关的竞赛,积累了很多宝贵的经验,看他很幽默地说“写这样的框架需要很多丰富的经验,不是每个人都有这样的经历,而很多人有宝贵的经验,但是他们不愿意分享,我呢恰好是又有一些经验,又愿意分享的人”。当然这篇文章也是受到争议的,很多人觉得并不全面。

我最近也在准备参加 Kaggle,之前看过几个例子,自己也总结了一个分析的流程,今天看了这篇文章,里面提到了一些高效的方法,最干货的是,他做了一个表格,列出了各个算法通常需要训练的参数。

这个问题很重要,因为大部分时间都是通过调节参数,训练模型来提高精度。作为一个初学者,第一阶段,最想知道的问题,就是如何调节参数。因为分析的套路很简单,就那么几步,常用的算法也就那么几个,以为把算法调用一下就可以了么,那是肯定不行的。实际过程中,调用完算法后,结果一般都不怎么好,这个时候还需要进一步分析,哪些参数可以调优,哪些数据需要进一步处理,还有什么更合适的算法等等问题。

接下来一起来看一下他的框架。

据说数据科学家 60-70% 的时间都花在数据清洗和应用模型算法上面,这个框架主要针对算法的应用部分。

1507706111793_5442_1507706107871

Pipeline

什么是 Kaggle?

Kaggle是一个数据科学竞赛的平台,很多公司会发布一些接近真实业务的问题,吸引爱好数据科学的人来一起解决,可以通过这些数据积累经验,提高机器学习的水平。

应用算法解决 Kaggle 问题,一般有以下几个步骤:

  • 第一步:识别问题
  • 第二步:分离数据
  • 第三步:构造提取特征
  • 第四步:组合数据
  • 第五步:分解
  • 第六步:选择特征
  • 第七步:选择算法进行训练

当然,工欲善其事,必先利其器,要先把工具和包都安好。
最方便的就是安装 Anaconda,这里面包含大部分数据科学所需要的包,直接引入就可以了,常用的包有:

  • pandas:常用来将数据转化成 dataframe 形式进行操作
  • scikit-learn:里面有要用到的机器学习算法模型
  • matplotlib:用来画图
  • 以及 xgboost,keras,tqdm 等。

第一步:识别问题

在这一步先明确这个问题是分类还是回归。通过问题和数据就可以判断出来,数据由 X 和 label 列构成,label 可以一列也可以多列,可以是二进制也可以是实数,当它为二进制时,问题属于分类,当它为实数时,问题属于回归。

第二步:分离数据

1507706161329_2449_1507706157270

为什么需要将数据分成两部分?

用 Training Data 来训练模型,用 Validation Data 来检验这个模型的表现,不然的话,通过各种调节参数,模型可以在训练数据集上面表现的非常出色,但是这可能会是过拟合,过拟合就是太依赖现有的数据了,拟合的效果特别好,但是只适用于训练集,以致于来一个新的数据,就不知道该预测成什么了。所以需要有 Validation 来验证一下,看这个模型是在那里自娱自乐呢,还是真的表现出色。

在 scikit learn 包里就有工具可以帮你做到这些:
分类问题用 StrtifiedKFold

from sklearn.cross_validation import StratifiedKFold

回归问题用 KFold

from sklearn.cross_validation import KFold

第三步:构造特征

这个时候,需要将数据转化成模型需要的形式。数据有三种类型:数字,类别,文字。当数据是类别的形式时,需要将它的每一类提取出来作为单独一列,然后用二进制表示每条记录相应的值。例如:

record 1: 性别 女
record 2:性别 女
record 3:性别 男

转化之后就是:

         女 男
record 1: 1 0
record 2:1 0
record 3:0 1

这个过程 sklearn 也可以帮你做到:

from sklearn.preprocessing import LabelEncoder

或者

from sklearn.preprocessing import OneHotEncoder

第四步:组合数据

处理完 Feature 之后,就将它们组合到一起。
如果数据是稠密的,就可以用 numpy 的 hstack:

import numpy as np
X = np.hstack((x1, x2, ...))

如果是稀疏的,就用 sparse 的 hstack:

from scipy import sparse
X = sparse.hstack((x1, x2, ...))

组合之后,就可以应用以下算法模型:

  • RandomForestClassifier
  • RandomForestRegressor
  • ExtraTreesClassifier
  • ExtraTreesRegressor
  • XGBClassifier
  • XGBRegressor

但是不能应用线性模型,线性模型之前需要对数据进行正则化而不是上述预处理。

第五步:分解

这一步是为了进一步优化模型,可以用以下方法:

1507706259451_2054_1507706255470

PCA:Principal components analysis,主成分分析,是一种分析、简化数据集的技术。用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。

from sklearn.decomposition import PCA

对于文字数据,在转化成稀疏矩阵之后,可以用 SVD

from sklearn.decomposition import TruncatedSVD

SVD:Singular Value Decomposition,奇异值分解,是线性代数中一种重要的矩阵分解,它总能找到标准化正交基后方差最大的维度,因此用它进行降维去噪。

第六步:选择特征

当特征个数越多时,分析特征、训练模型所需的时间就越长,容易引起“维度灾难”,模型也会越复杂,推广能力也会下降,所以需要剔除不相关或亢余的特征。

常用的算法有完全搜索,启发式搜索,和随机算法。

例如,Random Forest:

from sklearn.ensemble import RandomForestClassifier

或者 xgboost:

import xgboost as xgb

对于稀疏的数据,一个比较有名的方法是 chi-2:

from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

第七步:选择算法进行训练

选择完最相关的参数之后,接下来就可以应用算法,常用的算法有:

Classification:
Random Forest
GBM
Logistic Regression
Naive Bayes
Support Vector Machines
k-Nearest Neighbors

Regression
Random Forest
GBM
Linear Regression
Ridge
Lasso
SVR

scikit-learn里可以看到分类和回归的可用的算法一览,包括它们的原理和例子代码。

在应用各算法之前先要明确这个方法到底是否合适。
为什么那么多算法里,只提出这几个算法呢,这就需要对比不同算法的性能了。
这篇神文 Do we Need Hundreds of Classifiers to Solve Real World Classification Problems 测试了179种分类模型在UCI所有的121个数据上的性能,发现Random Forests 和 SVM 性能最好。
我们可以学习一下里面的调研思路,看看是怎么样得到比较结果的,在我们的实践中也有一定的指导作用。

1507706339459_6332_1507706335760各算法比较

但是直接应用算法后,一般精度都不是很理想,这个时候需要调节参数,最干货的问题来了,什么模型需要调节什么参数呢?

1507706352167_4129_1507706348227

虽然在sklearn的文档里,会列出所有算法所带有的参数,但是里面并不会说调节哪个会有效。在一些mooc课程里,有一些项目的代码,里面可以看到一些算法应用时,他们重点调节的参数,但是有的也不会说清楚为什么不调节别的。这里作者根据他100多次比赛的经验,列出了这个表,我觉得可以借鉴一下,当然,如果有时间的话,去对照文档里的参数列表,再查一下算法的原理,通过理论也是可以判断出来哪个参数影响比较大的。

调参之后,也并不就是大功告成,这个时候还是需要去思考,是什么原因造成精度低的,是哪些数据的深意还没有被挖掘到,这个时候需要用统计和可视化去再一次探索数据,之后就再走一遍上面的过程。

我觉得这里还提到了很有用的一条经验是,把所有的 transformer 都保存起来,方便在 validation 数据集上面应用:

1507706374144_6119_1507706370146

文章里介绍了分析问题的思路,还提到了几条很实用的经验,不过经验终究是别人的经验,只能借鉴,要想提高自己的水平,还是要看到作者背后的事情,就是参加了100多次实战,接下来就去行动吧,享受用算法和代码与数据玩耍的兴奋吧。

from:https://cloud.tencent.com/community/article/440346

机器学习&深度学习研究者最重要的11张速查表

作者 Kailash Ahirwar 在 Github 上建立了一个代码速查表,对机器学习初学者来说是不可多得的一个资源。机器之心将文章中的高清图片下载到了百度网盘,读者可从中浏览。也可以点击这里查阅 Medium 上的原文。

对于初学者来讲,入门机器学习和深度学习非常困难;同时深度学习库也难以理解。通过收集多方资源,我在 Github 上创建了一个速查表库,希望能对你有所帮助。欢迎访问这个库,并完善它(如果你也有速查表)。

1.Keras

Keras 是一个非常强大且容易上手的深度学习库;当 Keras 接入 Theano 和 TensorFlow 时,后两者可提供高水平的神经网络 API 以开发和评估深度学习模型。该速查表可用于 Python 数据科学和机器学习。

1-uEv0-859Tp3GK5ynmoLq5w(1).jpeg

2.Numpy

Numpy 库是 Python 中科学性计算的核心库,它提供高性能、多维度的数组对象,以及对这些数组进行运算的工具。该速查表可用于 Python 数据科学和机器学习。

1-o_CO_8Plpi2Ac3s-Gs5IQg(1).png

3.Pandas

这张 Pandas 速查表主要用于数据整理(data wrangling)。

Pandas 库构建在 NumPy 上,并为 Python 编程语言提供易于上手的数据结构和数据分析工具。该速查表可用于 Python 数据科学和机器学习。

1-YhTbz8b8Svi22wNVvqzneg(1).jpeg

1-3-mTHM3ejorJwLnjuIpVNQ(1).jpeg

1-2RJpJMci8ysUbrFOCzPKAw(1).png

4.SciPy

SciPy 库是科学性计算的核心包之一,科学性计算可提供数学算法和构建在 Python 的 NumPy 扩展上的便捷函数 (Convenience Functions) ;该表中还包括线性代数的部分。该速查表可用于 Python 数据科学和机器学习。

1-9gFze6fk9EHcm1bgJsmgFA(1).png

5.Matplotlib

Matplotlib 是一个 Python 2D 绘图库,它在平台上以多种硬拷贝格式和交互环境生成发表品质的图。该速查表用于 Python 数据科学。

1-ykxp7OpgBXbRRHgjzSkeCA(1).png

6.Scikit-learn

Scikit-learn 是一个开源 Python 库,通过统一接口实现一系列的机器学习、预处理、交叉验证和视觉化算法。该速查表可用于 Python 数据科学和机器学习。

1-uEv0-859Tp3GK5ynmoLq5w(1).jpeg

7.Neural Networks Zoo(神经网络大全)

该速查表几乎涵盖了所有类型的神经网络。

1-gccuMDV8fXjcvz1RSk4kgQ(1).png

8.ggplot2

ggplot2 基于图形语法,其思想是你可以利用相同的几个组件构建所有的图形:一个数据集、一个几何集(表征数据点的视觉化标记)和一个协作系统。该速查表用于数据可视化。

1-GOqZNLbHU_d1rZ5qP5RuTQ(1).jpeg

1-kHi0M3FgxGs4CtUW4Rsm-w(1).jpeg

from:http://www.jiqizhixin.com/article/3004

机器学习及大数据相关面试的职责和面试问题

目录

· 机器学习、大数据相关岗位的职责

· 面试问题

· 答题思路

· 准备建议

· 总结

各个企业对这类岗位的命名可能有所不同,比如推荐算法/数据挖掘/自然语言处理/机器学习算法工程师,或简称算法工程师,还有的称为搜索/推荐算法工程师,甚至有的并入后台工程师的范畴,视岗位具体要求而定。

机器学习、大数据相关岗位的职责

根据业务的不同,岗位职责大概分为:

1、平台搭建类

· 数据计算平台搭建,基础算法实现,当然,要求支持大样本量、高维度数据,所以可能还需要底层开发、并行计算、分布式计算等方面的知识;

2、算法研究类

· 文本挖掘,如领域知识图谱构建、垃圾短信过滤等;

· 推荐,广告推荐、APP 推荐、题目推荐、新闻推荐等;

· 排序,搜索结果排序、广告排序等;

· 其它,· 广告投放效果分析;· 互联网信用评价;· 图像识别、理解。

3、数据挖掘类

· 商业智能,如统计报表;

· 用户体验分析,预测流失用户。

以下首先介绍面试中遇到的一些真实问题,然后谈一谈答题和面试准备上的建议。

面试问题

1、你在研究/项目/实习经历中主要用过哪些机器学习/数据挖掘的算法?

2、你熟悉的机器学习/数据挖掘算法主要有哪些?

3、你用过哪些机器学习/数据挖掘工具或框架?

4、基础知识· 无监督和有监督算法的区别?· SVM 的推导,特性?多分类怎么处理?· LR 的推导,特性?· 决策树的特性?· SVM、LR、决策树的对比?· GBDT 和 决策森林 的区别?· 如何判断函数凸或非凸?· 解释对偶的概念。· 如何进行特征选择?· 为什么会产生过拟合,有哪些方法可以预防或克服过拟合?· 介绍卷积神经网络,和 DBN 有什么区别?· 采用 EM 算法求解的模型有哪些,为什么不用牛顿法或梯度下降法?· 用 EM 算法推导解释 Kmeans。· 用过哪些聚类算法,解释密度聚类算法。· 聚类算法中的距离度量有哪些?· 如何进行实体识别?· 解释贝叶斯公式和朴素贝叶斯分类。· 写一个 Hadoop 版本的 wordcount· ……

5、开放问题

· 给你公司内部群组的聊天记录,怎样区分出主管和员工?

· 如何评估网站内容的真实性(针对代刷、作弊类)?

· 深度学习在推荐系统上可能有怎样的发挥?

· 路段平均车速反映了路况,在道路上布控采集车辆速度,如何对路况做出合理估计?采集数据中的异常值如何处理?

· 如何根据语料计算两个词词义的相似度?

· 在百度贴吧里发布 APP 广告,问推荐策略?

· 如何判断自己实现的 LR、Kmeans 算法是否正确?

· 100亿数字,怎么统计前100大的?

· ……

答题思路

1、用过什么算法?

· 最好是在项目/实习的大数据场景里用过,比如推荐里用过 CF、LR,分类里用过 SVM、GBDT;

· 一般用法是什么,是不是自己实现的,有什么比较知名的实现,使用过程中踩过哪些坑;

· 优缺点分析。

2、熟悉的算法有哪些?

· 基础算法要多说,其它算法要挑熟悉程度高的说,不光列举算法,也适当说说应用场合;

· 面试官和你的研究方向可能不匹配,不过在基础算法上你们还是有很多共同语言的,你说得太高大上可能效果并不好,一方面面试官还是要问基础的,另一方面一旦面试官突发奇想让你给他讲解高大上的内容,而你只是泛泛的了解,那就傻叉了。

3、用过哪些框架/算法包?

· 主流的分布式框架如 Hadoop,Spark,Graphlab,Parameter Server 等择一或多使用了解;

· 通用算法包,如 mahout,scikit,weka 等;

· 专用算法包,如 opencv,theano,torch7,ICTCLAS 等。

4、基础知识

· 个人感觉高频话题是 SVM、LR、决策树(决策森林)和聚类算法,要重点准备;

· 算法要从以下几个方面来掌握 产生背景,适用场合(数据规模,特征维度,是否有 Online 算法,离散/连续特征处理等角度);原理推导(最大间隔,软间隔,对偶);求解方法(随机梯度下降、拟牛顿法等优化算法);优缺点,相关改进;和其他基本方法的对比;

· 不能停留在能看懂的程度,还要对知识进行结构化整理,比如撰写自己的 cheet sheet,我觉得面试是在有限时间内向面试官输出自己知识的过程,如果仅仅是在面试现场才开始调动知识、组织表达,总还是不如系统的梳理准备;从面试官的角度多问自己一些问题,通过查找资料总结出全面的解答,比如如何预防或克服过拟合。

5、开放问题

· 由于问题具有综合性和开放性,所以不仅仅考察对算法的了解,还需要足够的实战经验作基础;

· 先不要考虑完善性或可实现性,调动你的一切知识储备和经验储备去设计,有多少说多少,想到什么说什么,方案都是在你和面试官讨论的过程里逐步完善的,不过面试官有两种风格:引导你思考考虑不周之处 or 指责你没有考虑到某些情况,遇到后者的话还请注意灵活调整答题策略;

· 和同学朋友开展讨论,可以从上一节列出的问题开始。

准备建议

1、基础算法复习两条线

· 材料阅读 包括经典教材(比如 PRML,模式分类)、网上系列博客,系统梳理基础算法知识;

· 面试反馈 面试过程中会让你发现自己的薄弱环节和知识盲区,把这些问题记录下来,在下一次面试前搞懂搞透。

2、除算法知识,还应适当掌握一些系统架构方面的知识,可以从网上分享的阿里、京东、新浪微博等的架构介绍 PPT 入手,也可以从 Hadoop、Spark 等的设计实现切入。

3、如果真的是以就业为导向就要在平时注意实战经验的积累,在科研项目、实习、比赛(Kaggle,Netflix,天猫大数据竞赛等)中摸清算法特性、熟悉相关工具与模块的使用。

总结

如今,好多机器学习、数据挖掘的知识都逐渐成为常识,要想在竞争中脱颖而出,就必须做到· 保持学习热情,关心热点;· 深入学习,会用,也要理解;· 在实战中历练总结;· 积极参加学术界、业界的讲座分享,向牛人学习,与他人讨论。最后,希望自己的求职季经验总结能给大家带来有益的启发。

附:其它可能的题目-算法/架构/ETL等

  • MapReduce解决缺值问题?
  • 集群规模有限,但之前的那个文件足够大,如何解决?(不能调整集群的规模)
  • Spark的三种部署方式?
  • 如果Spark用的和Mapreduce的计算资源同是yarn,发现资源不够用了话,在Spark中的哪里进行配置,使之资源分配合理?
  • LVS的配置相关命令?
  • Hadoop的各角色的职能?
  • Hadoop的checkpoint的作用?
  • HBase的双主如何配置?
  • HBase即便拥有双主的高可靠配置,存在hdfs上的数据丢失怎么办?
  • HBase模糊查询,是什么?如何做到?
  • Hadoop的 高可靠性,如何保证?
  • 如何保证HBase的稳定性以及高可靠性?从部署、容灾、以及网络方面说说你的看法?
  • 你觉得Spark和Hadoop的区别是什么,请简要说一说?
  • 你觉得Python和Java在使用起来,有什么区别?
  • 给你两张表,表A和表B,其中表A有3条数据,表B有5条数据,问:表A left join 表B后有几条?
  • LVS和HAProxy相比,它的缺点是什么?
  • Sqoop用起来感觉怎样?
  • ZooKeeper的角色以及相应的Zookepper工作原理?
  • HBase的Insert与Update的区别?
  • 数组与链表的区别是什么?
  • Scala函数式编程的特点?
  • 今日头条的个性化推荐是如何实现的?
  • spark工作原理
  • spark运行原理
  • Spark Streaming
  • Storm的ack是干嘛的
  • kalfka干嘛的
  • job提交到yarn上的工作流程
  • 10x+5y+z = n,x+y+z的最小值
  • ArryList、LinkedList、vector的区别
  • hashMap HashTable的区别
  • 垃圾回收机制
  • JVM的工作原理
  • Hbase的垃圾回收工具
  • for循环LinkedList
  • 遍历HashMap的并且把某一个值删除
  • 线程 进程
  • Java中Runnable和Thread的区别Callable
  • Callable与Future的介绍
  • sleep wait区别
  • hadoop源码使用了什么JAVA技术
  • hadoop的通讯接口RPC协议
  • java的数据类型
  • mapreduce中的Text类型 LongWriteable 能不能用String 或者用long类型代替
  • JAVA如何实现序列化
  • 反序列化是什么?
  • 序列化是将(内存中的)结构化的数据数据,序列化成2进制
  • mapreduce常用的接口
  • mapreduce的工作流程
  • MR优化方式
  • 什么样的情况下不能用mapreduce
  • HDFS的架构
  • hdfs改那几个文件 分别改什么内容 内容代表什么意思(3次)
  • core是全局的 site是局部的
  • hdfs优化
  • mapreduce怎么实现join连接
  • yarn的ha搭建
  • zookeeper的工作原理和应用场景
  • 如何解决mapreduce的数据倾斜
  • mapreduce怎么实现把移动数据到移动计算的
  • hive 增加数据有几种方式
  • 怎么给hive的表里面增加一个字段
  • 增加的字段里面数据占不占内存
  • 给字段增加值怎么增加
  • 1g的小文件,1g的一个文件 ,为什么小文件占的空间更大
  • hive建表,什么情况下见内部表
  • impala 依赖
  • 怎么解决hive数据倾斜问题
  • hbase rowkey的设计原则
  • 唯一 简明有意义
  • hbase的应用场景
  • 你们平时PV有多少,数据量有多少
  • Hive是重点
  • hadoop工程师
  • zookeeper在hbase中作用
  • ZK中存的两张最重要的表
  • shall 数组的分隔符是什么
  • linux的copy

End.

转载请注明来自36大数据(36dsj.com):36大数据 » 机器学习及大数据相关面试的职责和面试问题

机器学习工程师必知的十大算法

毫无疑问,机器学习/人工智能的子领域在过去几年越来越受欢迎。目前大数据在科技行业已经炙手可热,而基于大量数据来进行预测或者得出建议的机器学习无疑是非常强大的。一些最常见的机器学习例子,比如Netflix的算法可以根据你以前看过的电影来进行电影推荐,而Amazon的算法则可以根据你以前买过的书来推荐书籍。

所以如果你想了解更多有关机器学习的内容,那么你该如何入门?对于我来说,我的入门课程是我在哥本哈根出国留学时参加的人工智能课。当时我的讲师是丹麦技术大学(Technical University of Denmark)的应用数学和计算机科学的全职教授,他的研究方向是逻辑与人工智能,侧重于使用逻辑学来对人性化的规划、推理和解决问题进行建模。这个课程包括对理论/核心概念的讨论和自己动手解决问题。我们使用的教材是AI经典之一:Peter Norvig的Artificial Intelligence—A Modern Approach(中文译本:《人工智能:一种现代的方法》),这本书主要讲了智能体、搜索解决问题、对抗搜索、概率论、多智能体系统、社会AI和AI的哲学/伦理/未来等等。在课程结束时,我们三个人的团队实现了一个简单的编程项目,也就是基于搜索的智能体解决虚拟环境中的运输任务问题。

在那门课程上我已经学到了很多知识,并决定继续学习相关的课题。在过去的几个星期里,我在旧金山参加了多次相关的技术讲座,涉及到深度学习、神经网络和数据结构,并且参加了一个有很多该领域的知名专家学者参加的机器学习会议。最重要的是,我在6月初参加了Udacity上的Intro to Machine Learning(机器学习入门)在线课程,前几天才完成。在这篇文章中,我想分享一下我从课程中学到的一些最常用的机器学习算法。

机器学习算法可以分为三大类:监督学习、无监督学习和强化学习。监督学习可用于一个特定的数据集(训练集)具有某一属性(标签),但是其他数据没有标签或者需要预测标签的情况。无监督学习可用于给定的没有标签的数据集(数据不是预分配好的),目的就是要找出数据间的潜在关系。强化学习位于这两者之间,每次预测都有一定形式的反馈,但是没有精确的标签或者错误信息。因为这是一个介绍课程,我没有学习过强化学习的相关内容,但是我希望以下10个关于监督学习和无监督学习的算法足以让你感兴趣。

监督学习

1.决策树(Decision Trees)

决策树是一个决策支持工具,它使用树形图或者决策模型以及可能性序列,包括偶然事件的结果、资源成本和效用。下图是其基本原理:

从业务决策的角度来看,决策树是人们必须了解的最少的是/否问题,这样才能评估大多数时候做出正确决策的概率。作为一种方法,它允许你以结构化和系统化的方式来解决问题,从而得出合乎逻辑的结论。

2.朴素贝叶斯分类(Naive Bayesian classification)

朴素贝叶斯分类器是一类简单的概率分类器,它基于贝叶斯定理和特征间的强大的(朴素的)独立假设。图中是贝叶斯公式,其中P(A|B)是后验概率,P(B|A)是似然,P(A)是类先验概率,P(B)是预测先验概率。

一些应用例子:

  • 判断垃圾邮件
  • 对新闻的类别进行分类,比如科技、政治、运动
  • 判断文本表达的感情是积极的还是消极的
  • 人脸识别

3.最小二乘法(Ordinary Least Squares Regression)

如果你懂统计学的话,你可能以前听说过线性回归。最小二乘法是一种计算线性回归的方法。你可以将线性回归看做通过一组点来拟合一条直线。实现这个有很多种方法,“最小二乘法”就像这样:你可以画一条直线,然后对于每一个数据点,计算每个点到直线的垂直距离,然后把它们加起来,那么最后得到的拟合直线就是距离和尽可能小的直线。

线性指的是你用来拟合数据的模型,而最小二乘法指的是你最小化的误差度量。

4.逻辑回归(Logistic Regression)

逻辑回归是一个强大的统计学方法,它可以用一个或多个解释变量来表示一个二项式结果。它通过使用逻辑函数来估计概率,从而衡量类别依赖变量和一个或多个独立变量之间的关系,后者服从累计逻辑分布。

总的来说,逻辑回归可以用于以下几个真实应用场景:

  • 信用评分
  • 计算营销活动的成功率
  • 预测某个产品的收入
  • 特定的某一天是否会发生地震

5.支持向量机(Support Vector Machine,SVM)

SVM是二进制分类算法。给定N维坐标下两种类型的点,SVM生成(N-1)维的超平面来将这些点分成两组。假设你在平面上有两种类型的可以线性分离的点,SVM将找到一条直线,将这些点分成两种类型,并且这条直线尽可能远离所有这些点。

从规模上看,使用SVM(经过适当的修改)解决的一些最大的问题包括显示广告、人类剪切位点识别(human splice site recognition)、基于图像的性别检测,大规模图像分类……

6.集成方法(Ensemble methods)

集成方法是学习算法,它通过构建一组分类器,然后通过它们的预测结果进行加权投票来对新的数据点进行分类。原始的集成方法是贝叶斯平均,但是最近的算法包括纠错输出编码、Bagging和Boosting。

那么集成方法如何工作?并且为什么它们要优于单个模型?

  • 它们平均了单个模型的偏差:如果你将民主党的民意调查和共和党的民意调查在一起平均化,那么你将得到一个均衡的结果,不偏向任何一方。
  • 它们减少了方差:一组模型的总体意见比其中任何一个模型的单一意见更加统一。在金融领域,这就是所谓的多元化,有许多股票的组合比一个单独的股票的不确定性更少,这也为什么你的模型在数据多的情况下会更好的原因。
  • 它们不太可能过拟合:如果你有单个的模型没有过拟合,那么把这些模型的预测简单结合起来(平均、加权平均、逻辑回归),那么最后得到的模型也不会过拟合。

无监督学习

7.聚类算法(Clustering Algorithms)

聚类是将一系列对象分组的任务,目标是使相同组(集群)中的对象之间比其他组的对象更相似。

每一种聚类算法都不相同,下面是一些例子:

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

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

PCA是一个统计学过程,它通过使用正交变换将一组可能存在相关性的变量的观测值转换为一组线性不相关的变量的值,转换后的变量就是所谓的主分量。

PCA的一些应用包括压缩、简化数据便于学习、可视化等。请注意,领域知识在选择是否继续使用PCA时非常重要。 数据嘈杂的情况(PCA的所有成分具有很高的方差)并不适用。

9.奇异值分解(Singular Value Decomposition,SVD)

在线性代数中,SVD是复杂矩阵的因式分解。对于给定的m * n矩阵M,存在分解使得M=UΣV,其中U和V是酉矩阵,Σ是对角矩阵。

实际上,PCA是SVD的一个简单应用。在计算机视觉中,第一个人脸识别算法使用PCA和SVD来将面部表示为“特征面”的线性组合,进行降维,然后通过简单的方法将面部匹配到身份,虽然现代方法更复杂,但很多方面仍然依赖于类似的技术。

10.独立成分分析(Independent Component Analysis,ICA)

ICA是一种统计技术,主要用于揭示随机变量、测量值或信号集中的隐藏因素。ICA对观测到的多变量数据定义了一个生成模型,这通常是作为样本的一个大的数据库。在模型中,假设数据变量由一些未知的潜在变量线性混合,混合方式也是未知的。潜在变量被假定为非高斯分布并且相互独立,它们被称为观测数据的独立分量。

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

现在运用你对这些算法的理解去创造机器学习应用,为世界各地的人们带来更好的体验吧。

查看英文原文:The 10 Algorithms Machine Learning Engineers Need to Know

from:http://www.infoq.com/cn/articles/10-algorithms-machine-learning-engineers-need-to-know