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

2023-02-20 14:47 更新

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

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

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

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

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

8.1.1.1. 流式思路的實例

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

8.1.1.2. 提取特征

思路2 可能是scikit learn支持的不同特征提取方法中提取特征的任何相關(guān)方法。但是,在處理需要矢量化的數(shù)據(jù)時,如果事先不知道特征或值的集合,則應(yīng)明確注意。一個很好的例子是文本分類,在訓(xùn)練過程中可能會發(fā)現(xiàn)未知的術(shù)語。如果從應(yīng)用程序的角度來看,對數(shù)據(jù)進行多次傳遞是合理的,則可以使用有狀態(tài)矢量器。否則,可以使用無狀態(tài)特征提取程序來增加難度。

目前,這樣做的首選方法是使用所謂的 哈希技巧,在 sklearn.feature_extraction.FeatureHasher 中,其中有分類變量的表示為 Python 列表或 sklearn.feature_extraction.text.HashingVectorizer 文本文檔。

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

最后,對于3. 我們在 scikit-learn 之中有許多選擇。雖然不是所有的算法都能夠增量學(xué)習(xí)(即不能一次性看到所有的實例),所有實現(xiàn) partial_fit API 的估計器都作為了候選。實際上,從小批量的實例(有時稱為“在線學(xué)習(xí)”)逐漸學(xué)習(xí)的能力是外核學(xué)習(xí)的關(guān)鍵,因為它保證在任何給定的時間內(nèi)只有少量的實例在主存儲中,選擇適合小批量的尺寸來平衡相關(guān)性和內(nèi)存占用可能涉及一些調(diào)整 [1].

以下是針對不同任務(wù)的增量估算器列表:

對于分類,有一點要注意的是,雖然無狀態(tài)特征提取程序可能能夠應(yīng)對新的/未知的屬性,但增量學(xué)習(xí)者本身可能無法應(yīng)對新的/未知的目標類。在這種情況下,你必須使用 classes= 參數(shù)將所有可能的類傳遞給第一個 partial_fit 調(diào)用。

選擇合適的算法時要考慮的另一個方面是,所有這些算法隨著時間的推移不會給每個樣例相同的重要性。比如說, Perceptron 仍然對錯誤標簽的例子是敏感的,即使經(jīng)過多次的樣例訓(xùn)練,而 SGD*PassiveAggressive* 族對這些魯棒性更好。相反,對于后面?zhèn)魅氲臄?shù)據(jù)流,算法的學(xué)習(xí)速率隨著時間不斷降低,后面兩個算法對于那些顯著差異的樣本和標注正確的樣本傾向于給予很少的重視。

8.1.1.4. 例子

最后,我們舉一個完整的基于外核技術(shù)的文本分類例子。旨在為想要構(gòu)建基于外核學(xué)習(xí)系統(tǒng)的人們提供一個起點,并展示上述大多數(shù)概念。

此外,它還展現(xiàn)了不同算法性能隨著處理例子的數(shù)量的演變。

現(xiàn)在我們來看不同部分的計算時間,我們看到矢量化的過程比學(xué)習(xí)本身耗時還多。對于不同的算法,MultinomialNB 是耗時最多的,但通過增加其 mini-batches 的大小可以減輕開銷。(練習(xí):minibatch_size 在程序中更改為100和10000,并進行比較)。

8.1.1.5. 注釋

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號