程式設計中在做數值相等判斷的時候,直接使用==
判斷並不可靠。實際上經過運算後的兩個值(浮點型)並不可能完全一致,可能會因為小數點後的些許差異導致判斷為false。
比如:1
print
1e
-
5
=
=
1e
-
6
/
/
這肯定是false,但是實際這兩個值可以看作近似相等。
在kmeans中判斷是否結束迴圈,就是判斷重新計算的聚類中心點是否和原聚類中心點一致,實際上新舊聚類中心點之間會有乙個可允許的誤差。修改**如下:12
3456
78910
1112
1314
1516
1718
1920
2122
23import
numpy as np
def
kmeans(data, n, m, k):
rarray
=
np.random.random(size
=
k)
rarray
=
np.floor(rarray
*
n)
rarray.astype(
int
)
cls
=
np.zeros([
1
,n],np.
int
)
center
=
np.take(data,rarray)
pcenter
=
np.zeros([k,m])
end
=
true
while
end:
for
i
in
xrange
(n):
tmp
=
data[i]
-
center
tmp
=
np.square(tmp)
tmp
=
np.
sum
(tmp,axis
=
1
)
cls
[i]
=
np.argmin(tmp)
center
=
np.zeros([k,m])
count
=
np.zeros([
1
,k],np.
int
)
for
i
in
xrange
(n):
center[
cls
[i]]
=
center[
cls
[i]]
+
data[i]
count[
cls
[i]]
=
count[
cls
[i]]
+
1
if
np.
sum
(center
/
count
-
pcenter) <
=
1e
-
4
:
end
=
false
pcenter
=
center
/
count
Kmeans聚類演算法 python實現
kmeans演算法 k均值演算法需要輸入待聚類的資料和欲聚類的簇數k,主要過程如下 1.隨機生成k個初始點作為質心 2.將資料集中的資料按照距離質心的遠近分到各個簇中 3.將各個簇中的資料求平均值,作為新的質心,重複上一步,直到所有的簇不再改變 import pandas as pd import ...
K means聚類 的 Python 實現
k means聚類 的 python 實現 k means聚類是乙個聚類演算法用來將 n 個點分成 k 個集群。演算法有3步 1.初始化 k 個初始質心會被隨機生成 2.分配 k 集群通過關聯到最近的初始質心生成 3.更新 重新計算k個集群對應的質心 分配和更新會一直重複執行直到質心不再發生變化。最...
K means聚類演算法(python實現簡單原理)
產生隨機50個點 這裡產生資料並儲存資料,不然每次資料總變來變去的,要是 寫得不當,也不太方便檢視 defproducte data f open data.csv w for i in range 50 a random.randint 1,10 b random.randint 1,10 f.w...