1. 程式人生 > >sklearn的一些技巧總結

sklearn的一些技巧總結

1 scikit-learn基礎介紹

1.1 估計器(Estimator)

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

  • fit():訓練演算法,設定內部引數。接收訓練集和類別兩個引數。
  • predict():預測測試集類別,引數為測試集。
    大多數scikit-learn估計器接收和輸出的資料格式均為numpy陣列或類似格式。

1.2 轉換器(Transformer)

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

  • fit():訓練演算法,設定內部引數。
  • transform():資料轉換。
  • fit_transform():合併fit和transform兩個方法。

1.3 流水線(Pipeline)

sklearn.pipeline

流水線的功能:

  • 跟蹤記錄各步驟的操作(以方便地重現實驗結果)
  • 對各步驟進行一個封裝
  • 確保程式碼的複雜程度不至於超出掌控範圍

基本使用方法

流水線的輸入為一連串的資料探勘步驟,其中最後一步必須是估計器,前幾步是轉換器。輸入的資料集經過轉換器的處理後,輸出的結果作為下一步的輸入。最後,用位於流水線最後一步的估計器對資料進行分類。
每一步都用元組( ‘名稱’,步驟)來表示。現在來建立流水線。

scaling_pipeline = Pipeline([
  ('scale', MinMaxScaler()),
  ('predict', KNeighborsClassifier())
])

1.4 預處理

主要在sklearn.preprcessing包下。

規範化:

  • MinMaxScaler :最大最小值規範化
  • Normalizer :使每條資料各特徵值的和為1
  • StandardScaler :為使各特徵的均值為0,方差為1
  • Binarizer :為將數值型特徵的二值化

編碼:

  • LabelEncoder :把字串型別的資料轉化為整型
  • OneHotEncoder :特徵用一個二進位制數字來表示

1.5 特徵

1.5.1 特徵抽取

包:sklearn.feature_extraction
特徵抽取是資料探勘任務最為重要的一個環節,一般而言,它對最終結果的影響要高過資料探勘演算法本身。只有先把現實用特徵表示出來,才能藉助資料探勘的力量找到問題的答案。特徵選擇的另一個優點在於:降低真實世界的複雜度,模型比現實更容易操縱。
一般最常使用的特徵抽取技術都是高度針對具體領域的,對於特定的領域,如影象處理,在過去一段時間已經開發了各種特徵抽取的技術,但這些技術在其他領域的應用卻非常有限。

  • DictVectorizer: 將dict型別的list資料,轉換成numpy array
  • FeatureHasher : 特徵雜湊,相當於一種降維技巧
  • image:影象相關的特徵抽取
  • text: 文字相關的特徵抽取
  • text.CountVectorizer:將文字轉換為每個詞出現的個數的向量
  • text.TfidfVectorizer:將文字轉換為tfidf值的向量
  • text.HashingVectorizer:文字的特徵雜湊

示例


data.png


CountVectorize只數出現個數


count.png
hash.png


TfidfVectorizer:個數+歸一化


tfidf(without idf).png

1.5.2 特徵選擇

包:sklearn.feature_selection
特徵選擇的原因如下:
(1)降低複雜度
(2)降低噪音
(3)增加模型可讀性

  • VarianceThreshold: 刪除特徵值的方差達不到最低標準的特徵
  • SelectKBest: 返回k個最佳特徵
  • SelectPercentile: 返回表現最佳的前r%個特徵

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

  • chi2: 卡方檢驗(χ2)

1.6 降維

包:sklearn.decomposition

  • 主成分分析演算法(Principal Component Analysis, PCA)的目的是找到能用較少資訊描述資料集的特徵組合。它意在發現彼此之間沒有相關性、能夠描述資料集的特徵,確切說這些特徵的方差跟整體方差沒有多大差距,這樣的特徵也被稱為主成分。這也就意味著,藉助這種方法,就能通過更少的特徵捕獲到資料集的大部分資訊。

1.7 組合

包:sklearn.ensemble 
組合技術即通過聚集多個分類器的預測來提高分類準確率。
常用的組合分類器方法:
(1)通過處理訓練資料集。即通過某種抽樣分佈,對原始資料進行再抽樣,得到多個訓練集。常用的方法有裝袋(bagging)和提升(boosting)。
(2)通過處理輸入特徵。即通過選擇輸入特徵的子集形成每個訓練集。適用於有大量冗餘特徵的資料集。隨機森林(Random forest)就是一種處理輸入特徵的組合方法。
(3)通過處理類標號。適用於多分類的情況,將類標號隨機劃分成兩個不相交的子集,再把問題變為二分類問題,重複構建多次模型,進行分類投票。

