機器學習之SKlearn(scikit-learn)的K-means聚類算法

2021-02-20 啟示AI科技

在工程應用中,用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算法我們使用幾個案例來具體學習一下其算法的實際應用

聚類算法

相關焦點

  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    K-Means聚類是機器學習領域中最強大的聚類算法之一。他的原因比較簡單,但得出的結果也非常準確。聚類是理解數據集的非常重要的方式,因此在本文中,我們將討論什麼是聚類,為什麼需要聚類以及什麼是k-means聚類。
  • K-Means聚類算法詳解
    寫在前面如果想從事數據挖掘或者機器學習的工作,掌握常用的機器學習算法是非常有必要的,常見的機器學習算法:監督學習算法:邏輯回歸,線性回歸,決策樹,樸素貝葉斯,K近鄰,支持向量機,集成算法Adaboost等無監督算法:聚類,降維,關聯規則, PageRank等為了詳細的理解這些原理
  • k-means聚類算法原理總結
    目錄1. k-means聚類算法原理2. k-means聚類算法步驟3. k-means++聚類優化算法4.小批量處理的k-means聚類算法5. k值的選取6. k-means聚類算法不適用的幾個場景7. k-means與knn區別8. 小結聚類算法性能度量的文章提到若簇類相似度好簇間的相似度差,則聚類算法的性能較好。我們基於此定義k-means聚類算法的目標函數: 其中
  • k-means聚類算法從入門到精通
    k-means算法是非監督聚類最常用的一種方法,因其算法簡單和很好的適用於大樣本數據,廣泛應用於不同領域,本文詳細總結了k-means聚類算法原理 。目錄1. k-means聚類算法原理2. k-means聚類算法步驟3. k-means++聚類優化算法4.
  • k-means算法
    k-means算法原理K-means中心思想:事先確定常數K,常數K意味著最終的聚類類別數,首先隨機選定初始點為質心,並通過計算每一個樣本與質心之間的相似度
  • 機器學習之一:聚類實戰
    一、簡單介紹聚類算法1、聚類的定義聚類就是對大量未知標註的數據集,按數據的內在相似性將數據集劃分為多個類別,使類別內的數據相似度較大而類別間的數據相似度較小。3、相似度/距離計算方法總結4、K-means算法K-means算法也被稱為k均值,k值的選擇、距離度量及分類決策是三個基本要素。假定輸入樣本為S=x1,x2,...
  • 機器學習之Scikit-learn篇(一)
    Scikit-learn是目前Python環境下最常用也是最好用的機器學習函數庫。
  • 機器學習最主流的算法庫sklearn
    「 scikit-learn,簡稱sklearn,是用Python語言開發的機器學習模塊庫,其包含大量的機器學習算法和測試數據集
  • 動手寫機器學習算法:K-Means聚類算法
    今天小七和你一起用Python實現機K-Means聚類算法。第二種就是人為觀察選擇將圖片的像素分為若干類,然後用這個類代替原來的像素值執行聚類的算法代碼:# 聚類算法def runKMeans(X,initial_centroids,max_iters,plot_process):    m,n = X.shape                   # 數據條數和維度
  • K-Means聚類算法
    是一種聚類算法,與之前提到的樸素貝葉斯等算法不同,它屬於無監督學習。簡單來說,之前的算法中我們是利用特徵 x 和類別 y 來進行訓練、分類的,而無監督學習是指不需要我們提供具體的類別 y ,而讓數據自己聚在一起,形成 k 個簇,以實現分類的目的。具體方法是通過對給定的樣本進行劃分,分為 k 個簇,使得簇內的點儘量緊密的連在一起,而簇間的距離儘量大,評判的標準就是通過歐氏距離。
  • 聚類算法之Kmeans
    5、我們言簡意賅地提了一下SVM的特點及其應用場景,並給出了svm在sklearn中相關的算法及參數的說明。沒事嘮兩句在傳統機器學習領域裡,主要涉及的任務有回歸、分類、聚類、推薦等。聚類算法之Kmeans聚類算法其實有很多,包括層次聚類,密度聚類,譜聚類等等。
  • 機器學習十大經典算法之K-Means聚類算法
    聚類介紹聚類在機器學習,數據挖掘,模式識別,圖像分析以及生物信息等領域有廣泛的應用。聚類是把相似的對象通過靜態分類的方法分成不同的組別或者更多的子集(subset),這樣讓在同一個子集中的成員對象都有相似的一些屬性,常見的包括在坐標系中更加短的空間距離(一般是歐式距離)等。
  • 機器學習之分類算法K-Means介紹與代碼分析(篇四)
    k-平均聚類的目的是:把n個點(可以是樣本的一次觀察或一個實例)劃分到k個聚類中,使得每個點都屬於離他最近的均值(此即聚類中心)對應的聚類,以之作為聚類的標準。這個問題將歸結為一個把數據空間劃分為Voronoi cells的問題。這個問題在計算上是NP困難的,不過存在高效的啟發式算法。
  • 使用K-means 算法進行客戶分類
    應用機器學習技術就很有可能為客戶創造價值。,xn),其中每一個觀測值都是d維實數向量,K均值聚類旨在將n個觀測值劃分為k(k≤n)個集合S={S1,S2,...,Sk}以最小化聚類內的平方和,其中µi是Si中的點的平均值。保證K-Means算法收斂到局部最優。
  • scikit-learn機器學習簡介
    在本節中,我們將介紹在scikit-learn中所使用的機器學習的基礎知識點,並且給出一個簡單的代碼示例。
  • python機器學習之k-means聚類算法(1)
    k-means算法是一種無監督的機器學習算法,雖然是機器學習,但它簡單易於實現。本篇採用python語言,自主編程實現k-menas算法,當然python用專門的庫函數來實現該算法,但本次主要使用該算法闡述編程思想,所以不採用內置函數。採用自主編寫的程序的方式。
  • 機器學習之基於sklearn的KMeans聚類
    聚類算法,無監督學習的代表算法,又叫做「無監督分類」即在訓練的時候只需要特徵矩陣,不需要真實值標籤可以有效地幫助我們探索數據的自然分布一、KMeans算法的運行過程運行的流程如下:自動聚類時的質心點的每步驟變化如下:
  • Python + Scikit-learn 完美入門機器學習指南 ​
    但我們都知道,機器學習常用的算法有很多,例如:線性回歸、支持向量機、k 近鄰、決策樹、樸素貝葉斯、邏輯回歸等。其中的一些算法都有著比較複雜的數學過程,如果每一次都需要自己通過代碼實現這些算法,那麼機器學的門檻就變得很高了。這時,scikit-learn 來了。
  • 開源機器學習框架:Scikit-learn API簡介
    這主要體現在兩個方面:一是Scikit-learn從來不做除機器學習領域之外的其他擴展,二是Scikit-learn從來不採用未經廣泛驗證的算法。Scikit-learn的六大功能Scikit-learn的基本功能主要被分為六大部分:分類,回歸,聚類,數據降維,模型選擇和數據預處理。
  • k均值聚類算法原理和(TensorFlow)實現(無師自通)
    人是非常擅長分類的,聚類算法試圖讓計算機也具備這種類似的能力,聚類技術很多,例如層次法、貝葉斯法和劃分法。k 均值聚類屬於劃分聚類方法,將數據分成 k 個簇,每個簇有一個中心,稱為質心,k 值需要給定。k 均值聚類算法的工作原理如下:隨機選擇 k 個數據點作為初始質心(聚類中心)。