Python機器學習工具:Scikit-Learn介紹與實踐

bigsec

Scikit-learn 簡介

官方的解釋很簡單: Machine Learning in Python, 用python來玩機器學習。html

什麼是機器學習

機器學習關注的是: 計算機程序如何隨着經驗積累自動提升性能。而最大的吸引力在於,不須要寫任何與問題相關的特定代碼,泛型算法就能告訴你一些關於數據的祕密。python

Scikit-learn的優勢

  • 構建於現有的NumPy(基礎n維數組包),SciPy(科學計算基礎包), matplotlib(全面的2D/3D畫圖),IPython(增強的交互解釋器),Sympy(Symbolic mathematics), Pandas(數據結構和分析)之上,作了易用性的封裝。算法

  • 簡單且高效的數據挖掘、數據分析的工具。數組

  • 對全部人開放,且在不少場景易於複用。瀏覽器

  • BSD證書下開源。數據結構

Scikit-learn的生態

Python

python是一門簡單易學的語言,語法要素很少,對於只關心機器學習自己非軟件開發的人員,python語言層面的東西基本是不須要關心的。dom

Jupyter

http://nbviewer.jupyter.org/ 提供了一種便利的方式去共享本身或是別人的計算成果,以一種以前單單共享代碼不一樣的交互的方式,scikit-learn官網上面大量的例子也是以這種方式展現,使用者不只看到了代碼的使用方式,還看到了代碼的結果,若是本身搭建了jupyter server的話,導入notebook還能夠直接在瀏覽器中在其中上下文任意處修改,大大增長了學習效率。機器學習

Scikit-learn 的主要內容

Scikit-learn的算法地圖

bigsec

按照上圖 scikit-learn提供的主要功能主要關注與數據建模,而非加載、操做、總結數據, 這些任務可能NumPy、Pandas就已經足夠了。爲此scikit-learn 主要提供瞭如下功能:ide

  • 測試數據集,sklearn.datasets模塊提供了乳腺癌、kddcup 9九、iris、加州房價等諸多開源的數據集函數

  • 降維(Dimensionality Reduction): 爲了特徵篩選、統計可視化來減小屬性的數量。

  • 特徵提取(Feature extraction): 定義文件或者圖片中的屬性。

  • 特徵篩選(Feature selection): 爲了創建監督學習模型而識別出有真實關係的屬性。

  • 按算法功能分類,分爲監督學習:分類(classification)和迴歸(regression),以及非監督學習:聚類(clustering)。sklearn提供了很全面的算法實現,詳細算法清單http://scikit-learn.org/stabl...

  • 聚類(Clustring): 使用KMeans之類的算法去給未標記的數據分類。

  • 交叉驗證(Cross Validation): 去評估監督學習模型的性能。

  • 參數調優(Parameter Tuning): 去調整監督學習模型的參數以得到最大效果。

  • 流型計算(Manifold Learning): 去統計和描繪多維度的數據

經常使用算法的大體介紹

分類 Classification

  • 適用範圍: 用做訓練預測已經標記的數據集的類別. 監督學習的表明。

  • 經常使用算法對比

bigsec

Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?,文章測試了179種分類模型在UCI全部的121個數據上的性能,發現Random Forests 和 SVM 性能最好。

迴歸 Regression

  • 適用範圍:

迴歸是用於估計兩種變量之間關係的統計過程,迴歸分析能夠幫助咱們理解當任意一個自變量變化,另外一個自變量不變時,因變量變化的典型值。最多見的是,迴歸分析能在給定自變量的條件下估計出因變量的條件指望。 (舉個例子,在二維的座標系中,根據已有的座標點去推導x、y軸的函數關係,既一元n次方程。)

  • 經常使用算法對比:

優勢:直接、快速;知名度高

缺點:要求嚴格的假設;須要處理異常值

集成算法 Ensemble Algorithms

bigsec
bigsec

上圖是單獨用決策樹來作迴歸任務去預測數據,可是反映了決策樹雖然易於解釋理解以外會有一些預測上的缺點,總結而言是趨向過擬合,可能或陷於局部最小值中、沒有在線學習,因此下圖引入了AdaBoost 集成算法來增長預測的可靠性,由此引出了集成算法的優勢:

  • 集成方法是由多個較弱的模型集成模型組,其中的模型能夠單獨進行訓練,而且它們的預測能以某種方式結合起來去作出一個整體預測。

  • 當先最早進的預測幾乎都使用了算法集成。它比使用單個模型預測出來的結果要精確的多。

可是如何找出可結合的弱模型、以及結合的方式又稱爲了繁重的維護工做。

聚類 Clustering

  • 適用範圍:

是在沒有標記的狀況下去分類數據,使數據變得有意義, 若是已知分類分類的個數,Kmeans算法會更容易得出效果。

  • 經常使用算法對比:

bigsec

該圖中顏色是聚類的結果,而非標記, 各算法的分類結果均可以根據輸入參數調優,只是爲了展現聚類的適用範圍適合有特徵的數據類型,對於最下一行的幾乎均勻的數據幾乎沒有任何意義。

Scikit-learn進行計算的主要步驟

  • 數據獲取、預處理。

  • 可選的降維過程.由於原始數據的維度比較大, 因此須要先找出真正跟預測目標相關的屬性。

  • 學習以及預測的過程。

  • 反覆學習的過程。增長樣本、調優參數、換算法各類方式去提供預測的準確率。

Scikit-learn 的簡單使用示例

決策樹示例:

from sklearn import datasets
from sklearn import metrics
from sklearn.tree import DecisionTreeClassifier
# 讀取 iris 數據集
dataset = datasets.load_iris()
# 採用CART模型
model = DecisionTreeClassifier()
model.fit(dataset.data, dataset.target)
print(model)
# 預測
expected = dataset.target
predicted = model.predict(dataset.data)
# 統計
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))

輸出:

precision    recall  f1-score   support
     
    0       1.00      1.00      1.00        50
    1       1.00      1.00      1.00        50
    2       1.00      1.00      1.00        50
 
    avg / total       1.00      1.00      1.00       150
    
    [[50  0  0]
    [ 0 50  0]
    [ 0  0 50]]

引用


反爬蟲
文章來源:http://bigsec.com/

toyld 豈安科技搬運代碼負責人

主導各處的挖坑工做,擅長挖坑於悄然不息,負責生命不息,挖坑不止。

相關文章
相關標籤/搜索