您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關K-means算法怎么在Python中應用,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
Python是一種跨平臺的、具有解釋性、編譯性、互動性和面向對象的腳本語言,其最初的設計是用于編寫自動化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開發獨立的項目和大型項目。
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)
關于K-means算法怎么在Python中應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。