機器學習與資料探勘演算法 kMeans演算法

2021-07-26 04:10:06 字數 3221 閱讀 2851

k-平均演算法源於訊號處理中的一種向量量化方法,現在更多作為一種聚類分析方法流行於資料探勘領域。

聚類是一種無監督學習,它將相似的物件歸到同乙個簇中。簇內的物件越相似,聚類的效果越好。聚類與分類最大的不同在於,分類的目標事先已知,聚類則不一樣。

k-均值是發現給定資料集的k個簇的演算法。簇個數k是使用者給定的,每個簇通過其質心,即簇中所有點的中心來描述。

把n個點劃分到k個聚類中,使得每個點都屬於離他最近的均值(即聚類中心)對應的聚類,以此作為聚類的標準。

從n個資料文件隨機選取k個資料文件作為質心;

對剩餘的每個資料文件測量其到每個質心的距離,並把它歸到最近的質心的類;

重新計算已經得到的每個類的質心;

迭代2-3步直至新的質心與原質心相等或小於指定閥值。

資料預處理,匯入資料做成矩陣。disteclud方法計算兩個向量之間的距離。

from numpy import *

defloaddataset

(filename):

datamat =

fr = open(filename)

for line in fr.readlines():

curline = line.strip().split('\t')

fltline = map(float, curline)

return datamat

defdisteclud

(veca, vecb):

return sqrt(sum(power(veca - vecb, 2)))

defrandcent

(dataset, k):

n = shape(dataset)[1]

centroids = mat(zeros((k, n)))

for j in range(n):

minj = min(dataset[:,j])

rangej = float(max(dataset[:,j]) - minj)

centroids[:, j] = minj + rangej * random.rand(k, 1)

return centroids

建立k個質心,然後將每個點分配到最近的質心,然後重新計算質心。這個過程反覆迭代,直到資料點的簇分配結果不再改變為止。

def

kmeans

(dataset, k, distmeas=disteclud, createcent=randcent):

m = shape(dataset)[0]

clusterassment = mat(zeros((m, 2)))

centroids = createcent(dataset, k)

clusterchanged = true

while clusterchanged:

clusterchanged = false

for i in range(m):

mindist = inf

minindex = -1

for j in range(k):

distji = distmeas(centroids[j, :], dataset[i, :])

if distji < mindist:

mindist = distji

minindex = j

if clusterassment[i, 0] != minindex:

clusterchanged = true

clusterassment[i, :] = minindex, mindist ** 2

print centroids

for cent in range(k):

ptsinclust = dataset[nonzero(clusterassment[:0].a == cent)[0]]

centroids[cent,:] = mean(ptsinclust, axis=0)

return centroids, clusterassment

聚類的簇的數目k是乙個使用者預先定義的引數,那麼使用者如何才能直到k的選擇是正確的那?在包含簇分配結果的矩陣中儲存著每個點的誤差,即該點到簇質心的距離平方值。下面討論利用誤差來評價聚類質量。

sse(sum of squared error, 誤差平方和)

sse值越小,表示資料點越接近它們的質心,聚類的效果也就越好。降低sse值的方法就是增加簇的個數,但聚類的目標就是在保持簇數目不變的情況下提高簇的質量。應該如何去做?

二分k-均值演算法是為了克服k-均值演算法收斂於區域性最小值的問題提出的。該演算法首先將所有點作為乙個簇,然後將簇一分為二,選擇最有可能降低sse值的簇繼續進行劃分,繼續迭代上述的過程,直至劃分到使用者指定的簇數目為止。另一種做法是選擇sse最大的簇進行劃分,直到簇數目達到使用者指定的數目為止。

sklearn.cluster.kmeans(n_clusters=8,

init='k-means++'

,n_init=10,

max_iter=300,

tol=0.0001,

precompute_distances='auto'

,verbose=0,

random_state=none,

copy_x=true,

n_jobs=1,

algorithm='auto'

)

詳細api介紹

使用方法

from sklearn.cluster import kmeans

import numpy as np

x = np.array([[1, 2], [1, 4], [1, 0],

[4, 2], [4, 4], [4, 0]])

kmeans = kmeans(n_clusters = 2, random_state = 0).fit(x)

print kmeans.labels_

print kmeans.predict([[0, 0], [4, 4]])

print kmeans.cluster_centers_

得到結果

python kmeansapi.py [00

0111]

[01]

[[ 1. 2.]

[ 4. 2.]]

還有其他很多方法,詳細的要閱讀文件api。

機器學習與資料探勘

機器學習的科學成分更重一些 資料探勘的技術成分更重一些 資料分析的角度 資料探勘並沒有機器學習探索人的學習機制這一科學發現任務 資料探勘中的資料分析是針對海量資料進行的 是一門多領域交叉學科,涉及概率論 統計學 畢竟輪 凸分析 演算法複雜度理論等多門學科,專門研究計算機是怎樣模擬或實現人類的學習行為...

機器學習與資料探勘相關演算法彙總

普通最小二乘回歸 olsr 線性回歸 linear regression 邏輯回歸 logistic regression 逐步回歸 多元自適應回歸樣條法 mars 區域性估計平滑散點圖 loess k臨近演算法 knn 學習向量量化演算法 lvq 自組織對映演算法 som 區域性加權學習法 lwl...

機器學習演算法與Python學習 資料探勘過關40題

1.某超市研究銷售紀錄資料後發現,買啤酒的人很大概率也會購買尿布,這種屬於資料探勘的哪類問題?a.關聯規則發現 b.聚類 c.分類 d.自然語言處理 2.以下兩種描述分別對應哪兩種對分類演算法的評價標準?a 警察抓小偷,描述警察抓的人中有多少個是小偷的標準。b 描述有多少比例的小偷給警察抓了的標準。...