scikit-learn 大數(shù)據(jù)計(jì)算策略

2023-02-20 14:47 更新

? 對(duì)于一些應(yīng)用場景,比如許多的樣本或者許多的特征(或者樣本特征都很多),又或者這個(gè)速度問題(太慢)都是一些常規(guī)傳統(tǒng)技術(shù)無法解決的。正因如此,scikit-learn提供了幾種方法來解決大家的問題。

8.1.1 基于外核(“out-of-core”)學(xué)習(xí)的解決方式

外核(也有的稱核外或“外部存儲(chǔ)器”)學(xué)習(xí)是用來從那種無法在內(nèi)存(RAM)中存放的數(shù)據(jù)中學(xué)習(xí)、訓(xùn)練模型的技術(shù)。

下面介紹一下為解決這些問題提出的系統(tǒng)方案、思路:

  1. 數(shù)據(jù)流化的思路
  2. 從數(shù)據(jù)實(shí)例中提取特征的思路
  3. 增量式解決思路

8.1.1.1. 流式思路的實(shí)例

基本上,思路1可能是從硬盤、數(shù)據(jù)庫、網(wǎng)絡(luò)流等文件中生成實(shí)例的讀取器。但是,有關(guān)如何實(shí)現(xiàn)這一點(diǎn)的詳細(xì)信息超出了本文檔的范圍。

8.1.1.2. 提取特征

思路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 文本文檔。

8.1.1.3. 增量式學(xué)習(xí)

最后,對(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ù)的增量估算器列表:

對(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)注正確的樣本傾向于給予很少的重視。

8.1.1.4. 例子

最后,我們舉一個(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)行比較)。

8.1.1.5. 注釋

  • 根據(jù)算法,mini-batch 大小可以影響結(jié)果。SGD*,PassiveAggressive* 和離散的 NaiveBayes 是真正在線的,不受 batch 大小的影響。相反,MiniBatchKMeans 收斂速度受 batch 大小影響。此外,其內(nèi)存占用可能會(huì)隨 batch 大小而顯著變化。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)