天天看點

Machine Learning | (12) 非監督學習-k-meansk-means案例分析

Machine Learning | 機器學習簡介

Machine Learning | (1) Scikit-learn與特征工程

Machine Learning | (2) sklearn資料集與機器學習組成

Machine Learning | (3) Scikit-learn的分類器算法-k-近鄰

Machine Learning | (4) Scikit-learn的分類器算法-邏輯回歸

Machine Learning | (5) Scikit-learn的分類器算法-樸素貝葉斯

Machine Learning | (6) Scikit-learn的分類器算法-性能評估

Machine Learning | (7) Scikit-learn的分類器算法-決策樹(Decision Tree)

Machine Learning | (8) Scikit-learn的分類器算法-随機森林(Random Forest)

Machine Learning | (9) 回歸算法-線性回歸

Machine Learning | (10) 回歸算法-嶺回歸

Machine Learning | (11) 回歸性能評估與欠拟合、過拟合

非監督學習之k-means

K-means通常被稱為勞埃德算法,這在資料聚類中是最經典的,也是相對容易了解的模型。算法執行的過程分為4個階段。

1.首先,随機設K個特征空間内的點作為初始的聚類中心。

2.然後,對于根據每個資料的特征向量,從K個聚類中心中尋找距離最近的一個,并且把該資料标記為這個聚類中心。

3.接着,在所有的資料都被标記過聚類中心之後,根據這些資料新配置設定的類簇,通過取配置設定給每個先前質心的所有樣本的平均值來建立新的質心重,新對K個聚類中心做計算。

4.最後,計算舊和新質心之間的差異,如果所有的資料點從屬的聚類中心與上一次的配置設定的類簇沒有變化,那麼疊代就可以停止,否則回到步驟2繼續循環。

K均值等于具有小的全對稱協方差矩陣的期望最大化算法

sklearn.cluster.KMeans

class sklearn.cluster.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')
  """
  :param n_clusters:要形成的聚類數以及生成的質心數
  :param init:初始化方法,預設為'k-means ++',以智能方式選擇k-均值聚類的初始聚類中心,以加速收斂;random,從初始質心資料中随機選擇k個觀察值(行
  :param n_init:int,預設值:10使用不同質心種子運作k-means算法的時間。最終結果将是n_init連續運作在慣性方面的最佳輸出。
  :param n_jobs:int用于計算的作業數量。這可以通過并行計算每個運作的n_init。如果-1使用所有CPU。如果給出1,則不使用任何并行計算代碼,這對調試很有用。對于-1以下的n_jobs,使用(n_cpus + 1 + n_jobs)。是以,對于n_jobs = -2,所有CPU都使用一個。
  :param random_state:随機數種子,預設為全局numpy随機數生成器
  """      
from sklearn.cluster import KMeans
import numpy as np
X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0)      

方法

fit(X,y=None)

使用X作為訓練資料拟合模型

kmeans.fit(X)
      

predict(X)

預測新的資料所在的類别

kmeans.predict([[0, 0], [4, 4]])
array([0, 1], dtype=int32)      

屬性

clustercenters

叢集中心的點坐标

kmeans.cluster_centers_
array([[ 1.,  2.],
       [ 4.,  2.]])      

labels_

每個點的類别

kmeans.labels_      

k-means ++

k-means案例分析

手寫數字資料上K-Means聚類的示範

from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans
 
def kmeans():
    """
    手寫數字聚類過程
    :return: None
    """
    # 加載資料
 
    ld = load_digits()
 
    print(ld.target[:20])
 
 
    # 聚類
    km = KMeans(n_clusters=810)
 
    km.fit_transform(ld.data)
 
    print(km.labels_[:20])
 
    print(silhouette_score(ld.data,km.labels_))
 
    return None
 
 
 
if __name__=="__main__":
    kmeans()      

繼續閱讀