1. 程式人生 > >使用sklearn進行K_Means聚類演算法

使用sklearn進行K_Means聚類演算法

再給一個百度上找的例子(侵權刪):

# -*- coding: utf-8 -*-
from sklearn.cluster import KMeans
from sklearn.externals import joblib
import numpy

final = open('c:/test/final.dat' , 'r')

data = [line.strip().split('\t') for line in final]
feature = [[float(x) for x in row[3:]] for row in data]

#呼叫kmeans類
clf = KMeans(n_clusters=9
) s = clf.fit(feature) print s #9箇中心 print clf.cluster_centers_ #每個樣本所屬的簇 print clf.labels_ #用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數 print clf.inertia_ #進行預測 print clf.predict(feature) #儲存模型 joblib.dump(clf , 'c:/km.pkl') #載入儲存的模型 clf = joblib.load('c:/km.pkl') ''' #用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數 for i in range(5,30,1): clf = KMeans(n_clusters=i) s = clf.fit(feature) print i , clf.inertia_ '''

初學者講解如下:
參考http://www.cnblogs.com/meelo/p/4272677.html
sklearn對於所有的機器學習演算法有一個一致的介面,一般需要以下幾個步驟來進行學習:
1、初始化分類器,根據不同的演算法,需要給出不同的引數,一般所有的引數都有一個預設值。
這裡寫圖片描述
(1)對於K均值聚類,我們需要給定類別的個數n_cluster,預設值為8;
(2)max_iter為迭代的次數,這裡設定最大迭代次數為300;
(3)n_init設為10意味著進行10次隨機初始化,選擇效果最好的一種來作為模型;
(4) init=’k-means++’ 會由程式自動尋找合適的n_clusters;
(5)tol:float形,預設值= 1e-4,與inertia結合來確定收斂條件;
(6)n_jobs:指定計算所用的程序數;
(7)verbose 引數設定列印求解過程的程度,值越大,細節列印越多;
(8)copy_x:布林型,預設值=True。當我們precomputing distances時,將資料中心化會得到更準確的結果。如果把此引數值設為True,則原始資料不會被改變。如果是False,則會直接在原始資料
上做修改並在函式返回值時將其還原。但是在計算過程中由於有對資料均值的加減運算,所以資料返回後,原始資料和計算前可能會有細小差別。
屬性:
這裡寫圖片描述


(1)cluster_centers_:向量,[n_clusters, n_features]
Coordinates of cluster centers (每個簇中心的座標??);
(2)Labels_:每個點的分類;
(3)inertia_:float,每個點到其簇的質心的距離之和。
比如我的某次程式碼得到結果:
這裡寫圖片描述
2、對於非監督機器學習,輸入的資料是樣本的特徵,clf.fit(X)就可以把資料輸入到分類器裡。
3、用分類器對未知資料進行分類,需要使用的是分類器的predict方法。