在工程應用中,用python手寫代碼來從頭實現一個算法的可能性非常低,這樣不僅耗時耗力,還不一定能夠寫出構架清晰,穩定性強的模型。更多情況下,是分析採集到的數據,根據數據特徵選擇適合的算法,在工具包中調用算法,調整算法的參數,獲取需要的信息,從而實現算法效率和效果之間的平衡。而sklearn,正是這樣一個可以幫助我們高效實現算法應用的工具包。
Scikit learn 也簡稱 sklearn, 是機器學習領域當中最知名的 python 模塊之一.
Sklearn 包含了很多種機器學習的方式:
· Classification 分類
· Regression 回歸
· Clustering 非監督分類
· Dimensionality reduction 數據降維
· Model Selection 模型選擇
· Preprocessing 數據預處理
我們總能夠從這些方法中挑選出一個適合於自己問題的, 然後解決自己的問題.
sklearn有一個完整而豐富的官網,裡面講解了基於sklearn對所有算法的實現和簡單應用。
Sklearn的安裝直接在cmd命令行中輸入:pip install scikit-learn
注意一點是需要自己的python版本要大於3.4
Sklearn常用算法模塊sklearn中常用的模塊有分類、回歸、聚類、降維、模型選擇、預處理。
分類:識別某個對象屬於哪個類別,常用的算法有:SVM(支持向量機)、nearest neighbors(最近鄰)、random forest(隨機森林),常見的應用有:垃圾郵件識別、圖像識別。
分類
回歸:預測與對象相關聯的連續值屬性,常見的算法有:SVR(支持向量機)、 ridge regression(嶺回歸)、Lasso,常見的應用有:藥物反應,預測股價。
回歸
聚類:將相似對象自動分組,常用的算法有:k-Means、 spectral clustering、mean-shift,常見的應用有:客戶細分,分組實驗結果。
聚類
降維:減少要考慮的隨機變量的數量,常見的算法有:PCA(主成分分析)、feature selection(特徵選擇)、non-negative matrix factorization(非負矩陣分解),常見的應用有:可視化,提高效率。
模型選擇:比較,驗證,選擇參數和模型,常用的模塊有:grid search(網格搜索)、cross validation(交叉驗證)、 metrics(度量)。它的目標是通過參數調整提高精度。
預處理:特徵提取和歸一化,常用的模塊有:preprocessing,feature extraction,常見的應用有:把輸入數據(如文本)轉換為機器學習算法可用的數據。
Sklearn算法模型選擇
使用 Sklearn 時,先了解一下Sklearn都有什麼模型方法,然後選擇適當的方法,來達到你的目標。
Sklearn 官網提供了一個流程圖, 藍色圓圈內是判斷條件,綠色方框內是可以選擇的算法:
從 START 開始,首先看數據的樣本是否 >50,小於則需要收集更多的數據。
由圖中,可以看到算法有四類,分類,回歸,聚類,降維。
其中 分類和回歸是監督式學習,即每個數據對應一個 label。聚類 是非監督式學習,即沒有 label。另外一類是 降維,當數據集有很多很多屬性的時候,可以通過 降維 算法把屬性歸納起來。
然後看問題屬於哪一類問題,是分類還是回歸,還是聚類,就選擇相應的算法。當然還要考慮數據的大小,例如 100K 是一個閾值。
可以發現有些方法是既可以作為分類,也可以作為回歸,例如 SGD。
Sklearn聚類算法關於神經網絡的分類與回歸問題,小編前期的文章都分享了很多類似的文章,小夥伴們可以進入小編主頁進行其他類似文章的閱讀,今天我們就來看看Sklearn下面的聚類算法
聚類:將相似對象自動分組,常用的算法有:k-Means、 spectral clustering、mean-shift,常見的應用有:客戶細分,分組實驗結果
Sklearn官網也列舉了不同的聚類算法的優缺點,可以參考如下
Sklearn聚類算法對比
Sklearn聚類算法官方列舉了不同的算法,大家可以根據自己的數據特徵,以及需要解決的問題,選擇不同的算法,本期我們首先簡單了解一下K-means算法
Sklearn聚類算法的K-means算法K-means聚類算法
聚類算法的過程:
隨機選擇k個中心
遍歷所有樣本,把樣本劃分到距離最近的一個中心
劃分之後就有K個簇,計算每個簇的平均值作為新的質心
重複步驟2,直到達到停止條件
停止:聚類中心不再發生變化;所有的距離最小;迭代次數達到設定值
在python中,聚類算法集成在sklearn.cluster中
from sklearn.cluster import KMeans
KMeans(n_clusters=8,init='k-means++',n_init=10,max_iter=300,tol=0.0001,
precompute_distances='auto',verbose=0,random_state=None,
copy_x=True,n_jobs=1,algorithm='auto')
參數:
n_clusters:
整形,默認=8 【生成的聚類數,即產生的質心(centroids)數
init:有三個可選值:'k-means++', 'random',或者傳遞一個ndarray向量。
此參數指定初始化方法,默認值為 'k-means++'。
(1)'k-means++' 用一種特殊的方法選定初始質心從而能加速迭代過程的收斂
(2)'random' 隨機從訓練數據中選取初始質心。
(3)如果傳遞的是一個ndarray,則應該形如 (n_clusters, n_features) 並給出初始質心n_init:整形,默認=10用不同的質心初始化值運行算法的次數,最終解是在inertia意義下選出的最優結果
max_iter:整形,默認=300執行一次k-means算法所進行的最大迭代數
tol:float形,默認值= 1e-4 與inertia結合來確定收斂條件
precompute_distances:三個可選值,'auto',True 或者 False。預計算距離,計算速度更快但佔用更多內存。
(1)'auto':如果 樣本數乘以聚類數大於 12million 的話則不預計算距離
(2)True:總是預先計算距離
(3)False:永遠不預先計算距離
自版本0.23起已棄用:'precompute_distances'在版本0.22中已棄用,並將在0.25中刪除。沒有作用
verbose:int 默認為0,Verbosity mode
random_state:整形或 numpy.RandomState 類型,可選用於初始化質心的生成器(generator)如果值為一個整數,則確定一個seed。此參數默認值為numpy的隨機數生成器copy_x:布爾型,默認值=True
當我們precomputing distances時,將數據中心化會得到更準確的結果如果把此參數值設為True,則原始數據不會被改變
如果是False,則會直接在原始數據上做修改並在函數返回值時將其還原
但是在計算過程中由於有對數據均值的加減運算,所以數據返回後,原始數據和計算前可能會有細小差別n_jobs:整形數。 指定計算所用的進程數。內部原理是同時進行n_init指定次數的計算。(1)若值為 -1,則用所有的CPU進行運算
(2)若值為1,則不進行並行運算,這樣的話方便調試
(3)若值小於-1,則用到的CPU數為(n_cpus + 1 + n_jobs)
如果 n_jobs值為-2,則用到的CPU數為總CPU數減1
從0.23版n_jobs開始不推薦使用:從0.23版開始不推薦使用,並將在0.25版中刪除。
algorithm:三種可選「auto」, 「full」, 「elkan」, default=」auto」
使用K均值算法。經典的EM風格算法是「full」的 通過使用三角形不等式,「 elkan」算法對於定義良好的聚類的數據更有效 但是,由於分配了額外的形狀數組(n_samples,n_clusters),因此需要更多的內存。目前,「 auto」(保持向後兼容性)選擇「 elkan」在版本0.18中更改:添加了Elkan算法
以上算法中的參數雖然很多,但是絕大多數我們直接採用默認參數即可,這樣在我們實際使用過程中,傳遞我們需要的幾個參數便可。下期文章,就k-means算法我們使用幾個案例來具體學習一下其算法的實際應用
聚類算法