『壹』 濡備綍瑙i噴spark mllib涓瑼LS绠楁硶鐨勫師鐞
瀵逛簬涓涓猽sers-procts-rating鐨勮瘎鍒嗘暟鎹闆嗭紝ALS浼氬缓绔嬩竴涓猽ser*proct鐨刴*n鐨勭煩闃
鍏朵腑锛宮涓簎sers鐨勬暟閲忥紝n涓簆rocts鐨勬暟閲
浣嗘槸鍦ㄨ繖涓鏁版嵁闆嗕腑锛屽苟涓嶆槸姣忎釜鐢ㄦ埛閮藉规瘡涓浜у搧杩涜岃繃璇勫垎锛屾墍浠ヨ繖涓鐭╅樀寰寰鏄绋鐤忕殑锛岀敤鎴穒瀵逛骇鍝乯鐨勮瘎鍒嗗線寰鏄绌虹殑
ALS鎵鍋氱殑浜嬫儏灏辨槸灏嗚繖涓绋鐤忕煩闃甸氳繃涓瀹氱殑瑙勫緥濉婊★紝杩欐牱灏卞彲浠ヤ粠鐭╅樀涓寰楀埌浠绘剰涓涓猽ser瀵逛换鎰忎竴涓猵roct鐨勮瘎鍒嗭紝ALS濉鍏呯殑璇勫垎椤逛篃绉颁负鐢ㄦ埛i瀵逛骇鍝乯鐨勯勬祴寰楀垎
鎵浠ヨ达紝ALS绠楁硶鐨勬牳蹇冨氨鏄閫氳繃浠涔堟牱瀛愮殑瑙勫緥鏉ュ~婊★紙棰勬祴锛夎繖涓绋鐤忕煩闃
瀹冩槸杩欎箞鍋氱殑锛
鍋囪緈*n鐨勮瘎鍒嗙煩闃礡锛屽彲浠ヨ杩戜技鍒嗚В鎴怳*(V)T
U涓簃*d鐨勭敤鎴风壒寰佸悜閲忕煩闃
V涓簄*d鐨勪骇鍝佺壒寰佸悜閲忕煩闃碉紙(V)T浠h〃V鐨勮浆缃锛屽師璋呮垜涓嶄細鎵撹浆缃杩欎釜绗﹀彿銆傘傦級
d涓簎ser/proct鐨勭壒寰佸肩殑鏁伴噺
鍏充簬d杩欎釜鍊肩殑鐞嗚В锛屽ぇ姒傚彲浠ユ槸杩欐牱鐨
瀵逛簬姣忎釜浜у搧锛屽彲浠ヤ粠d涓瑙掑害杩涜岃瘎浠凤紝浠ョ數褰变负渚嬶紝鍙浠ヤ粠涓绘紨锛屽兼紨锛岀壒鏁堬紝鍓ф儏4涓瑙掑害鏉ヨ瘎浠蜂竴閮ㄧ數褰憋紝閭d箞d灏辩瓑浜4
鍙浠ヨや负锛屾瘡閮ㄧ數褰卞湪杩4涓瑙掑害涓婇兘鏈変竴涓鍥哄畾鐨勫熀鍑嗚瘎鍒嗗
渚嬪傘婃湯鏃ュ穿濉屻嬭繖閮ㄧ數褰辨槸涓涓浜у搧锛屽畠鐨勭壒寰佸悜閲忔槸鐢眃涓鐗瑰緛鍊肩粍鎴愮殑
d=4锛屾湁4涓鐗瑰緛鍊硷紝鍒嗗埆鏄涓绘紨锛屽兼紨锛岀壒鏁堬紝鍓ф儏
姣忎釜鐗瑰緛鍊肩殑鍩哄噯璇勫垎鍊煎垎鍒涓猴紙婊″垎涓1.0锛夛細
涓绘紨锛0.9锛堝ぇ鍏夊ご杩樻槸閭d箞闇告皵锛
瀵兼紨锛0.7
鐗规晥锛0.8
鍓ф儏锛0.6
鐭╅樀V鐢眓涓猵roct*d涓鐗瑰緛鍊肩粍鎴
瀵逛簬鐭╅樀U锛屽亣璁惧逛簬浠绘剰鐨勭敤鎴稟锛岃ョ敤鎴峰逛竴閮ㄧ數褰辩殑缁煎悎璇勫垎鍜岀數褰辩殑鐗瑰緛鍊煎瓨鍦ㄤ竴瀹氱殑绾挎у叧绯伙紝鍗崇數褰辩殑缁煎悎璇勫垎=(a1*d1+a2*d2+a3*d3+a4*d4)
鍏朵腑a1-4涓虹敤鎴稟鐨勭壒寰佸硷紝d1-4涓轰箣鍓嶆墍璇寸殑鐢靛奖鐨勭壒寰佸
鍙傝冿細
鍗忓悓杩囨护涓鐨勭煩闃靛垎瑙g畻娉曠爺绌
閭d箞瀵逛簬涔嬪墠ALS绠楁硶鐨勮繖涓鍋囪
m*n鐨勮瘎鍒嗙煩闃礡锛屽彲浠ヨ杩戜技鍒嗚В鎴怳*(V)T
灏辨槸鎴愮珛鐨勶紝鏌愪釜鐢ㄦ埛瀵规煇涓浜у搧鐨勮瘎鍒嗗彲浠ラ氳繃鐭╅樀U鏌愯屽拰鐭╅樀V锛堣浆缃锛夌殑鏌愬垪鐩镐箻寰楀埌
閭d箞鐜板湪鐨勯棶棰樻槸锛屽備綍纭瀹氱敤鎴峰拰浜у搧鐨勭壒寰佸硷紵锛堜箣鍓嶄粎浠呮槸涓句緥瀛愶紝瀹為檯涓杩欎袱涓閮芥槸鏈鐭ョ殑鍙橀噺锛
閲囩敤鐨勬槸浜ゆ浛鐨勬渶灏忎簩涔樻硶
鍦ㄤ笂闈㈢殑鍏寮忎腑锛宎琛ㄧず璇勫垎鏁版嵁闆嗕腑鐢ㄦ埛i瀵逛骇鍝乯鐨勭湡瀹炶瘎鍒嗭紝鍙﹀栦竴閮ㄥ垎琛ㄧず鐢ㄦ埛i鐨勭壒寰佸悜閲忥紙杞缃锛*浜у搧j鐨勭壒寰佸悜閲忥紙杩欓噷鍙浠ュ緱鍒伴勬祴鐨刬瀵筳鐨勮瘎鍒嗭級
鐢ㄧ湡瀹炶瘎鍒嗗噺鍘婚勬祴璇勫垎鐒跺悗姹傚钩鏂癸紝瀵逛笅涓涓鐢ㄦ埛锛屼笅涓涓浜у搧杩涜岀浉鍚岀殑璁$畻锛屽皢鎵鏈夌粨鏋滅疮鍔犺捣鏉ワ紙鍏朵腑锛屾暟鎹闆嗘瀯鎴愮殑鐭╅樀鏄瀛樺湪澶ч噺鐨勭┖鎵撳垎锛屽苟娌℃湁瀹為檯鐨勮瘎鍒嗭紝瑙e喅鐨勬柟娉曟槸灏卞彧鐪嬪瑰凡鐭ユ墦鍒嗙殑椤癸級
鍙傝冿細
ALS 鍦 Spark MLlib 涓鐨勫疄鐜
浣嗘槸杩欓噷涔嬪墠闂棰樿繕鏄瀛樺湪锛屽氨鏄鐢ㄦ埛鍜屼骇鍝佺殑鐗瑰緛鍚戦噺閮芥槸鏈鐭ョ殑锛岃繖涓寮忓瓙瀛樺湪涓や釜鏈鐭ュ彉閲
瑙e喅鐨勫姙娉曟槸浜ゆ浛鐨勬渶灏忎簩涔樻硶
棣栧厛瀵逛簬涓婇潰鐨勫叕寮忥紝浠ヤ笅闈㈢殑褰㈠紡鏄剧ず锛
涓轰簡闃叉㈣繃搴︽嫙鍚堬紝鍔犱笂姝e垯鍖栧弬鏁
棣栧厛鐢ㄤ竴涓灏忎簬1鐨勯殢鏈烘暟鍒濆嬪寲V
鏍规嵁鍏寮忥紙4锛夋眰U
姝ゆ椂灏卞彲浠ュ緱鍒板垵濮嬬殑UV鐭╅樀浜嗭紝璁$畻涓婇潰璇磋繃鐨勫樊骞虫柟鍜
鏍规嵁璁$畻寰楀埌鐨刄鍜屽叕寮忥紙5锛夛紝閲嶆柊璁$畻骞惰嗙洊V锛岃$畻宸骞虫柟鍜
鍙嶅嶈繘琛屼互涓婁袱姝ョ殑璁$畻锛岀洿鍒板樊骞虫柟鍜屽皬浜庝竴涓棰勮剧殑鏁帮紝鎴栬呰凯浠f℃暟婊¤冻瑕佹眰鍒欏仠姝
鍙栧緱鏈鏂扮殑UV鐭╅樀
鍒欏師鏈鐨勭█鐤忕煩闃礡灏卞彲浠ョ敤R=U(V)T鏉ヨ〃绀轰簡
浠ヤ笂鍏寮忓唴瀹规埅鍥炬潵鑷锛
鍩轰簬鐭╅樀鍒嗚В鐨勫崗鍚岃繃婊ょ畻娉
鎬荤粨涓涓嬶細
ALS绠楁硶鐨勬牳蹇冨氨鏄灏嗙█鐤忚瘎鍒嗙煩闃靛垎瑙d负鐢ㄦ埛鐗瑰緛鍚戦噺鐭╅樀鍜屼骇鍝佺壒寰佸悜閲忕煩闃电殑涔樼Н
浜ゆ浛浣跨敤鏈灏忎簩涔樻硶閫愭ヨ$畻鐢ㄦ埛/浜у搧鐗瑰緛鍚戦噺锛屼娇寰楀樊骞虫柟鍜屾渶灏
閫氳繃鐢ㄦ埛/浜у搧鐗瑰緛鍚戦噺鐨勭煩闃垫潵棰勬祴鏌愪釜鐢ㄦ埛瀵规煇涓浜у搧鐨勮瘎鍒
涓嶇煡閬撴槸涓嶆槸鐞嗚В姝g‘浜
『贰』 Spark 怎么读文件名
Apache Spark 本身
1.MLlib
AMPLab
Spark最初诞生于伯克利 AMPLab实验室,如今依然还是AMPLab所致力的项目,尽管这些不处于Apache Spark Foundation中,但是依然在你日常的github项目中享有相当的地位。
ML Base
Spark本身的MLLib位于三层ML Base中的最底层,MLI位于中间层,ML Optimizer则处于最为抽象的顶层。
2.MLI
3.ML Optimizer (又称 Ghostface)
Ghostware这个项目在2014年就开始进行了,不过从未对外公布。在这39个机器学习库中,这是唯一一个雾件,之所以能囊括在这列表中,全凭着AMPLab与ML Base的地位支撑。
ML Base之外
4.Splash
这是近期2015年6月的一个项目,在运行随机梯度下降(SGD)时这套随机学习算法声称在性能上比Spark MLib中快了25%-75%。这是AMPLab实验室的sp标记项目,因此值得我们去阅读。
5.Keystone ML
KML将端到端的机器学习管道引进到了Spark中,但在近期Spark版本中管道已经趋于成熟。同样也承诺具有一些计算机视觉能力,我曾经在博客中也提到过这也存在一些局限。
6.Velox
作为一个服务器专门负责管理大量机器学习模型的收集。
7.CoCoA
通过优化通信模式与shuffles来实现更快的机器学习,详情可见这篇论文的描述《高效通信分布式双坐标上升》。
框架
GPU-based
8.DeepLearning4j
我曾经的一则博客有进行说明 《DeepLearning4J 增加了Spark gpu的支持》。
9.Elephas
全新的概念,这也是我写这篇博客的初衷。它提供了一个接口给Keras。
Non-GPU-based
10.DistML
模式并行下而并非数据并行的参数服务器(正如 Spark MLib)。
11.Aerosolve
来自Airbnb,用于他们自动化定价。
12. Zen
逻辑斯谛回归、隐含狄利克雷分布(LDA)、因子分解机、神经网络、受限玻尔兹曼机。
13.Distributed Data Frame
与Spark DataFrame类似,但是引擎是不可知的(例如在未来它将运行在引擎上而不是Spark)。其中包括了交叉验证和外部机器学习库的接口。
其他机器学习系统的接口
14. spark-corenlp
封装了斯坦福CoreNLP。
15. Sparkit-learn
给Python Scikit-learn的接口。
16. Sparkling Water
给 的接口。
17. hivemall-spark
封装了Hivemall,,在Hive中的机器学习。
18. spark-pmml-exporter-validator
可导出预测模型标记语言(PMML),一种用于传递机器学习模型的行业标准的XML格式。
附加组件:增强MLlib中现有的算法。
19. MLlib-dropout
为Spark MLLib 增加dropout能力。基于以下这篇论文进行的实现,《Dropout:一个简单的方法来防止神经网络中的过拟合》。
20.generalized-kmeans-clustering
为K-Means算法增加任意距离函数。
21. spark-ml-streaming
可视化的流式机器学习算法内置于Spark MLlib。
算法
监督学习
22. spark-libFM
因子分解机。
23. ScalaNetwork
递归神经网络(RNNs)。
24. dissolve-struct
基于上文中提到的高性能Spark通信框架CoCoA下的支持向量机(SVM)。
25. Sparkling Ferns
基于以下这篇论文进行的实现,《通过使用随机森林与随机蕨算法的图像分类技术》。
26. streaming-matrix-factorization
矩阵分解推荐系统。
对于Java程序员,大数据的主流平台hadoop是基于Java开发的,所以Java程序员往大数据开发方向转行从语言环境上更为顺畅,另外很多基于大数据的应用框架也是Java的,所以在很多大数据项目里掌握Java语言是有一定优势的。
当然,hadoop核心价值在于提供了分布式文件系统和分布式计算引擎,对于大部分公司而言,并不需要对这个引擎进行修改。这时候除了熟悉编程,你通常还需要学习数据处理和数据挖掘的一些知识。尤其是往数据挖掘工程师方向发展,则你需要掌握更多的算法相关的知识。
对于数据挖掘工程师而言,虽然也需要掌握编程工具,但大部分情况下是把hadoop当做平台和工具,借助这个平台和工具提供的接口使用各种脚本语言进行数据处理和数据挖掘。因此,如果你是往数据挖掘工程方向发展,那么,熟练掌握分布式编程语言如scala、spark-mllib等可能更为重要。
Java程序员转大数据工程师的学习路线图:
第一步:分布式计算框架
掌握hadoop和spark分布式计算框架,了解文件系统、消息队列和Nosql数据库,学习相关组件如hadoop、MR、spark、hive、hbase、redies、kafka等;
第二步:算法和工具
学习了解各种数据挖掘算法,如分类、聚类、关联规则、回归、决策树、神经网络等,熟练掌握一门数据挖掘编程工具:Python或者Scala。目前主流平台和框架已经提供了算法库,如hadoop上的Mahout和spark上的Mllib,你也可以从学习这些接口和脚本语言开始学习这些算法。
第三步:数学
补充数学知识:高数、概率论和线代
第四步:项目实践
1)开源项目:tensorflow:Google的开源库,已经有40000多个star,非常惊人,支持移动设备;
2)参加数据竞赛
3)通过企业实习获取项目经验
如果你仅仅是做大数据开发和运维,则可以跳过第二步和第三步,如果你是侧重于应用已有算法进行数据挖掘,那么第三步也可以先跳过。