機器學習個人筆記,學習中水平有限,內容如有缺漏歡迎指正。
無監督學習中,資料是沒有標註的,也就是說資料集中沒有乙個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演算法
("損失值:"
,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
m1i=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聚類是聚類分析中比較基礎的演算法,屬於典型的非監督學習演算法。其定義為對未知標記的資料集,按照資料內部存在的資料特徵將資料集劃分為多個不同的類別,使類別內的資料盡可能接近,類別間的資料相似度比較大。用於衡量距離的方法主要有曼哈頓距離 歐氏距離 切比雪夫距離,其中歐氏距離較為常用。演算法...