机器学习

机器学习

对于不平衡数据进行数据平衡,是在划分训练集和测试集之前还是在这之后?

fish 回复了问题 3 人关注 1 个回复 9 次浏览 2021-10-15 15:21 来自相关话题

请问寻路问题可以用机器学习的知识来解决吗

余财源 回复了问题 2 人关注 2 个回复 1469 次浏览 2020-04-27 15:42 来自相关话题

如何用贝叶斯网络对半监督学习中未标签数据分类?

回复

嘎嘣豆 发起了问题 1 人关注 0 个回复 1890 次浏览 2020-01-11 16:15 来自相关话题

GraphViz's executables not found

微积分 回复了问题 4 人关注 3 个回复 10052 次浏览 2020-01-06 18:02 来自相关话题

决策树和随机森林中离散输入变量怎么处理

刘慧颖 回复了问题 4 人关注 2 个回复 7555 次浏览 2019-12-15 22:03 来自相关话题

请问怎么计算 多个连续型特征的组合 与类别Y的相关性呢

回复

小样hci 发起了问题 1 人关注 0 个回复 1529 次浏览 2019-12-12 20:52 来自相关话题

线性回归预测前为什么要排序?

weixinpsb4b 回复了问题 3 人关注 3 个回复 2534 次浏览 2019-11-20 14:35 来自相关话题

gridsearchcv:Found input variables with inconsistent numbers of samples: [1176, 294]

柯蓝iop 回复了问题 2 人关注 1 个回复 7437 次浏览 2019-11-07 18:05 来自相关话题

sklearn.feature_extraction.image里的img_to_graph返回值是什么意思?

niar 回复了问题 4 人关注 2 个回复 4118 次浏览 2019-05-24 15:19 来自相关话题

@邹博机器学习第12次课程用python3.5总是报错,向老师求教,

高泽伦 回复了问题 9 人关注 5 个回复 5683 次浏览 2019-05-24 15:14 来自相关话题

python TensorFlow图像处理

回复

茅台伴花生 发起了问题 1 人关注 0 个回复 1473 次浏览 2019-04-29 20:58 来自相关话题

第14次课,XGBoost实践里用XGBOOST做了分类,但回归预测没有涉及,是否说明预测用xgboost不太合用?

zqbnew 回复了问题 3 人关注 2 个回复 4249 次浏览 2019-04-04 19:59 来自相关话题

请教R 乱码问题,帮忙解决

Pierced68 回复了问题 3 人关注 1 个回复 1601 次浏览 2019-02-12 18:44 来自相关话题

Python机器学习公告

fish 回复了问题 3 人关注 2 个回复 1803 次浏览 2019-02-11 15:04 来自相关话题

seaborn和SVM运行时间

fish 回复了问题 2 人关注 1 个回复 2076 次浏览 2019-02-11 15:03 来自相关话题

sklearn源码中数值处理方式不太理解

回复

泽南Alpha 发起了问题 1 人关注 0 个回复 1617 次浏览 2019-02-02 15:30 来自相关话题

@邹博,关于ARIMA模型,预测结果与真实值求RMSE的问题

zhou2017 回复了问题 4 人关注 3 个回复 4126 次浏览 2019-01-17 14:20 来自相关话题

LSTM做时间序列预测的问题

zhou2017 回复了问题 2 人关注 2 个回复 3831 次浏览 2019-01-17 14:17 来自相关话题

机器学习升级版III之HMM实践程序GMHMM.py报错component 0 of 'full' covars must be symmetric, positive-definite

周庆轩 回复了问题 2 人关注 1 个回复 3704 次浏览 2018-12-03 19:55 来自相关话题