1.8 模型評估(度量)

包:sklearn.metrics
sklearn.metrics包含評分方法、效能度量、成對度量和距離計算。
分類結果度量
引數大多是y_true和y_pred。

  • accuracy_score:分類準確度
  • condusion_matrix :分類混淆矩陣
  • classification_report:分類報告
  • precision_recall_fscore_wupport:計算精確度、召回率、f、支援率
  • jaccard_similarity_score:計算jcaard相似度
  • hamming_loss:計算漢明損失
  • zero_one_loss:0-1損失
  • hinge_loss:計算hinge損失
  • log_loss:計算log損失

迴歸結果度量

  • explained_varicance_score:可解釋方差的迴歸評分函式
  • mean_absolute_error:平均絕對誤差
  • mean_squared_error:平均平方誤差

多標籤的度量

  • coverage_error:涵蓋誤差
  • label_ranking_average_precision_score:計算基於排名的平均誤差Label ranking average precision (LRAP)

聚類的度量

  • adjusted_mutual_info_score:調整的互資訊評分
  • silhouette_score:所有樣本的輪廓係數的平均值
  • silhouette_sample:所有樣本的輪廓係數

2 具體模型

2.1 樸素貝葉斯(Naive Bayes)

包:sklearn.naive_bayes


樸素貝葉斯.png


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

  • GasussianNB:高斯分佈的樸素貝葉斯
  • MultinomialNB:多項式分佈的樸素貝葉斯
  • BernoulliNB:伯努利分佈的樸素貝葉斯

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


高斯分佈.png
多項式分佈.png
伯努利分佈.png

3 scikit-learn擴充套件

3.0 概覽

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

  • BaseEstimator: 估計器的基類
  • ClassifierMixin :分類器的混合類
  • ClusterMixin:聚類器的混合類
  • RegressorMixin :迴歸器的混合類
  • TransformerMixin :轉換器的混合類

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

3.1 建立自己的轉換器

在特徵抽取的時候,經常會發現自己的一些資料預處理的方法,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

相關推薦

sklearn一些技巧總結

1 scikit-learn基礎介紹 1.1 估計器(Estimator) 估計器,很多時候可以直接理解成分類器,主要包含兩個函式: fit():訓練演算法,設定內部引數。接收訓練集和類別兩個引數。predict():預測測試集類別,引數為測試集。 大多數scikit

[轉]用python爬蟲抓站的一些技巧總結 zz

內容 req xxxxx pic 個數 相關 choice 都是 observe 來源網站:http://www.pythonclub.org/python-network-application/observer-spider 學用python也有3個多月了,用得最

Reporting Service 2000的一些技巧總結

總結 log blog 科學 存在 format 解決 出錯 處理 在使用Reporting Service 2000過程中,對一些特殊的地方做了一些總結,下子把它貼出來,供大家參考: 1.IIF表達式如何使用? 在很多地方,都可以使用IIF表達式來實現一些特

基於SPH的流體模擬實踐和一些技巧總結

目前流體模擬中常用的2類方法,分別代表了從2種不同的方面來解釋Navier-Stokes的流體方程: 1、Eulerian方法從空間固定點觀察該點的值得變化。 2、Lagrangian方法則將液體看作是跟隨著流動的Particle。Eulerian方法比較複雜,常用作離線模擬,可以產生非常逼真的流體效果,具體

用python爬蟲抓站的一些技巧總結 (轉)

用python爬蟲抓站的一些技巧總結 zz Python俱樂部 您的足跡: » 用python爬蟲抓站的一些技巧總結 zz 顯示原始檔修訂記錄最近更改索引登入Python俱樂部PythonPythonClub 首頁Python 基礎Python 常見檔案操作Python 網路

Android學習筆記:練習中用到的一些技巧總結

1,登入的時候,如果輸入有誤,則輸入框左右震動,表示輸入有誤         在res下準備一個anim資料夾,裡面包含兩個檔案,main_login_shake.xml 和 main_login_cycle_7.xml,         其中,main_login_sh

一些常用JS函數和技巧總結

常用 ces 函數 ont 布爾 gin 技巧 int() js函數 1.JS原生函數parseInt(),返回字符串的第一個數字,默認是十進制。 2.!!data.success //強制轉換成布爾類型 p.p1 { margin: 0.0px 0.0px 0.0px

jquery操作復選框(checkbox)的一些技巧總結

