Python中使用K-means演算法
k-means是機器學習中最常用的聚類演算法,關於k-means演算法的數學原理、演算法、偽碼等已有相當豐富的文獻,在此不再贅述。
1、呼叫以下庫
import numpy as np #用於抽樣和生成隨機數 from sklearn.cluster import KMeans #sklearn自帶的Kmeans演算法, 用於嚴重本文演算法結果是否正確 import matplotlib.pyplot as plt #結果視覺化 import sys #需要用到sys.exit()函式
若不需要驗證聚類結果是否可以不使用Sklearn庫。
2、生成用於訓練的隨機資料
np.set_printoptions(suppress=True) #令numpy的結果不以科學計數法的方式輸出 Data = np.array([[1.0, 2.0], [1.5, 1.8], [3, 4], [6, 8], [8, 8], [1, 0.6], [9, 11], [7, 10]]) #你也可以透過抽樣的方式來更快的獲得測試資料
3、定義用於選擇隨機初始點和簇數(k)的函式
def K_means(data, k): global Mean mean = [] a = np.max(data[:, 0]) b = np.min(data[:, 0]) c = np.max(data[:, 1]) d = np.min(data[:, 1]) for i in range(k): x = np.random.uniform(a, b, 1) #此處返回array y = np.random.uniform(c, d, 1) #此處返回array mean.append([float(x), float(y)]) Mean = np.array(mean) return Mean
在上面的程式碼中,為了限定初始點(x,y)的位置不會超出樣本點的範圍,因此均勻抽樣的上下限是指訓練資料(a,b)和(c,d)的最小橫距。
4、定義視覺化函式, 繪製測試資料散點圖
def vision(data, cell): plt.figure(figsize=(12,6)) ax1 = plt.subplot(121) ax1.scatter(Data[:, 0], Data[:, 1]) #原始資料散點圖 ax1.scatter(point[:, 0], point[:, 0]) #同時將隨機選取的初始點表示出來 plt.xlabel("x") plt.ylabel("y") plt.title("scatter of " + "rural" + " data") ax2 = plt.subplot(122) ax2.scatter(Data[:, 0], Data[:, 1]) #原始資料散點圖 ax2.scatter(data[:, 0], data[:, 1]) #經過迭代後最終確定的聚類點 plt.xlabel("x") plt.ylabel("y") plt.title("scatter of " + cell + " data") plt.show()
聚類結果的視覺化對於判斷聚類結果的準確性至關重要。
5、定義迭代過程, 透過不斷計算各個樣本對聚類點的歐式聚類, 來不斷更新聚類點
def iteration(Data, point): A = [] B = [] for i in range(len(Data)): d1 = np.sqrt(sum(pow(Data[i] - point[0], 2))) d2 = np.sqrt(sum(pow(Data[i] - point[1], 2))) if d1 > d2: A.append(list(Data[i])) else: B.append(list(Data[i])) if len(A) == len(Data) or len(B) == len(Data): print("初始化錯誤") sys.exit(0) new_x1 = np.mean(np.array(A)[:, 0]) new_y1 = np.mean(np.array(A)[:, 1]) new_x2 = np.mean(np.array(B)[:, 0]) new_y2 = np.mean(np.array(B)[:, 1]) new_point = np.array([[new_x1, new_y1], [new_x2, new_y2]]) return new_point
注意, 上段程式碼中加入了一個if語句
if len(A) == len(Data) or len(B) == len(Data): print("初始化錯誤") sys.exit(0)
由於初始點是隨機產生的,所以這個條件語句是非常必要的,因此有可能所有的樣本點都只接近一個聚類中心而遠離另一個聚類中心,這樣就不能形成兩個聚類中心,程式將會報錯,因此我們需要排除出現這種情況的可能性。一旦所有樣本點都接近一個聚類中心時令程式停止。
以上就是Python中使用K-means演算法,希望能對大家有所幫助!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3016/viewspace-2830703/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- K-means 在 Python 中的實現Python
- 機器學習之k-means聚類演算法(python實現)機器學習聚類演算法Python
- Python實現K-means演算法的顏色量化Python演算法
- python實現之 K-means演算法簡單介紹Python演算法
- k-means 演算法介紹演算法
- k-means演算法筆記演算法筆記
- K-means聚類演算法聚類演算法
- k-means 聚類演算法聚類演算法
- 【Python機器學習實戰】聚類演算法(1)——K-Means聚類Python機器學習聚類演算法
- K-Means聚類演算法原理聚類演算法
- 演算法金 | 再見!!!K-means演算法
- 07 聚類演算法 - 程式碼案例三 - K-Means演算法和Mini Batch K-Means演算法效果評估聚類演算法BAT
- AES演算法在Python中的使用演算法Python
- 機器學習經典演算法之K-Means機器學習演算法
- python中Leetcode演算法如何使用?PythonLeetCode演算法
- 聚類演算法與K-means實現聚類演算法
- 無監督學習-K-means演算法演算法
- 機器學習實戰ByMatlab(3):K-means演算法機器學習Matlab演算法
- K-Means演算法的程式碼實現(Java)演算法Java
- 機器學習入門筆記系列(10) | K-means 演算法機器學習筆記演算法
- 演算法雜貨鋪:k均值聚類(K-means)演算法聚類
- 資料探勘 ReliefF和K-means演算法的應用演算法
- 機器學習—聚類5-1(K-Means演算法+瑞士捲)機器學習聚類演算法
- 演算法金 | 一文讀懂K均值(K-Means)聚類演算法演算法聚類
- 04聚類演算法-程式碼案例一-K-means聚類聚類演算法
- 機器學習實戰ByMatlab(4):二分K-means演算法機器學習Matlab演算法
- R語言實現K-Means演算法資料集irisR語言演算法
- k-medoids與k-Means聚類演算法的異同聚類演算法
- 資料分析與挖掘 - R語言:K-means聚類演算法R語言聚類演算法
- k-means聚類聚類
- 【火爐煉AI】機器學習020-使用K-means演算法對資料進行聚類分析AI機器學習演算法聚類
- Python 中的貪婪排名演算法Python演算法
- 06聚類演算法-程式碼案例二-K-Means演算法和MiniBatchK-Means演算法比較聚類演算法BAT
- python中*args的使用Python
- python中greenlet基本使用Python
- python中for……else……的使用Python
- python 中assert的使用Python
- Python中模組的使用Python