k均值聚類演算法(k-means clustering algorithm)是一種迭代求解的聚類分析演算法,其步驟是:
1、隨機選取k個物件作為初始的聚類中心,然後計算每個物件與各個種子聚類中心之間的距離,把每個物件分配給距離它最近的聚類中心。
2、聚類中心以及分配給它們的物件就代表乙個聚類。每分配乙個樣本,聚類的聚類中心會根據聚類中現有的物件被重新計算。
3、這個過程將不斷重複直到滿足某個終止條件。終止條件可以是沒有(或最小數目)物件被重新分配給不同的聚類,沒有(或最小數目)聚類中心再發生變化,誤差平方和區域性最小。
import numpy as np
import pandas as pd
import random
import sys
import time
class kmeansclusterer:
def __init__(self,ndarray,cluster_num):
self.ndarray = ndarray
self.cluster_num = cluster_num
self.points=self.__pick_start_point(ndarray,cluster_num)
def cluster(self):
result =
for i in range(self.cluster_num):
for item in self.ndarray:
distance_min = sys.maxsize
index=-1
for i in range(len(self.points)):
distance = self.__distance(item,self.points[i])
if distance < distance_min:
distance_min = distance
index = i
result[index] = result[index] + [item.tolist()]
new_center=
for item in result:
# 中心點未改變,說明達到穩態,結束遞迴
if (self.points==new_center).all():
return result
self.points=np.array(new_center)
return self.cluster()
def __center(self,list):
'''計算一組座標的中心點
'''# 計算每一列的平均值
return np.array(list).mean(axis=0)
def __distance(self,p1,p2):
'''計算兩點間距
'''tmp=0
for i in range(len(p1)):
tmp += pow(p1[i]-p2[i],2)
return pow(tmp,0.5)
def __pick_start_point(self,ndarray,cluster_num):
if cluster_num <0 or cluster_num > ndarray.shape[0]:
raise exception("簇數設定有誤")
# 隨機點的下標
indexes=random.sample(np.arange(0,ndarray.shape[0],step=1).tolist(),cluster_num)
points=
for index in indexes:
return np.array(points)
資料探勘演算法學習(一)K Means演算法
博主最近實習開始接觸資料探勘,將學習筆記分享給大家。目前用的軟體是weka,下篇文章會著重講解。演算法簡介 k means 演算法是輸入聚類個數 k,以及包含 n個資料物件的資料庫,輸出滿足方差最小標準的 k個聚類 並使得 所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚類物件相似度較小。演算...
聚類方法學習(二)KMeans演算法與案例
kmeans直觀感受就是自動畫圈,通過畫圈自動聚類 優點 收斂速度快 需要的引數少 缺點 k值的選擇較難 初始點的隨機種子對結果影響很大 對異常值敏感 可能只能得到區域性的最優解,而無法得到全域性的最優解 import numpy as np import matplotlib.pyplot as ...
學習筆記 K means演算法
在資料探勘中,k means演算法是一種cluster analysis的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最近均值的演算法。問題k means演算法主要解決的問題如下圖所示。我們可以看到,在圖的左邊有一些點,我們用肉眼可以看出來有四個點群,但是我們怎麼通過電腦程式找出...