Python大規(guī)模機(jī)器學(xué)習(xí)》—1.1.3使用Python進(jìn)行向上擴(kuò)展">《Python大規(guī)模機(jī)器學(xué)習(xí)》—1.1.3使用Python進(jìn)行向上擴(kuò)展
866
2025-03-31
第2章Scikit-learn中的可擴(kuò)展學(xué)習(xí)
假如擁有這個(gè)時(shí)代強(qiáng)大而又實(shí)惠的電腦,那么,將數(shù)據(jù)集加載到內(nèi)存中、準(zhǔn)備好數(shù)據(jù)矩陣、訓(xùn)練機(jī)器學(xué)習(xí)算法以及使用樣本外觀察法來測(cè)試其泛化能力通常并不是非常困難。然而,隨著要處理的數(shù)據(jù)規(guī)模越來越大,不可能將其加載到計(jì)算機(jī)核心內(nèi)存中,即使能加載,在處理數(shù)據(jù)管理和機(jī)器學(xué)習(xí)兩方面,其結(jié)果依舊會(huì)很棘手。
一種避開核心內(nèi)存的可行策略是:將數(shù)據(jù)分割為樣本,使用并行性,最后從小批量或單個(gè)實(shí)例中學(xué)習(xí)。本章重點(diǎn)介紹Scikit-learn軟件包提供的開箱即用解決方案:從數(shù)據(jù)存儲(chǔ)器中以“流”的方式讀入小批量實(shí)例并基于它們進(jìn)行增量學(xué)習(xí)。這種解決方案稱為“非核心學(xué)習(xí)”。
通過處理可管理的數(shù)據(jù)塊和增量學(xué)習(xí)來處理數(shù)據(jù)是個(gè)好方法。然而,當(dāng)試圖實(shí)現(xiàn)時(shí),由于現(xiàn)有學(xué)習(xí)算法的局限性,它也具有挑戰(zhàn)性。并且,流動(dòng)中的數(shù)據(jù)流也對(duì)數(shù)據(jù)管理和特征提取提出新要求。除了通過Scikit-learn提供非核心學(xué)習(xí)功能外,我們還提供Python解決方案,以解決只有一小部分?jǐn)?shù)據(jù)時(shí)可能面臨的問題。
本章討論以下主題:
在Scikit-learn中實(shí)現(xiàn)非核心學(xué)習(xí)算法
使用散列技巧有效管理數(shù)據(jù)流
隨機(jī)學(xué)習(xí)的基本原理
通過在線學(xué)習(xí)實(shí)現(xiàn)數(shù)據(jù)科學(xué)
數(shù)據(jù)流的無監(jiān)督轉(zhuǎn)換
2.1非核心學(xué)習(xí)
非核心學(xué)習(xí)是指一組處理數(shù)據(jù)的算法,這些數(shù)據(jù)不能放入單臺(tái)計(jì)算機(jī)內(nèi)存,但很容易放入某些數(shù)據(jù)存儲(chǔ)介質(zhì),例如本地硬盤或網(wǎng)絡(luò)存儲(chǔ)庫(kù)。單臺(tái)機(jī)器的核心內(nèi)存(即可用RAM)的大小通常可能只有幾千兆字節(jié)(有時(shí)是2GB,但4GB更常見,這里假設(shè)最多2GB),在有些大型服務(wù)器上會(huì)高達(dá)256GB。大型服務(wù)器與用來提供像Amazon彈性計(jì)算云(EC2)這樣的云計(jì)算服務(wù)的機(jī)器類似,在使用這樣的服務(wù)時(shí),只需用一個(gè)外部驅(qū)動(dòng)器,你的存儲(chǔ)能力就能輕易超過千兆字節(jié)(最有可能是1TB,有時(shí)高達(dá)4TB)。
由于機(jī)器學(xué)習(xí)立足于全局降低成本函數(shù),因此許多算法最初都被認(rèn)為將處理所有可用數(shù)據(jù),并能在優(yōu)化過程的每次迭代中訪問這些數(shù)據(jù)。這樣的情況特別適用于基于統(tǒng)計(jì)學(xué)習(xí)的所有矩陣演算算法(例如逆矩陣),而且基于貪婪搜索的算法需要在執(zhí)行下一步前評(píng)估盡可能多的數(shù)據(jù)。因此,最常見的開箱即用的回歸式算法(加權(quán)線性特征組合)會(huì)更新其系數(shù),以盡量減少合并整個(gè)數(shù)據(jù)集的錯(cuò)誤。類似地,由于對(duì)數(shù)據(jù)集中的噪聲非常敏感,決策樹必須根據(jù)所有可用數(shù)據(jù)決定最佳分割,以便找到最優(yōu)解決方案。
如果這種情況下數(shù)據(jù)無法放入計(jì)算機(jī)核心內(nèi)存,那么就不存在解決方案。只有增加可用內(nèi)存(這受限于主板,否則只能采用書中后幾章介紹的分布式系統(tǒng),比如Hadoop和Spark這樣的解決方案),或簡(jiǎn)單減少數(shù)據(jù)集以適應(yīng)內(nèi)存。
如果是稀疏數(shù)據(jù),也就是說,數(shù)據(jù)集中有許多零值,則可將稠密矩陣轉(zhuǎn)換為稀疏矩陣。這就是典型的具有許多列的文本數(shù)據(jù),因?yàn)槊苛芯褪且粋€(gè)文字,但表示字頻數(shù)的值很小,因?yàn)閱蝹€(gè)文本文件通常只顯示有限文字。有時(shí)利用稀疏矩陣能解決這個(gè)問題,它允許你同時(shí)加載和處理其他相當(dāng)大的數(shù)據(jù)集,但這不是靈丹妙藥(也就是說,沒有適合解決所有問題的解決方案),因?yàn)槟承?shù)據(jù)矩陣雖然稀疏,但其大小常常令人吃驚。
這種情況下,總是可以嘗試減少實(shí)例數(shù)量或限制特征數(shù)量來減少數(shù)據(jù)集,從而達(dá)到減少數(shù)據(jù)集矩陣維數(shù)和內(nèi)存中占用區(qū)域的目的。只選擇一部分觀察數(shù)據(jù)來減少數(shù)據(jù)集大小稱為子采樣(或簡(jiǎn)單抽樣)解決方案。子采樣雖好,但也有嚴(yán)重缺陷,在決定分析前務(wù)必注意這一點(diǎn)。
2.1.1選擇子采樣
使用子采樣時(shí),實(shí)際上會(huì)失去一部分信息,并且無法確定是否只丟棄了冗余信息,而不是有用的觀察數(shù)據(jù)。實(shí)際上,只有考慮到所有數(shù)據(jù),才能找到有價(jià)值的信息。盡管子采樣在計(jì)算方面很有吸引力(因?yàn)樽硬蓸又恍枰粋€(gè)隨機(jī)生成器來告訴你是否應(yīng)該選擇某個(gè)實(shí)例),但這樣確實(shí)可能限制算法以完整方式學(xué)習(xí)數(shù)據(jù)中的規(guī)則和關(guān)聯(lián)的能力。在對(duì)偏差與方差的權(quán)衡中,由于數(shù)據(jù)中的隨機(jī)噪聲或離線觀測(cè),致使估計(jì)變得更不確定,從而導(dǎo)致子采樣預(yù)測(cè)方差膨脹。
在大數(shù)據(jù)世界里,能處理更多高質(zhì)量數(shù)據(jù)的算法會(huì)獲勝,因?yàn)樗軐W(xué)習(xí)更多方法,從而將預(yù)測(cè)與預(yù)測(cè)器關(guān)聯(lián),而那些用更少、更嘈雜數(shù)據(jù)學(xué)習(xí)的模型與此相反。因此,盡管子采樣可以作為一種解決方案,但由于預(yù)測(cè)不準(zhǔn)確和估計(jì)方差較大,子采樣可能影響機(jī)器學(xué)習(xí)結(jié)果。
在數(shù)據(jù)的多個(gè)子樣本上學(xué)習(xí)多個(gè)模型,然后將所有解決方案或所有模型結(jié)果堆疊,從而創(chuàng)建用于進(jìn)一步訓(xùn)練的簡(jiǎn)化數(shù)據(jù)矩陣,以達(dá)到克服子采樣限制的目的。這個(gè)過程稱為bagging,它實(shí)際上是以這種方式壓縮某些特征,從而減少內(nèi)存數(shù)據(jù)空間。后面章節(jié)會(huì)介紹集成和堆疊,并說明如何減少被子采樣所膨脹的數(shù)據(jù)估計(jì)方差。
另一種選擇是裁剪特征,而不是裁剪實(shí)例,但是這同樣也會(huì)遇到問題:這需要從數(shù)據(jù)中構(gòu)建模型以測(cè)試選擇哪些特征,因此,仍然不得不用無法放入內(nèi)存的數(shù)據(jù)來構(gòu)建模型。
TensorFlow python 機(jī)器學(xué)習(xí)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。