個人機器學習筆記之Kmeans

2021-09-10 19:34:54 字數 3403 閱讀 5404

機器學習個人筆記,學習中水平有限,內容如有缺漏歡迎指正。

無監督學習中,資料是沒有標註的,也就是說資料集中沒有乙個y告訴你什麼是正確的分類。

無監督學習中的資料集就像這樣,給出一組資料點,我們的演算法需要自行將資料分為幾類。

演算法首先選取幾個隨機點(有幾個分類就選幾個)作為初始聚類中心

然後對於每個樣本點,按照距離哪個聚類中心更近就屬於哪個聚類中心的原則劃分類別

找到每個分類好的樣本點群的中心點,將聚類中心移到這個中心點

不斷迭代,直到聚類中心的變化不再明顯

#獲取一群給定樣本的中心

x1=x[:,

0]x2=x[:,

1]return np.array(

[(np.

sum(x1)

/x.shape[0]

),(np.

sum(x2)

/x.shape[0]

)])def

distance

(x,y)

:return np.sqrt(np.

sum(

(x-y)**2

))defgetdistances

(x,c)

:#獲取每個點離得最近的聚類中心的序號

alldistan=np.zeros(

[x.shape[0]

,1])

for i in

range(0

,x.shape[0]

):#對於每個樣本點

distan=np.zeros(

[x.shape[0]

,c.shape[0]

])for j in

range(0

,c.shape[0]

):distan[i,j]

=distance(x[i,:]

, c[j,:]

)

alldistan[i]

=np.argsort(distan[i,:]

)[0]

#離哪個聚類中心距離最小

return alldistan

defcalculaterror

(x):

#計算「損失值」

global c

dis=getdistances(x, c)

.astype(np.int32)

return distance(x,c[dis[:,

0],:

])/c.shape[0]

defkmean

(step,x)

:#c為初始聚類中心

global c

for i in

range

(step)

: distan=getdistances(x, c)

for j in

range

(c.shape[0]

):#根據distance劃分聚類

c[j]

=getcenter(x[distan[:,

0]==j,:]

)#移動聚類中心到新的位置

iris = datasets.load_iris(

)#引入iris資料集

x = iris.data

x = x[:,

:2]# 只取前兩個特徵

standardscaler = standardscaler(

)standardscaler.fit(x)

x_standard = standardscaler.transform(x)

#對資料進行歸一化

x=np.array(x_standard)

c=np.random.rand(2,

2)*4

-2#初始隨機化的聚類中心

kmean(

20, x)

#進行20代kmeans演算法

print

("損失值:"

,calculaterror(x)

)#計算「損失值「並輸出

center=getcenter(c)

##聚類分界線必經過的點k=-

(c[0,0

]-c[1,

0])/

(c[0,1

]-c[1,

1])#聚類分界線斜率=-(x1-x2)/(y1-y2)

plt.scatter(x_standard[:,

0], x_standard[:,

1], color=

'red'

)plt.scatter(c[:,

0], c[:,

1], color=

'blue'

)plt.plot(np.linspace(-2

,2,2

),k*np.linspace(-2

,2,2

)-k*center[0]

+center[1]

)#繪製聚類分界線

plt.show(

)執行結果,注意此圖橫縱比例不是1:1,所以分類直線看起來不垂直於兩個聚類中心構成的直線

k-means的損失函式公式:

1 m∑

i=1m

∣∣x(

i)−μ

c(i)

∣∣2\frac\sum_^m ||x^-\mu_||^2

m1​i=1

∑m​∣

∣x(i

)−μc

(i)​

∣∣2該式意為對於當前每個聚類中心,計算屬於該聚類中心的所有樣本到其的歐幾里得距離之和,然後除以分類個數

無監督學習

個人機器學習總結之線性回歸

1 情景 給定一定數量的資料點,通過擬合得到其回歸直線,使得所有點到這個直線的距離之和 損失函式 最小。即 已知各個點的座標,反求直線表示式的最優係數解。假定直線引數為 則直線表示式為 得到的直線 平面 表示式應使得損失函式最小,其中損失函式表示式 2 求解方式 第一種 直接求解 欲使損失函式最小,...

機器學習 KMeans學習筆記

機器學習 kmeans學習筆記 coding utf 8 spyder editor this is a temporary script file.from numpy import def loaddataset filename file open filename datamat for l...

機器學習筆記之K means聚類

k means聚類是聚類分析中比較基礎的演算法,屬於典型的非監督學習演算法。其定義為對未知標記的資料集,按照資料內部存在的資料特徵將資料集劃分為多個不同的類別,使類別內的資料盡可能接近,類別間的資料相似度比較大。用於衡量距離的方法主要有曼哈頓距離 歐氏距離 切比雪夫距離,其中歐氏距離較為常用。演算法...