99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀R+Hadoop方案為何成為企業(yè)學(xué)習(xí)業(yè)務(wù)的首選_數(shù)據(jù)分析師
R+Hadoop方案為何成為企業(yè)學(xué)習(xí)業(yè)務(wù)的首選_數(shù)據(jù)分析師
2014-11-14
收藏

R+Hadoop方案為何成為企業(yè)學(xué)習(xí)業(yè)務(wù)的首選_數(shù)據(jù)分析師

眾所周知,R在解決統(tǒng)計學(xué)問題方面無與倫比。但是R在數(shù)據(jù)量達(dá)到2G以上速度就很慢了,于是就催生出了與Hadoop相結(jié)合跑分布式算法這種解決方案,但是,python+Hadoop這樣的解決方案有沒有團(tuán)隊在使用?R這樣起源于統(tǒng)計學(xué)的計算機(jī)包與Hadoop相結(jié)合會不會出問題?
因?yàn)樗麄冊诓欢甊和Hadoop特征應(yīng)用場景的情況下,恰好抓到了一根免費(fèi),開源的稻草。 
R:
R的應(yīng)用場景不在于無與倫比的統(tǒng)計學(xué)習(xí)能力,而在于結(jié)構(gòu)化數(shù)據(jù)下無與倫比的單位代碼產(chǎn)出量。神經(jīng)網(wǎng)絡(luò)決策樹等基于結(jié)構(gòu)化數(shù)據(jù)的算法一行代碼搞定,預(yù)測又只是一行代碼。這樣,商業(yè)數(shù)據(jù)庫(如包括Oracle,Netezza,Teradata,SAPHANA等)提供了R接口供統(tǒng)計分析人員進(jìn)行高效實(shí)施。同樣的,SAS和IBM SPSS也做到了一部分高效實(shí)施能力,他們沒有的是R獨(dú)有的龐大cran packages群。但相似的一點(diǎn)是,R的package群也把它的用戶慣壞了,慣壞到這些人只是覺得這是一個SAS或者SPSS的免費(fèi)版,而不是去通過代碼學(xué)習(xí)如何做機(jī)器學(xué)習(xí)哪怕一點(diǎn)點(diǎn)核心原理。你要做的,就是高效的最新結(jié)構(gòu)化數(shù)據(jù)算法的實(shí)施。
最重要的是,從Hadoop上的數(shù)據(jù)加載到這些庫,不僅保證了數(shù)據(jù)本身的正確性和結(jié)構(gòu)化,也已經(jīng)保證了數(shù)據(jù)模型的第二、第三范式化(CAErwin的第一課),想做任何一個分析,你手邊的數(shù)據(jù)庫簡單的join就形成了你需要的分析寬表。想想SQL里sumover的設(shè)計含義:為什么它要制造數(shù)據(jù)的冗余?那一定是為了BI或者分析存在的。
Hadoop
Hadoop的應(yīng)用場景不在于給統(tǒng)計分析軟件提供強(qiáng)力的支持,而只是提供了一個分布式數(shù)據(jù)的泛用免費(fèi)框架,基于鍵值對(key value pair)高效的對原始非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行存儲。
結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)庫結(jié)合的R+Hadoop看起來很美,實(shí)則困難重重。我的看法是,任何一家在數(shù)據(jù)分析領(lǐng)域(Text Mining暫時除外,見后)決定以一個穩(wěn)健的態(tài)度涉足的企業(yè),都無一例外的基于數(shù)據(jù)強(qiáng)一致性的考慮,選擇傳統(tǒng)的結(jié)構(gòu)化數(shù)據(jù)庫作為后續(xù)結(jié)構(gòu)化分析的依托——哪怕他們是收費(fèi)的。如果習(xí)慣代碼開發(fā),Hadoop+python自己做初步的數(shù)據(jù)處理,而后使用基于java的Mahout是一個很自然的選擇。
R+Hadoop的幻覺:
不管什么和Hadoop結(jié)合,都喜歡以word count這種典型的鍵值對開始。事實(shí)上R可以做這件事,但是覺得R做的無與倫比,就有點(diǎn)進(jìn)入誤區(qū)。還是那句R的美在于結(jié)構(gòu)化數(shù)據(jù)下無與倫比的單位代碼產(chǎn)出量。一旦你發(fā)現(xiàn)你作為專注于數(shù)據(jù)的分析師,同時也是一個并不骨灰的代碼開發(fā)者,開始用R操作列表和數(shù)據(jù)結(jié)構(gòu),開始用R重寫Mapper和Reducer,你就會產(chǎn)生一個疑問:
為嘛不學(xué)Java、Python?這種分析“不傳統(tǒng)”,就算你不想學(xué)吧,為嘛不找懂它們的人來干?
Python基于鍵值對存儲,也具有相當(dāng)高的單位代碼產(chǎn)出量,也有很多科學(xué)計算包。從這個意義上你可以做出一個白箱,單機(jī)縮水版的mahout,而且適合處理有增量算法的大數(shù)據(jù)學(xué)習(xí)(看看NumPy,SciPy,)。一樣免費(fèi)。
數(shù)據(jù)挖掘的幻覺:
數(shù)據(jù)挖掘是什么,很難嗎?
廣義的數(shù)據(jù)挖掘,包括數(shù)據(jù)分析和機(jī)器學(xué)習(xí),只說最核心的數(shù)學(xué)概念的話,估計就幾句話;恰好R的簡潔性也是能用幾句話做完這幾句話的:
0數(shù)據(jù)清洗,標(biāo)準(zhǔn)化。和1-4,理解真實(shí)世界是相輔相成的
1最先學(xué)的數(shù)學(xué)技巧是空間分解:LL’,PCA,SVD,回歸以及L2/L0懲罰變種
2再學(xué)最優(yōu)化算法:L1懲罰回歸,SVM(使用的Newton-Raphson/Gauss-Newton/Levenberg-Marquadt(還是1的內(nèi)容);MonteCarloMarkovChain
3數(shù)據(jù)結(jié)構(gòu):決策樹(列表類),詞頻統(tǒng)計(鍵值對或者字典類),F(xiàn)P-growth(一個樹的加強(qiáng)版)。學(xué)到這,所謂“貝葉斯”根本就不能叫算法,只能叫一個指導(dǎo)思想。
4模型集成:Adaboost,神經(jīng)網(wǎng)絡(luò),bootstrap。對方法,對模型參數(shù)都能集成(大雜燴)
任何一個聽起來很裝逼的算法,逃不過被解析成這4類方法組合的命運(yùn)。
可以看到,大數(shù)據(jù)分析的瓶頸在哪?
第0步,和曾經(jīng)的大Boss討論過,傳統(tǒng)行業(yè)數(shù)據(jù)倉庫實(shí)施起碼還能打10年,而”實(shí)體-關(guān)系”概念和”鍵-值”概念這兩種抽象起碼還能打30年,數(shù)據(jù)的組織、過濾,元數(shù)據(jù)維護(hù)都是數(shù)據(jù)產(chǎn)生價值的必經(jīng)之路,這方面的工作很枯燥但是很基礎(chǔ),大數(shù)據(jù)和傳統(tǒng)數(shù)據(jù)都需要;
第1步是最基本最重要的分析手段,也最容易在大數(shù)據(jù)語境下導(dǎo)致單機(jī)無法分析的億階稀疏大矩陣產(chǎn)生:例1,用戶User對商品SKU的購買記錄;例2,在特定的經(jīng)緯度,特定的時間,特定的用戶發(fā)生了動作;這兩個例子是典型的“匯總還不如不匯總”的情況,必須要有分布式稀疏矩陣處理技術(shù);
第2步,序貫MCMC的串行性可以通過并行集成方法模擬,但是收斂性還仍然較低,需要暴力并行堆FLOPS;對應(yīng)的,因?yàn)?a href='/map/svm/' style='color:#000;font-size:inherit;'>SVM/Lasso都有增量算法、分布式算法方案,核心思想在于“世界的真實(shí),模型的本質(zhì),都是稀疏的”,鎖少量資源,分布式地更新模型系數(shù)或者是梯度,這些算法在理論上得到突破后,往往依賴分析型數(shù)據(jù)庫或者大數(shù)據(jù)平臺靈活的并發(fā)調(diào)度,靈活的行列混合存儲模式,這一點(diǎn)是單機(jī)、小集群、傳統(tǒng)數(shù)據(jù)庫難以企及的;
第3、4步,這里雖然舉了很簡單的例子,但這些是在數(shù)學(xué)模型和數(shù)據(jù)模型上是最沒有開發(fā)壓力的,需要關(guān)心的只是資深程序員的功底了。舉例說明,文本挖掘NLP)統(tǒng)計完詞頻你還是得會空間里做PCA(或者其他形式的大矩陣加工);如果不然,只引入HMM模型和基礎(chǔ)字典樹的話,學(xué)習(xí)成本就只有學(xué)習(xí)貝葉斯理論了,并且仍然可以高效并行的解決NLP問題,有興趣的可以參考Viterbi算法和CRF算法。
大數(shù)據(jù)的幻覺:存儲和計算的沖突
大數(shù)據(jù)處理,多大算大?像我說的,在3、4步出來的數(shù)據(jù),原始數(shù)據(jù)很大,加工匯總完了很小,或者處理起來是高度獨(dú)立的。分布式存儲不影響分析,說是大數(shù)據(jù),其實(shí)和小數(shù)據(jù)處理沒差別。
需要隨時交換資源的聚類,回歸,SVD,PCA,QR,LU等關(guān)系到矩陣分解的計算甚至是高效訪問,這才是大數(shù)據(jù)真正的挑戰(zhàn)。
那些有監(jiān)督的分類樹,把數(shù)據(jù)集切成1000份并且有冗余的給500臺機(jī)器每臺3-5份數(shù)據(jù)最后得到集成的分類結(jié)果,我很難稱其為“大數(shù)據(jù)計算技術(shù)”,它的本質(zhì)和挖礦機(jī)每秒能做無數(shù)個高度同質(zhì)化的hash計算一樣,不需要資源交換,不需要大量通信,它只是小數(shù)據(jù)的范圍內(nèi)打轉(zhuǎn)。
內(nèi)存內(nèi)的分析和數(shù)據(jù)探索,展現(xiàn)(單節(jié)點(diǎn)):
百萬級,R的上限;千萬級-億級,SAS的上限;億級,Python的上限。我的使用經(jīng)驗(yàn)是,400M數(shù)據(jù),Python加載內(nèi)存500M,R加載占內(nèi)存2G,SAS加載600M,經(jīng)過表級壓縮150M。而后續(xù)的原始處理(尤其是字符串操作這種數(shù)據(jù)清洗),R幾乎不能做。這就需要你輸入到R的數(shù)據(jù)幾乎就能直接開始跑分析了。若不信邪,我推薦你用readLines加上strsplit來操作讀入R的文件,看看他數(shù)據(jù)清洗的效率和read.delim,和SASprocimport以及Python的withas語法相差多少。
同時另一方面,只要數(shù)據(jù)量低于剛才提到的限度,R又提供了最好的展現(xiàn)方案,因?yàn)椤罢宫F(xiàn)方案是專用而非泛用”的。最著名的ggplot2,基于百度echarts產(chǎn)品的recharts(bytaiyunonGithub),還有YihuiXie的作品knitr(markdown語法動態(tài)將數(shù)據(jù)挖掘結(jié)果,圖片,視頻生成html),要比Python現(xiàn)有的可視化包(甚至是GUI包)更友好,易于操作,更適合小數(shù)據(jù)集快速展現(xiàn)。如果你恰好是SAS用戶,還是不要說自己懂?dāng)?shù)據(jù)展現(xiàn)會比較好。來自:http://www.3lll3.cn/
我的理解是,R的產(chǎn)出類似html+js+CSS一樣,適合輕量分析,輕量展現(xiàn),更適合個人用戶。
非結(jié)構(gòu)化大數(shù)據(jù)處理:
你的算法已經(jīng)走到了“萬事俱備,只差跑全量”這樣一個對手中的數(shù)據(jù)很了解的地步了。Wiki對Revolution Analytics的介紹講:R didn’t natively handle datasets larger than main memory。非結(jié)構(gòu)化大數(shù)據(jù)應(yīng)用的場景只能是:
你很懂?dāng)?shù)據(jù)分布的細(xì)節(jié)(也許你花了很久在其他項目或者本項目的樣本數(shù)據(jù)上研究過也在大數(shù)據(jù)集上稍微驗(yàn)證了一下)什么算法適合你了然于胸,已知增量算法是存在的,或者你覺得暴力并行沒問你覺得把類似Mahout計算的步驟經(jīng)過代碼包裝交付給R來做沒問題
你完全不care交互式探索  
這是你需要的R應(yīng)用場景么?或者換一種說法,這種應(yīng)用場景R有什么優(yōu)勢?要知道算法效率排名上R說下鄙team(一個不是專業(yè)做數(shù)據(jù)挖掘的數(shù)據(jù)部門)的經(jīng)驗(yàn):講了半天R+Hadoop,不上Mahout,隨便搞搞RSnow,準(zhǔn)備買SAS。 
因?yàn)槲視AS(少量用Macro,沒用過矩陣,因?yàn)闆]必要)和R(沒有學(xué)習(xí)成本),Python的并行包pp使用中,考慮mahout。  
更新:當(dāng)大數(shù)據(jù)平臺用戶不滿足于存儲,簡單加工以及成型算法實(shí)施,也開始關(guān)注最小查詢、交互式探索效率了,諸如Spark的內(nèi)存解決方案將會更合適。  
結(jié)束語: 
順便也給數(shù)據(jù)分析師,以及他們的領(lǐng)導(dǎo)們提醒一句:如果A有B沒有的代碼開發(fā)能力,R又完全替B把數(shù)學(xué)的事情做完了,形成了依賴,那B存在的意義是什么?國人強(qiáng)調(diào)數(shù)學(xué)理論這么一點(diǎn)點(diǎn)優(yōu)勢也都不復(fù)存在了。機(jī)器學(xué)習(xí)算法在不同的階段適合使用不同的工具,研究和使用接不上也就算了,千萬別連工具適合的環(huán)境都不懂,作為互聯(lián)網(wǎng)從業(yè)人員,這就太難堪了。
在美國,精英的研究者是自己做開發(fā)的——這話也可以這么說,精英的開發(fā)者們自己做研究。每一個模型都不完美,現(xiàn)有的模型很可能不滿足你的分析需要。所以才要以開放的心態(tài)接納新技術(shù),發(fā)展深入數(shù)據(jù)挖掘研究,從代碼優(yōu)化改造(山寨)走向技術(shù)原創(chuàng)。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }