機器學習python Kmeans

2021-08-15 11:17:23 字數 3341 閱讀 4226

k-均值聚類演算法

首先,隨機確定k個初始點作為質心,然後將資料集中的每個點分配到乙個簇中,即為每個點找距其最近的質心,並將其分配給該質心對應的簇,然後每個簇的質心更新為該簇所有點的平均值。演算法流程如下:

建立k個點作為起始質心(一般隨機選擇)

任意乙個點所屬簇的結果發生改變時

對資料集中每個點

對每個質心

計算資料與質心間的距離

將資料劃分到與它最近的簇

對於每個簇,重新計算質心(所有點的均值)

二分k-均值演算法

首先將所有點作為乙個簇,然後將該簇一分為二,之後選擇其中乙個簇繼續劃分,選擇哪乙個簇取決於是否可以很大程度降低sse(誤差平方和)的值,迴圈直到得到指定的簇。演算法流程如下:

將所有點看成乙個簇

當簇數目小於k時

對於每乙個簇

計算總誤差

在給定的簇上面進行k均值聚類(k=2)

計算將該簇一分為二之後的總誤差

選擇使得誤差最小的那個簇進行劃分操作

from numpy import *

def loaddataset(filename):

datamat =

fr = open(filename)

for line in fr.readlines():

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

fltline = [float(x) for x in curline]

return datamat

def disteclud(veca,vecb):

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

def randcent(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] = mat(minj + rangej * random.rand(k,1))

return centroids

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

def bikmeans(dataset,k,distmeas=disteclud):

m = shape(dataset)[0]

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

centorid0 = mean(dataset,axis=0).tolist()[0]

centlist = [centorid0]

for j in range(m):

clusterassment[j,1] = distmeas(mat(centorid0),dataset[j,:])**2

while (len(centlist) < k):

lowestsse = inf

for i in range(len(centlist)):

ptsincurrcluster = dataset[nonzero(clusterassment[:,0].a == i)[0],:]

centroidmat,splitclustass = kmeans(ptsincurrcluster,2,distmeas)

ssesplit = sum(splitclustass[:,1])

ssenotsplit = sum(clusterassment[nonzero(clusterassment[:,0].a != i)[0],1])

print(ssesplit,ssenotsplit)

if (ssesplit + ssenotsplit) < lowestsse:

bestcenttosplit = i

bestnewcents = centroidmat

bestclustass = splitclustass.copy()

lowestsse = ssenotsplit + ssesplit

bestclustass[nonzero(bestclustass[:,0].a == 1)[0],0] = len(centlist)

bestclustass[nonzero(bestclustass[:,0].a == 0)[0],0] = bestcenttosplit

centlist[bestcenttosplit] = bestnewcents[0,:].tolist()[0]

clusterassment[nonzero(clusterassment[:,0].a == bestcenttosplit)[0],:] = bestclustass

return mat(centlist),clusterassment

dataset = mat(loaddataset('testset.txt'))

a,b = bikmeans(dataset,3)

機器學習 初識機器學習

1.什麼是機器學習?對於機器學習到現在都還沒有統一的定義,但是,通過乙個例子和較權威的定義來理解機器學習,最後附上我個人對機器學習的理解 2.監督學習 1 監督學習基本思想 我們資料集中的每個樣本都有相應的 正確答案 即每個樣本都是真實值,再根據這些樣本作出 舉乙個房價預售的例子來說明 eg 下面圖...

機器學習 機器學習目錄

注 後期有時間的話會對每乙個演算法進行講解。1 普通線性回歸 2 廣義線性模型 3 邏輯回歸 4 線性判定分析1 決策樹基本原理與構建 2 cart演算法 3 回歸決策樹 4 分類決策樹1 貝葉斯定理與樸素貝葉斯 2 高斯貝葉斯分類器 3 多項式貝葉斯分類器 4 伯努利貝葉斯分類器 5 遞增式學習1...

機器學習一 機器學習概要

回歸 是指把實函式在樣本點附近加以近似的有監督的模式識別問題。對乙個或多個自變數和因變數之間關係進行建模,求解的一種統計方法。分類 是指對於指定的模式進行識別的有監督的模式識別問題。異常檢測 是指尋找輸入樣本ni 1i 1 n中所包含的異常資料的問題。常採用密度估計的方法 正常資料為靠近密度中心的資...