Scikit learn技巧(拓展)總結

2021-08-03 13:37:03 字數 2635 閱讀 2402

估計器,很多時候可以直接理解成分類器,主要包含兩個函式:

轉換器用於資料預處理和資料轉換,主要是三個方法:

sklearn.pipeline包

流水線的功能:

基本使用方法

流水線的輸入為一連串的資料探勘步驟,其中最後一步必須是估計器,前幾步是轉換器。輸入的資料集經過轉換器的處理後,輸出的結果作為下一步的輸入。最後,用位於流水線最後一步的估計器對資料進行分類。

每一步都用元組( 『名稱』,步驟)來表示。現在來建立流水線。

scaling_pipeline = pipeline([

('scale', minmaxscaler()),

('predict', kneighborsclassifier())

])

主要在sklearn.preprcessing包下。

規範化:

編碼:1.5.1 特徵抽取

包:sklearn.feature_extraction

特徵抽取是資料探勘任務最為重要的乙個環節,一般而言,它對最終結果的影響要高過資料探勘演算法本身。只有先把現實用特徵表示出來,才能借助資料探勘的力量找到問題的答案。特徵選擇的另乙個優點在於:降低真實世界的複雜度,模型比現實更容易操縱。

一般最常使用的特徵抽取技術都是高度針對具體領域的,對於特定的領域,如影象處理,在過去一段時間已經開發了各種特徵抽取的技術,但這些技術在其他領域的應用卻非常有限。 示例

data.png

countvectorize隻數出現個數

count.png

hash.png

tfidfvectorizer:個數+歸一化

tfidf(without idf).png

1.5.2 特徵選擇

包:sklearn.feature_selection

特徵選擇的原因如下:

(1)降低複雜度

(2)降低噪音

(3)增加模型可讀性

單個特徵和某一類別之間相關性的計算方法有很多。最常用的有卡方檢驗(χ2)。其他方法還有互資訊和資訊熵。

包:sklearn.decomposition

包:sklearn.ensemble 

組合技術即通過聚集多個分類器的**來提高分類準確率。

常用的組合分類器方法:

(1)通過處理訓練資料集。即通過某種抽樣分布,對原始資料進行再抽樣,得到多個訓練集。常用的方法有裝袋(bagging)和提公升(boosting)。

(2)通過處理輸入特徵。即通過選擇輸入特徵的子集形成每個訓練集。適用於有大量冗餘特徵的資料集。隨機森林(random forest)就是一種處理輸入特徵的組合方法。

(3)通過處理類標號。適用於多分類的情況,將類標號隨機劃分成兩個不相交的子集,再把問題變為二分類問題,重複構建多次模型,進行分類投票。

包:sklearn.metrics

sklearn.metrics包含評分方法、效能度量、成對度量和距離計算。

分類結果度量

引數大多是y_true和y_pred。

回歸結果度量

多標籤的度量

聚類的度量

包:sklearn.*****_bayes

樸素貝葉斯.png

樸素貝葉斯的特點是分類速度快,分類效果不一定是最好的。

所謂使用什麼分布的樸素貝葉斯,就是假設p(x_i|y)是符合哪一種分布,比如可以假設其服從高斯分布,然後用最大似然法估計高斯分布的引數。

高斯分布.png

多項式分布.png

伯努利分布.png

具體的擴充套件,通常要繼承sklearn.base包下的類。

關於什麼是mixin(混合類),具體可以看這個知乎鏈結。簡單地理解,就是帶有實現方法的介面,可以將其看做是組合模式的一種實現。舉個例子,比如說常用的tfidftransformer,繼承了baseestimator, transformermixin,因此它的基本功能就是單一職責的估計器和轉換器的組合。

在特徵抽取的時候,經常會發現自己的一些資料預處理的方法,sklearn裡可能沒有實現,但若直接在資料上改,又容易將**弄得混亂,難以重現實驗。這個時候最好自己建立乙個轉換器,在後面將這個轉換器放到pipeline裡,統一管理。

例如《python資料探勘入門與實戰》書中的例子,我們想接收乙個numpy陣列,根據其均值將其離散化,任何高於均值的特徵值替換為1,小於或等於均值的替換為0。

**實現:

from sklearn.base import transformermixin

from sklearn.utils import as_float_array class meandiscrete(transformermixin): #計算出資料集的均值,用內部變數儲存該值。 def fit(self, x, y=none): x = as_float_array(x) self.mean = np.mean(x, axis=0) #返回self,確保在轉換器中能夠進行鏈式呼叫(例如呼叫transformer.fit(x).transform(x)) return self def transform(self, x): x = as_float_array(x) assert x.shape[1] == self.mean.shape[0] return x > self.mean

Scikit Learn 使用技巧

1.使用 columntransformer 對 dataframe 不同的列分別進行不同的處理from sklearn.preprocessing import onehotencoder from sklearn.impute import imputer from sklearn.compos...

線性回歸 scikit learn

線性回歸即是我們希望能通過學習來得到乙個各屬性線性組合的函式,函式的各項係數表明了該屬性對於最後結果的重要性,可以用以下公式表達 y x 1 x1 2x2 pxp b線性回歸試圖讓各個點到回歸直線上的距離和最小,即最小化均方誤差。可用以下公式描述 min x y 22 matplotlib inli...

scikit learn工具安裝

最近老師布置了乙個cnn神經網路的任務,詞向量得到的原理和卷積神經網路工作的原理已經講過了,現在主要安裝scikit learn工具,利用tf idf方法來得到詞向量。在網上也發現了不少st learn工具的安裝教程,不過還是有點亂,自己整理一下,能幫助別人的話更好啦。首先,安裝sk learn需要...