k means演算法學習

2021-10-01 02:12:11 字數 1861 閱讀 6068

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演算法主要解決的問題如下圖所示。我們可以看到,在圖的左邊有一些點,我們用肉眼可以看出來有四個點群,但是我們怎麼通過電腦程式找出...