条新动态, 点击查看
首先,@acm79 给出了非常通俗的表达,非常赞! 我画蛇添足一下: 问题:假定有n个1,m个0,则从这(n+m)个数中取到奇数个1的概率有多大呢? 分情况讨论: (1)如果“n个1”退化成“没有1”,即候选的数都是0,则取到1为奇数是不可能的,概率为0。(这... 显示全部 »
首先,@acm79 给出了非常通俗的表达,非常赞! 我画蛇添足一下: 问题:假定有n个1,m个0,则从这(n+m)个数中取到奇数个1的概率有多大呢? 分情况讨论: (1)如果“n个1”退化成“没有1”,即候选的数都是0,则取到1为奇数是不可能的,概率为0。(这种情况在2015这个例子中不存在,但在思考题1024中是存在的。)   (2)如果“n个1”中的n不为0,那么,题目就是最正常的计算“给定n个1、m个0,从这(n+m)个数中取到奇数个1的概率”,多强调一下,m是否为0不影响分析。 此时,先取到k个1,再随便取若干个0。 (a). 从n个1中取k个1的取法,一共有C(n,k)种取法; (b). 从n个1中取数的所有取法为2^n; 因此,取到k个的概率为C(n,k)/2^n; k可以有从0到n的n+1种候选,但我们只关心k取奇数的情况,从而: k取奇数的概率为:“sigma_k(C(n,k)/2^n),k为奇数”,根据二项式的性质:所有奇数项和偶数项和相等,得到该式子为1/2。 而显然,m是几不关心,上面的1/2就是最终结论。
邹博

邹博 回答了问题 • 2017-05-23 11:10 • 6 个回复 不感兴趣

给@邹博 机器学习的建议

这是《机器学习·升级版V》课程中的问题。 这个问题放心吧,虽然我会非常强调理论和原理,但我个人是在两个公司做实际的工业实践的,也算了解当前机器学习在工业界到底缺什么。只有前3次会看似非常理论的讲讲数学,相信我:很多同学连最大似然估计都快忘了呢。如果只考虑调包(... 显示全部 »
这是《机器学习·升级版V》课程中的问题。 这个问题放心吧,虽然我会非常强调理论和原理,但我个人是在两个公司做实际的工业实践的,也算了解当前机器学习在工业界到底缺什么。只有前3次会看似非常理论的讲讲数学,相信我:很多同学连最大似然估计都快忘了呢。如果只考虑调包(当然,调包本身非常重要,一定要学会快速合理的调包),有时候不懂原理,还真的不一定能够理性快速有底气的调参。 当然,如果只关心纯实用,可以把重点放在“一次理论,一次实践”的实践环节。 感谢您的问题。

机器学习常用数据集列表

群马藤原 回复了问题 41 人关注 4 个回复 6141 次浏览 2017-12-05 13:40 来自相关话题

近200篇机器学习&深度学习资料分享

治肥虫btz 回复了问题 101 人关注 16 个回复 65678 次浏览 2017-11-07 18:53 来自相关话题

对于不平衡数据进行数据平衡,是在划分训练集和测试集之前还是在这之后?

回复

fish 回复了问题 3 人关注 1 个回复 9 次浏览 2021-10-15 15:21 来自相关话题

请问寻路问题可以用机器学习的知识来解决吗

回复

余财源 回复了问题 2 人关注 2 个回复 1469 次浏览 2020-04-27 15:42 来自相关话题

如何用贝叶斯网络对半监督学习中未标签数据分类?

回复

嘎嘣豆 发起了问题 1 人关注 0 个回复 1890 次浏览 2020-01-11 16:15 来自相关话题

GraphViz's executables not found

回复

微积分 回复了问题 4 人关注 3 个回复 10052 次浏览 2020-01-06 18:02 来自相关话题

决策树和随机森林中离散输入变量怎么处理

回复

刘慧颖 回复了问题 4 人关注 2 个回复 7555 次浏览 2019-12-15 22:03 来自相关话题

请问怎么计算 多个连续型特征的组合 与类别Y的相关性呢

回复

小样hci 发起了问题 1 人关注 0 个回复 1529 次浏览 2019-12-12 20:52 来自相关话题

线性回归预测前为什么要排序?

回复

weixinpsb4b 回复了问题 3 人关注 3 个回复 2534 次浏览 2019-11-20 14:35 来自相关话题

gridsearchcv:Found input variables with inconsistent numbers of samples: [1176, 294]

回复

柯蓝iop 回复了问题 2 人关注 1 个回复 7437 次浏览 2019-11-07 18:05 来自相关话题

sklearn.feature_extraction.image里的img_to_graph返回值是什么意思?

回复

niar 回复了问题 4 人关注 2 个回复 4118 次浏览 2019-05-24 15:19 来自相关话题

@邹博机器学习第12次课程用python3.5总是报错,向老师求教,

回复

高泽伦 回复了问题 9 人关注 5 个回复 5683 次浏览 2019-05-24 15:14 来自相关话题

python TensorFlow图像处理

回复

茅台伴花生 发起了问题 1 人关注 0 个回复 1473 次浏览 2019-04-29 20:58 来自相关话题

第14次课,XGBoost实践里用XGBOOST做了分类,但回归预测没有涉及,是否说明预测用xgboost不太合用?

回复

zqbnew 回复了问题 3 人关注 2 个回复 4249 次浏览 2019-04-04 19:59 来自相关话题

请教R 乱码问题,帮忙解决

回复

Pierced68 回复了问题 3 人关注 1 个回复 1601 次浏览 2019-02-12 18:44 来自相关话题

Python机器学习公告

回复

fish 回复了问题 3 人关注 2 个回复 1803 次浏览 2019-02-11 15:04 来自相关话题

seaborn和SVM运行时间

回复

fish 回复了问题 2 人关注 1 个回复 2076 次浏览 2019-02-11 15:03 来自相关话题

sklearn源码中数值处理方式不太理解

回复

泽南Alpha 发起了问题 1 人关注 0 个回复 1617 次浏览 2019-02-02 15:30 来自相关话题

@邹博,关于ARIMA模型,预测结果与真实值求RMSE的问题

回复

zhou2017 回复了问题 4 人关注 3 个回复 4126 次浏览 2019-01-17 14:20 来自相关话题

LSTM做时间序列预测的问题

回复

zhou2017 回复了问题 2 人关注 2 个回复 3831 次浏览 2019-01-17 14:17 来自相关话题

机器学习升级版III之HMM实践程序GMHMM.py报错component 0 of 'full' covars must be symmetric, positive-definite

回复

周庆轩 回复了问题 2 人关注 1 个回复 3704 次浏览 2018-12-03 19:55 来自相关话题

有人了解过今年数院的BOT人工智能大赛吗?——找队友ing

frankswift 发表了文章 1 个评论 1184 次浏览 2018-08-10 17:37 来自相关话题

学了一年的深度学习理论,目前想找个比赛检测一下实践能力,增加一下比赛经验。之前了解的一些大赛如天池,科赛等,难度有些大。 BOT大赛这次的两个题目我看了一下,挺适合的,“智能汽车”的问题是一个回归问题,预测车流量的,而且数据是上汽集团提供的2000 ...查看全部
学了一年的深度学习理论,目前想找个比赛检测一下实践能力,增加一下比赛经验。之前了解的一些大赛如天池,科赛等,难度有些大。
BOT大赛这次的两个题目我看了一下,挺适合的,“智能汽车”的问题是一个回归问题,预测车流量的,而且数据是上汽集团提供的2000量汽车的出行数据,数据质量还是很不错的。“新零售”的问题本质上是一个分类问题,及目标检测识别与行为检测。算法都是一些经典的算法,
有兴趣的小伙伴求组队。(报名地址:http://www.datadreams.org/difview.html#/raceList

基于分布式云的机器学习

唐半张 发表了文章 0 个评论 2025 次浏览 2015-10-11 10:44 来自相关话题

一些用户的使用实例还有使用模式等,已经证明使用像微软Azure这样的云服务平台,不能只是存储数据或是做做简单的传统的表面工作,而是应该用上基于云的预报分析的威力和规模,这样,任何公司都将会获益匪浅。三百六十行,行行出数据。使用现代工具,比如Azure机器学习( ...查看全部
一些用户的使用实例还有使用模式等,已经证明使用像微软Azure这样的云服务平台,不能只是存储数据或是做做简单的传统的表面工作,而是应该用上基于云的预报分析的威力和规模,这样,任何公司都将会获益匪浅。三百六十行,行行出数据。使用现代工具,比如Azure机器学习(Azure Machine Learning),公司可以获得有关未来如何发展的有可执行性的见解,进而获得竞争优势。
搜集和保存『大数据』正在变成许多应用普遍的需求。当数据大小爆炸式增长时,分布式的存储变得更加必要。在许多应用中,搜集数据本身就是一种无中心的过程,自然地导致分布式的存储。这种情况下,采用分布式计算来建构用于分布式数据的机器学习(ML)解决方案就变得尤为不可或缺。比如使用逻辑回归进行在线广告中的点击率统计、应用于大型图像或语音训练的数据库的深度学习解决方案和用于检测异常模式的日志分析。
那么,有效的在集群上的机器学习(ML)解决方案的训练就成为了笔者工作的微软云和信息服务实验室(CISL,读作‘sizzle’ :-))的一个重要的重点领域。在这篇文章中,我们在这个话题上深入一点,讨论一些相关的话题和我们最近试图解决一些相同问题的研究。在这里展示的有些细节非常有技术含量,但是我们试图用尽可能简单的方式解释主要观点。任何对大数据上的分布式机器学习(ML)有兴趣的人都会通过理解这些观点有所收获,而且我们也很期待你们的评论和反馈。

选择正确的设备
在一篇最近的文章中,John Langford描述了用于快速学习的Vowpal Wabbit(VW)系统,他简略地尝试了超过万亿级的数据库。大多数机器学习(ML)算法都是迭代的,选择正确的分布式架构来运行他们非常关键。
Map Reduce和它的开放的源代码和Hadoop都是分布式数据处理的很流行的平台。然而,它们并不适用于迭代的机器学习(ML)算法,因为每一次迭代都开销巨大——比如作业调度、数据传输和数据解析。
更好的选择是添加通讯装置,比如All Reduce,它和Hadoop兼容(VW也一样),或者使用更新的分布式架构,比如REEF,它支持高效迭代运算。
SQM
现在最先进的分布式机器学习(ML)算法,例如VW中的那个,都是基于统计查询模型(SQM)。在SQM中,学习是基于在每个数据点上都进行一些运算并把所有数据点的结果信息累积起来。比如,设想一种线性机器学习(ML)问题,输出结果是特征向量和权重参数向量的点积。这就包括重要的预报模型,比如逻辑回归、SVMs和最小二乘法拟合。在这个案例中,每次迭代,训练目标函数的总梯度都是与每个单独的数据点相关的梯度相加计算得到的。每个节点都形成与在那个节点的训练数据相对应的部分梯度,然后使用一个All Reduce操作来得到总梯度。
通讯瓶颈
分布式计算常常会面对一个关键的瓶颈,通常表现为很大的计算通讯带宽比。比如,计算速度是通讯速度的10-50倍都是很常见的现象。
用Tcomm和Tcomp分别表示每次迭代通讯和计算所用的时间。那么,一个迭代的机器学习(ML)算法的总时间就可以被写成
Toverall=(Tcomm+Tcomp)*迭代次数
Tcomp通常随着节点数的增加而现行减少而Tcomm增加或是保持不变(在All Reduce算法的最好情况下)。有关大数据的机器学习(ML)解决方案通常都含有大量的权重参数(d),这些参数在每次迭代中都必须在一个集群的计算节点之间更新和通讯。更严重的是,在SQM中有一些其他的需要消耗O(d)(与d渐进相等,译者注)的通讯的步骤,比如梯度计算。而在Map Reduce中,每次迭代都需要一个独立的Map Reduce运算,情况会变得更加糟糕。因此,当d很大时,Tcomm会变得很大。SQM并没有足够重视与此相关的效率低下问题。
突破通讯瓶颈
我们最新的研究解决了这一重要的问题。它是基于以下的观察:考虑一种情况,Tcomm,也就是节点之间的权重参数的通讯时间,非常大。在一个像SQM一样的标准的方法中,每次迭代每个节点的计算所用的时间并不比Tcomm少。于是我们可以问下面的问题:修改算法使得它的Tcomp被增加到和Tcomm相近,但是同时使得算法在更少的迭代内收敛到需要的解决方案,是不是可行呢?
当然,回答这个问题并不是轻而易举的,因为他需要从根本上对算法的改变。
更多细枝末节
考虑一个学习线性模型的机器学习(ML)问题。在我们的算法中,权重是不断更新的而且节点中的梯度是用一种和基于SQM的算法相似的方法共享的。然而,在每个节点,梯度(使用All Reduce计算)和节点的本地数据都通过一种并不轻而易举的方式形成了对整个问题的本地估测。每个节点都去解决它估测的问题,得到权重变量的本地更新。然后所有节点的本地更新会被结合到一起来形成一个权重变量的整体更新。注意到解决估测问题会导致每个节点的计算量上升,但是并不需要额外的通讯。结果就是Tcomp会增加,而由于Tcomm已经很高,每次迭代的花销并不受很大影响。然而,因为每个节点都在解决估测的整个问题,需要的迭代次数将会显著下降。考虑一种情况,数据量非常大以至于每个节点获得的数据本身就已经足够做很好的工作了。在这种情况下,每个节点的估测问题就会和整个问题很接近;结果就是,我们的算法只需要一两次迭代,而基于SQM的算法则需要几百次甚至上千次的迭代。此外,我们店方法更加灵活,允许某种程度的估测而不是要求精确。总体上,我们的算法几乎总是比SQM更快,而且平均来看,要快2到3倍。
有人可能会设想把权重向量分配到许多个集群中的节点,设置分散数据的存储和计算,使得任何一个权重变量的更新只发生在一个集群节点。这在某些情况下会显得非常有吸引力,比如当一个人对把线性机器学习(ML)问题中无关的权重变量归零或分布式深度网络学习感兴趣时。又一次地,我们开发了专门的迭代算法,可以在每个节点都增加运算而减少迭代次数。
评估
我们在上文重点讨论了适合重度通讯的情况的算法。但是不是所有在实践中解决的问题都是这样。对于一般的情况,在最近的学术文献中有许多分布式机器学习(ML)算法。但是一个谨慎的对于这些算法的评估并没有人做过。最好的算法正在进入云端机器学习(ML)图书馆。
自动化的适合满足使用者需求的分布式机器学习(ML)
这个故事也有一些其他的重要的侧面。云端的分布式机器学习(ML)的使用者可能有各种各样的需求。他们可能关心把总的解决时间最小化,或者解决方案的金钱花销。使用者可能愿意牺牲一点精确性但是优化上面提到的变量。或者,他们可能热心于获得最精确的结果,而不太关心时间和开销。给定一种对问题的描述、一族不同的像这样的使用者的要求以及可用的系统配置的细节,拥有一种自动的选择正确算法和相关参数设置的过程非常重要。我们现在的研究就重点关注这一方面。
随着将来我们不断升级和扩展我们的产品,自动化分布式机器学习(ML)解决方案将是Azure机器学习(ML)的一个重要的方面和关注点。

大数据分析之机器学习算法实现的演化

唐半张 发表了文章 0 个评论 2197 次浏览 2015-10-11 09:51 来自相关话题

大数据的广泛应用,着这样的背景下是值得我们研究与学习的。大数据分析机器学习算法实现的演化。首先,这里列出了目前可用的三代机器学习工具。 传统的机器学习和数据分析的工具,包括SAS,IBM的SPSS,Weka以及R语 ...查看全部
大数据的广泛应用,着这样的背景下是值得我们研究与学习的。大数据分析机器学习算法实现的演化。首先,这里列出了目前可用的三代机器学习工具。
  1. 传统的机器学习和数据分析的工具,包括SAS,IBM的SPSS,Weka以及R语言。它们可以在小数据集上进行深度分析——工具所运行的节点的内存可以容纳得下的数据集。
  2. 第二代机器学习工具,包括Mahout,Pentaho,以及RapidMiner。它们可以对大数据进行我称之为粗浅的分析。基于Hadoop之上进行 的传统机器学习工具的规模化的尝试,包括Revolution Analytics的成果(RHadoop)以及Hadoop上的SAS,都可以归到第二代工具里面。
  3. 第三代工具,比如Spark, Twister,HaLoop,Hama以及GraphLab。它们可以对大数据进行深度的分析。传统供应商最近的一些尝试包括SAS的内存分析,也属于这一类。

 
第一代机器学习工具/范式
由于第一代工具拥有大量的机器学习算法,因此它们适合进行深度的分析。然而,由于可扩展性的限制,它们并不都能在大数据集上进行工作——比如TB或者PB 级的数据(受限于这些工具本质上是非分布式的)。也就是说,它们可以进行垂直扩展(你可以提高工具运行的节点的处理能力),但无法进行水平扩展(它们并非 都能在集群上运行)。第一代工具的供应商通过建立Hadoop连接器以及提供集群选项来解决这些局限性——这意味着它们在努力对R或者SAS这样的工具进 行重新设计以便可以进行水平扩展。这些都应该归入第二代和第三代工具,下面我们将会介绍到。
 
第二代机器学习工具/范式
第二代工具(现在我们可以把传统的机器学习工具比如SAS这些称之为第一代工具了)比如 Mahout(http://mahout.apache.org),Rapidminer以及Pentaho,它们通过在开源的MapReduce产品 ——Hadoop之上实现相关算法,提供了扩展到大数据集上的能力。这些工具仍在快速完善并且是开源的(尤其是Mahout)。Mahout拥有一系列的 聚类及分类的算法,以及一个相当不错的推荐算法(Konstan和Riedl,2012)。因此它可以进行大数据的处理,现在在生产环境上已经有大量的使 用案例,主要用于推荐系统。我在一个线上系统中也使用Mahout来实现了一个金融领域的推荐算法,发现它确是可扩展的,尽管并不是一点问题没有(我还修 改了相当一部分代码)。
关于Mahou的一项评测发现它只实现了机器学习算法中的很小的一个子集——只有25个算法是达到了生产质量的,8到9个在 Hadoop之上可用,这意味着能在大数据集上进行扩展。这些算法包括线性回归,线性支持向量机,K-means聚类算法,等等。它通过并行训练,提供了 顺序逻辑回归的一个快速的实现。然而,正如别人指出的(比如Quora.com),它没有实现非线性支持向量机以及多变项逻辑回归(这也称为离散选择模 型)。
毕竟来说,本书并不是要为了抨击Mahout的。不过我认为有些机器学习算法的确是很难在Hadoop上实现,比如支持向量机的核函数以及共轭梯度法 (CGD,值得注意的是Mahout实现了一个随机梯度下降)。这一点别人也同样指出了,比方说可以看一下Srirama教授的一篇论文(Srirama 等人,2012年)。这里详细地比较了Hadoop和Twister MR(Ekanayake
等,2010年)在诸如共轭梯度法等迭代式算法上的不同,它指出,Hadoop上的开销非常明显。我所说的迭代式是指什么?一组执行特定计算的实体,在等待邻居或者其它实体的返回结果,然后再进行下一轮迭代。CGD是迭代式算法的最佳范例——每个CGD都可以分解成daxpy,ddot,matmul等原语。我会分别解释这三种原语都是什么:daxpy操作将向量x与常量k相乘,然后再和另一个向量y进行相加;ddot会计算两个向量x,y的点积;matmul将矩阵与向量相乘,然后返回另一个向量。
这意味着每个操作对应一个MapReduce操作,一次迭代会有6个MR操作,最终一次CG运算会有100个MR操作,以及数GB的数据交互,尽管这只是很小的矩阵。事实上,准备每次迭代的开销(包括从HDFS加载数据到内存的开销)比迭代运算本身的都大,这导致Hadoop上的MR会出现性能下降。相反,Twister会区分静态数据和可变数据,使得数据可以在MR迭代过程中常驻内存,同时还有一个合并阶段来收集reduce阶段输出的结果,因此性能有明显的提升。
第二代工具还有一些是传统工具基于Hadoop上进行的扩展。这类可供选择的有Revolution Analytics的产品,它是在Hadoop上对R语言进行了扩展,以及在Hadoop上实现R语言程序的一个可扩展的运行时环境(Venkataraman等,2012)。SAS的内存分析,作为SAS的高性能分析工具包中的一部分,是传统工具在Hadoop集群上进行规模化的另一个尝试。然而,最近发布的版本不仅能在Hadoop上运行,同时也支持Greenplum/Teradata,这应该算作是第三代机器学习的方法。
另一个有趣的产品是一家叫Concurrent Systems的初创公司实现的,它提供了一个预测模型标记语言(Predictive Modeling Markup Language,PMML)在Hadoop上的运行环境。PMML的模型有点类似XML,使得模型可以存储在描述性语言的文件中。传统工具比如 R以及SAS都可以将模型保存在PMML文件里。Hadoop上的运行环境使得它们可以将这些模型文件存储到一个Hadoop集群上,因此它们也属于第二代工具/范式。
 
第三代机器学习工具/范式
Hadoop自身的局限性以及它不太适合某类应用程序,这促进研究人员提出了新的替代方案。第三代工具主要是尝试超越Hadoop来进行不同维度的分析。我将会根据三种维度来讨论不同的实现方案,分别是机器学习算法,实时分析以及图像处理。
迭代式机器学习算法
伯克利大学的研究人员提出了一种替代方案:Spark(Zaharia等,2010年)——也就是说,在大数据领域,Spark被视为是替换Hadoop的下一代数据处理的解决方案。Spark有别于Hadoop的关键思想在于它的内存计算,这使得数据可以在不同的迭代和交互间缓存在内存里。研发Spark的主要原因是,常用的MR方法,只适用于那些可以表示成无环数据流的应用程序,并不适用于其它程序,比如那些在迭代中需要重用工作集的应用。
因此他们提出了这种新的集群计算的方法,它不仅能提供和MR类似的保证性和容错性,并且能同时支持迭代式及非迭代式应用。伯克利的研究人员提出了一套技术方案叫作BDAS,它可以在集群的不同节点间运行数据分析的任务。BDAS中最底层的组件叫做Mesos,这是个集群管理器,它会进行任务分配以及集群任务的资源管理。第二个组件是基于Mesos构建的Tachyon文件系统 。
Tachyon提供了一个分布式文件系统的抽象以及在集群间进行文件操作的接口。在实际的实施方案中,作为运算工具的Spark,是基于Tachyon和Mesos来实现的,尽管不用Tachyon,甚至是不用Mesos也可以实现。而在Spark基础上实现的Shark,则提供了集群层面的结构化查询 语言的抽象——这和Hive在Hadoop之上提供的抽象是一样的。Zacharia等人在他们的文章中对Spark进行了探索,这是实现机器学习算法的重要组成部分。
HaLoop(Bu等人,2010)也扩展了Hadoop来实现机器学习算法——它不仅为迭代式应用的表示提供了一层编程抽象,同时还使用了缓存的概念来 进行迭代间的数据共享,以及对定点进行校验,从而提高了效率。Twister( http://iterativemapreduce.org )是类似HaLoop的一个产品。
 
实时分析
实时分析是超越Hadoop考虑的第二个维度。来自Twitter的Storm(感觉原文说反了)是这一领域的最有力的竞争者。Storm是一个可扩展的复杂事件处理引擎,它使得基于事件流的实时复杂运算成为了可能。一个Storm集群的组件包括:  Spout,用于从不同的数据源中读取数据。有HDFS类型的spout,Kafka类型的spout,以及TCP流的spout。
 
Bolt,它用于数据处理。它们在流上进行运算。基于流的机器学习算法通常都在这里运行。
拓扑。这是具体应用特定的spout和bolt的一个整合——拓扑运行于集群的节点上。
在实践中,一个架构如果同时包含了Kafka(来自LinkedIn的一个分布式队列系统)集群来作为高速的数据提取器,以及Storm集群来进行处理或 者分析,它的表现会非常不错,Kafka spout用来快速地从Kafka集群中读取数据。Kafka集群将事件存储在队列中。由于Storm集群正忙于进行机器学习,因此这么做是很有必要 的。
本书的后续章节将会对这个架构进行详细的介绍,以及在Storm集群中运行机器学习算法所需的步骤。Storm也被拿来跟实时计算领域的其它竞争者进 行比较,包括Yahoo的S4以及Typesafe的Akka。

我在面试机器学习、大数据岗位时遇到的各种问题

木舟 发表了文章 3 个评论 3374 次浏览 2015-09-10 16:43 来自相关话题

  自己的专业方向是机器学习、数据挖掘,就业意向是互联网行业与本专业相关的工作岗位。各个企业对这类岗位的命名可能有所不同,比如数据挖掘/自然语言处理/机器学习算法工程师,或简称算法工程师,还有的称为搜索/推荐算法工程师,甚至有的并入后台工程师的范畴 ...查看全部
 
自己的专业方向是机器学习、数据挖掘,就业意向是互联网行业与本专业相关的工作岗位。各个企业对这类岗位的命名可能有所不同,比如数据挖掘/自然语言处理/机器学习算法工程师,或简称算法工程师,还有的称为搜索/推荐算法工程师,甚至有的并入后台工程师的范畴,视岗位具体要求而定。
 
机器学习、大数据相关岗位的职责
自己参与面试的提供算法岗位的公司有 BAT、小米、360、飞维美地、宜信、猿题库 等,根据业务的不同,岗位职责大概分为:
平台搭建类
数据计算平台搭建,基础算法实现,当然,要求支持大样本量、高维度数据,所以可能还需要底层开发、并行计算、分布式计算等方面的知识;
 
算法研究类
  • 文本挖掘,如领域知识图谱构建、垃圾短信过滤等;
  • 推荐,广告推荐、APP 推荐、题目推荐、新闻推荐等;
  • 排序,搜索结果排序、广告排序等;
  • 广告投放效果分析;
  • 互联网信用评价;
  • 图像识别、理解。
 数据挖掘类
  • 商业智能,如统计报表;
  • 用户体验分析,预测流失用户。
以上是根据本人求职季有限的接触所做的总结。有的应用方向比较成熟,业界有足够的技术积累,比如搜索、推荐,也有的方向还有很多开放性问题等待探索,比如互联网金融、互联网教育。在面试的过程中,一方面要尽力向企业展现自己的能力,另一方面也是在增进对行业发展现状与未来趋势的理解,特别是可以从一些刚起步的企业和团队那里,了解到一些有价值的一手问题。以下首先介绍面试中遇到的一些真实问题,然后谈一谈答题和面试准备上的建议。 面试问题
  • 你在研究/项目/实习经历中主要用过哪些机器学习/数据挖掘的算法?
  • 你熟悉的机器学习/数据挖掘算法主要有哪些?
  • 你用过哪些机器学习/数据挖掘工具或框架?
  • 基础知识
  • 无监督和有监督算法的区别?
  • SVM 的推导,特性?多分类怎么处理?
  • LR 的推导,特性?
  • 决策树的特性?
  • SVM、LR、决策树的对比?
  • GBDT 和 决策森林 的区别?
  • 如何判断函数凸或非凸?
  • 解释对偶的概念。
  • 如何进行特征选择?
  • 为什么会产生过拟合,有哪些方法可以预防或克服过拟合?
  • 介绍卷积神经网络,和 DBN 有什么区别?
  • 采用 EM 算法求解的模型有哪些,为什么不用牛顿法或梯度下降法?
  • 用 EM 算法推导解释 Kmeans。
  • 用过哪些聚类算法,解释密度聚类算法。
  • 聚类算法中的距离度量有哪些?
  • 如何进行实体识别?
  • 解释贝叶斯公式和朴素贝叶斯分类。
  • 写一个 Hadoop 版本的 wordcount。
……开放问题
  • 给你公司内部群组的聊天记录,怎样区分出主管和员工?
  • 如何评估网站内容的真实性(针对代刷、作弊类)?
  • 深度学习在推荐系统上可能有怎样的发挥?
  • 路段平均车速反映了路况,在道路上布控采集车辆速度,如何对路况做出合理估计?采集数据中的异常值如何处理?
  • 如何根据语料计算两个词词义的相似度?
  • 在百度贴吧里发布 APP 广告,问推荐策略?
  • 如何判断自己实现的 LR、Kmeans 算法是否正确?
  • 100亿数字,怎么统计前100大的?
 答题思路用过什么算法?
  • 最好是在项目/实习的大数据场景里用过,比如推荐里用过 CF、LR,分类里用过 SVM、GBDT;
  • 一般用法是什么,是不是自己实现的,有什么比较知名的实现,使用过程中踩过哪些坑;
  • 优缺点分析。
熟悉的算法有哪些?
  • 基础算法要多说,其它算法要挑熟悉程度高的说,不光列举算法,也适当说说应用场合;
  • 面试官和你的研究方向可能不匹配,不过在基础算法上你们还是有很多共同语言的,你说得太高大上可能效果并不好,一方面面试官还是要问基础的,另一方面一旦面试官突发奇想让你给他讲解高大上的内容,而你只是泛泛的了解,那就傻叉了。
用过哪些框架/算法包?
  • 主流的分布式框架如 Hadoop,Spark,Graphlab,Parameter Server 等择一或多使用了解;
  • 通用算法包,如 mahout,scikit,weka 等;
  • 专用算法包,如 opencv,theano,torch7,ICTCLAS 等。
基础知识
  • 对知识进行结构化整理,比如撰写自己的 cheet sheet,我觉得面试是在有限时间内向面试官输出自己知识的过程,如果仅仅是在面试现场才开始调动知识、组织表达,总还是不如系统的梳理准备;
  • 从面试官的角度多问自己一些问题,通过查找资料总结出全面的解答,比如如何预防或克服过拟合。
  • 产生背景,适用场合(数据规模,特征维度,是否有 Online 算法,离散/连续特征处理等角度);
  • 原理推导(最大间隔,软间隔,对偶);
  • 求解方法(随机梯度下降、拟牛顿法等优化算法);
  • 优缺点,相关改进;
  • 和其他基本方法的对比;
个人感觉高频话题是 SVM、LR、决策树(决策森林)和聚类算法,要重点准备; 算法要从以下几个方面来掌握:
  • 不能停留在能看懂的程度,还要产生背景,适用场合(数据规模,特征维度,是否有 Online 算法,离散/连续特征处理等角度);
  • 原理推导(最大间隔,软间隔,对偶);
  • 求解方法(随机梯度下降、拟牛顿法等优化算法);
  • 优缺点,相关改进;
  • 和其他基本方法的对比;
  • 对知识进行结构化整理,比如撰写自己的 cheet sheet,我觉得面试是在有限时间内向面试官输出自己知识的过程,如果仅仅是在面试现场才开始调动知识、组织表达,总还是不如系统的梳理准备;
  • 从面试官的角度多问自己一些问题,通过查找资料总结出全面的解答,比如如何预防或克服过拟合。
 开放问题
  • 由于问题具有综合性和开放性,所以不仅仅考察对算法的了解,还需要足够的实战经验作基础;
  • 先不要考虑完善性或可实现性,调动你的一切知识储备和经验储备去设计,有多少说多少,想到什么说什么,方案都是在你和面试官讨论的过程里逐步完善的,不过面试官有两种风格:引导你思考考虑不周之处 or 指责你没有考虑到某些情况,遇到后者的话还请注意灵活调整答题策略;
  • 和同学朋友开展讨论,可以从上一节列出的问题开始。
 准备建议
  • 基础算法复习两条线
  • 材料阅读 包括经典教材(比如 PRML,模式分类)、网上系列博客(比如 研究者July),系统梳理基础算法知识;
  • 面试反馈 面试过程中会让你发现自己的薄弱环节和知识盲区,把这些问题记录下来,在下一次面试前搞懂搞透。
  • 除算法知识,还应适当掌握一些系统架构方面的知识,可以从网上分享的阿里、京东、新浪微博等的架构介绍 PPT 入手,也可以从 Hadoop、Spark 等的设计实现切入。
  • 如果真的是以就业为导向就要在平时注意实战经验的积累,在科研项目、实习、比赛(Kaggle,Netflix,天猫大数据竞赛等)中摸清算法特性、熟悉相关工具与模块的使用。

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

PMML Support in Spark MLlib

木舟 发表了文章 0 个评论 3256 次浏览 2015-09-07 17:22 来自相关话题

This is a guest blog from our friend Vincenzo Selvaggio who contributed this feature. He is a Senior Java Technical Architect and ...查看全部
This is a guest blog from our friend Vincenzo Selvaggio who contributed this feature. He is a Senior Java Technical Architect and Project Manager, focusing on delivering advanced business process solutions for investment banks.

The recently released Apache Spark 1.4 introduces PMML support to MLlib for linear models and k-means clustering. This achievement is the result of active discussions from the community on JIRA (https://issues.apache.org/jira/browse/SPARK-1406) and GitHub (https://github.com/apache/spark/pull/3062) and embraces interoperability between Apache Spark and other platforms when it comes to predictive analytics.

What is PMML?

Predictive Model Markup Language (PMML) is the leading data mining standard developed by The Data Mining Group (DMG), an independent consortium, and it has been adopted by major  vendors and organizations (http://www.dmg.org/products.html). PMML uses XML to represent data mining models. A PMML document is an XML document with the following components:

  • a Header giving general information such as a description of the model and the application used to generate it

  • a DataDictionary containing the definition of fields used by the model

  • a Model defining the structure and the parameters of the data mining model



Why use PMML?

PMML allows users to build a model in one system, export it and deploy it in a different environment for prediction. In other words, it enables different platforms to speak the same language, removing the need for custom storage formats.

Screen-Shot-2015-07-02-at-9.53_.31-AM-1024x229_.png

 
Image courtesy of Villu Ruusmann

What’s more, adopting a standard encourages best practices (established ways of structuring models) and transparency (PMML documents are fully intelligible and not black boxes).

Why is Spark supporting PMML?

Building a model (producer) and scoring it (consumer) are two tasks very much decoupled as they require different systems and supporting infrastructure.

Model building is a complex task, it is performed on a large amount of historical data and requires a fast and scalable engine to produce correct results: this is where Apache Spark’s MLlib shines.

Model scoring is performed by operational applications tuned for high throughput and detached from the analytical platform. Exporting MLlib’s models in PMML enables sharing models between Spark and operational apps and is key for the success of predictive analytics.

A Code Example

In Spark, Exporting a data mining model to PMML is as simple as calling model.toPMML. Here a complete example, in Scala, of building a KMeansModel and exporting it to a local file:
import org.apache.spark.mllib.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors

// Load and parse the data
val data = sc.textFile("/path/to/file")
.map(s => Vectors.dense(s.split(',').map(_.toDouble)))

// Cluster the data into three classes using KMeans
val numIterations = 20
val numClusters = 3
val kmeansModel = KMeans.train(data, numClusters, numIterations)

// Export clustering model to PMML
kmeansModel.toPMML("/path/to/kmeans.xml")

The PMML document generated is in this file: kmeans.pmml 
For more examples of models exported and how those may be scored separately from Spark using the JPMML library, see http://spark-packages.org/package/selvinsource/spark-pmml-exporter-validator. 
 
Summary 
 
With Apache Spark 1.4 PMML model export has been introduced, making MLlib interoperable with PMML compliant systems. You can find the supported models and how to export those to PMML from the official documentation page:
 
  http://spark.apache.org/docs/latest/mllib-pmml-model-export.html. We want to thank everyone who helped review and QA the implementation. 
 
There is still work to do for MLlib’s PMML support, for example, supporting PMML export for more models and add Python API. For more details, please visit 
https://issues.apache.org/jira/browse/SPARK-8545.
  “机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与统计推断学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。很多推论问题属于无程序可循难度,所以部分的机器学习研究是开发容易处理的近似算法。” ——中文维基百科