方式 undefine 關系 this 選擇 checkbox clas AR 1.7 1、獲取單個checkbox選中項(三種寫法) $("input:checkbox:checked").val()或者$("input:[type=‘checkbox‘]:chec

一些mysql小技巧總結

刪除數據 clas pan sql spa alt mys style ron 1、mysql中不清除表裏的數據重新設置自增的id的方法 設置主鍵id自增的數據庫表刪除數據後,自增id不會自動重新計算,想要重新設置自增的id可以用如下命令: alter table

angular js和一些個人總結技巧

獲取url中的網路字尾元素 function getParam(paramName) { paramValue = ""; isFound = false; if (this.location.search.indexOf("?")

Python爬蟲:一些常用的爬蟲技巧總結

用python也差不多一年多了,python應用最多的場景還是web快速開發、爬蟲、自動化運維:寫過簡單網站、寫過自動發帖指令碼、寫過收發郵件指令碼、寫過簡單驗證碼識別指令碼。   爬蟲在開發過程中也有很多複用的過程,這裡總結一下,以後也能省些事情。   基本抓取

【資料結構與演算法】一些常用的演算法技巧總結

1. 巧用陣列下標 陣列的下標是一個隱含的很有用的陣列,特別是在統計一些數字,或者判斷一些整型數是否出現過的時候。例如,給你一串字母,讓你判斷這些字母出現的次數時,我們就可以把這些字母作為下標,在遍歷的時候,如果字母a遍歷到,則arr[‘a’]就可以加1了,即

一些常用的演算法技巧總結

今天和大家講講,在做演算法題時常用的一些技巧。對於平時沒用過這些技巧的人,或許你可以考慮試著去看看在實踐中能否用的上這些技巧來優化問題的解。 1. 巧用陣列下標 陣列的下標是一個隱含的很有用的陣列,特別是在統計一些數字,或者判斷一些整型數是否出現過的時候。例如,給你一串字母,讓你判斷這些字母出現的次數時,

2018華為杯E題的一些思考和三維模型圖繪圖技巧總結

2018華為杯全國研究生數學建模E題:多無人機對組網雷達的協同干擾。第一部分先對賽題中幾個概念做出明確解釋!第二部分主要是模型需要使用的一些繪圖技巧總結。 1.賽題背景: 干擾機以"距離假目標欺騙"的方式來實施對地面組網雷達系統進行有效干擾。 注:干擾機基於偵察

leetcode刷題——一些演算法技巧總結1.0

運算子優先順序,簡單記就是:! > 算術運算子 > 關係運算符 > && > || > 賦值運算子 把數字取反,可以作為一種標記 pythonlast = {c: i for i, c in enumerate(S)}標記字串S中每個字母的最後一個位

ACM數論一些簡單結論和程式設計小技巧總結

前言 最近被數論的模運算卡了一發。。稍微總結一下最近用到的數論結論 另外,get了一些實現的技巧,也一起記一下~免得忘了~ 數論簡單結論 n = p(1) ^ num(1) * p(2) ^

Python爬蟲:一些常用的爬蟲技巧總結(IP,cookie,header,多執行緒)

http://python.jobbole.com/84622/ 用python也差不多一年多了,python應用最多的場景還是web快速開發、爬蟲、自動化運維:寫過簡單網站、寫過自動發帖指令碼、寫過收發郵件指令碼、寫過簡單驗證碼識別指令碼。 爬蟲在開發過程中也有很

其他-一些自己總結的卡常技巧

偶然發現自己程式碼的常數還算小? 於是乎總結了一下自己發現的一些常數技巧(還沒寫完,後續會更) 各位看官請耐心看完……前面都是大家知道的,後面會寫些自己發現的東西 register 將變數放在暫存器內,每次訪問速度更快 定義在變數前(如:register int i=1;) 暫存器大小有

JS建立頁面蒙板的一些知識技巧總結-ajax技巧

       在ajax流行的今天,模擬彈出視窗,或者thinkbox,greybox等很多特效都用了蒙板的功能,其實實現起來十分簡單,關鍵是獲取瀏覽器的高度和寬度 ----1、建立一個絕對定位,top/left都為0, ----2、寬度和高度等於瀏覽器內容的高寬, ----

python︱sklearn一些技巧的記錄

sklearn裡面包含內容太多,所以一些實用小技巧還是挺好用的。 1、LabelEncoder 簡單來說 LabelEncoder 是對不連續的數字或者文字進行編號 from sklearn.preprocessing import LabelEncode