W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
? 對(duì)于一些應(yīng)用場景,比如許多的樣本或者許多的特征(或者樣本特征都很多),又或者這個(gè)速度問題(太慢)都是一些常規(guī)傳統(tǒng)技術(shù)無法解決的。正因如此,scikit-learn提供了幾種方法來解決大家的問題。
外核(也有的稱核外或“外部存儲(chǔ)器”)學(xué)習(xí)是用來從那種無法在內(nèi)存(RAM)中存放的數(shù)據(jù)中學(xué)習(xí)、訓(xùn)練模型的技術(shù)。
下面介紹一下為解決這些問題提出的系統(tǒng)方案、思路:
數(shù)據(jù)流化的思路 從數(shù)據(jù)實(shí)例中提取特征的思路 增量式解決思路
基本上,思路1可能是從硬盤、數(shù)據(jù)庫、網(wǎng)絡(luò)流等文件中生成實(shí)例的讀取器。但是,有關(guān)如何實(shí)現(xiàn)這一點(diǎn)的詳細(xì)信息超出了本文檔的范圍。
思路2 可能是scikit learn支持的不同特征提取方法中提取特征的任何相關(guān)方法。但是,在處理需要矢量化的數(shù)據(jù)時(shí),如果事先不知道特征或值的集合,則應(yīng)明確注意。一個(gè)很好的例子是文本分類,在訓(xùn)練過程中可能會(huì)發(fā)現(xiàn)未知的術(shù)語。如果從應(yīng)用程序的角度來看,對(duì)數(shù)據(jù)進(jìn)行多次傳遞是合理的,則可以使用有狀態(tài)矢量器。否則,可以使用無狀態(tài)特征提取程序來增加難度。
目前,這樣做的首選方法是使用所謂的 哈希技巧,在 sklearn.feature_extraction.FeatureHasher
中,其中有分類變量的表示為 Python 列表或 sklearn.feature_extraction.text.HashingVectorizer
文本文檔。
最后,對(duì)于3. 我們?cè)?scikit-learn 之中有許多選擇。雖然不是所有的算法都能夠增量學(xué)習(xí)(即不能一次性看到所有的實(shí)例),所有實(shí)現(xiàn) partial_fit
API 的估計(jì)器都作為了候選。實(shí)際上,從小批量的實(shí)例(有時(shí)稱為“在線學(xué)習(xí)”)逐漸學(xué)習(xí)的能力是外核學(xué)習(xí)的關(guān)鍵,因?yàn)樗WC在任何給定的時(shí)間內(nèi)只有少量的實(shí)例在主存儲(chǔ)中,選擇適合小批量的尺寸來平衡相關(guān)性和內(nèi)存占用可能涉及一些調(diào)整 [1].
以下是針對(duì)不同任務(wù)的增量估算器列表:
聚類(Clustering)
分解/特征提?。―ecomposition / feature Extraction)
sklearn.decomposition.MiniBatchDictionaryLearning
對(duì)于分類,有一點(diǎn)要注意的是,雖然無狀態(tài)特征提取程序可能能夠應(yīng)對(duì)新的/未知的屬性,但增量學(xué)習(xí)者本身可能無法應(yīng)對(duì)新的/未知的目標(biāo)類。在這種情況下,你必須使用 classes=
參數(shù)將所有可能的類傳遞給第一個(gè) partial_fit
調(diào)用。
選擇合適的算法時(shí)要考慮的另一個(gè)方面是,所有這些算法隨著時(shí)間的推移不會(huì)給每個(gè)樣例相同的重要性。比如說, Perceptron
仍然對(duì)錯(cuò)誤標(biāo)簽的例子是敏感的,即使經(jīng)過多次的樣例訓(xùn)練,而 SGD*
和 PassiveAggressive*
族對(duì)這些魯棒性更好。相反,對(duì)于后面?zhèn)魅氲臄?shù)據(jù)流,算法的學(xué)習(xí)速率隨著時(shí)間不斷降低,后面兩個(gè)算法對(duì)于那些顯著差異的樣本和標(biāo)注正確的樣本傾向于給予很少的重視。
最后,我們舉一個(gè)完整的基于外核技術(shù)的文本分類例子。旨在為想要構(gòu)建基于外核學(xué)習(xí)系統(tǒng)的人們提供一個(gè)起點(diǎn),并展示上述大多數(shù)概念。
此外,它還展現(xiàn)了不同算法性能隨著處理例子的數(shù)量的演變。
現(xiàn)在我們來看不同部分的計(jì)算時(shí)間,我們看到矢量化的過程比學(xué)習(xí)本身耗時(shí)還多。對(duì)于不同的算法,MultinomialNB 是耗時(shí)最多的,但通過增加其 mini-batches 的大小可以減輕開銷。(練習(xí):minibatch_size 在程序中更改為100和10000,并進(jìn)行比較)。
根據(jù)算法,mini-batch 大小可以影響結(jié)果。SGD*,PassiveAggressive* 和離散的 NaiveBayes 是真正在線的,不受 batch 大小的影響。相反,MiniBatchKMeans 收斂速度受 batch 大小影響。此外,其內(nèi)存占用可能會(huì)隨 batch 大小而顯著變化。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: