博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 实现kmeans聚类
阅读量:5905 次
发布时间:2019-06-19

本文共 941 字,大约阅读时间需要 3 分钟。

 

编程中在做数值相等判断的时候,直接使用==判断并不可靠。实际上经过运算后的两个值(浮点型)并不可能完全一致,可能会因为小数点后的些许差异导致判断为false。

比如:

1
print
1e
-
5
=
=
1e
-
6
/
/
这肯定是false,但是实际这两个值可以看作近似相等。

在kmeans中判断是否结束循环,就是判断重新计算的聚类中心点是否和原聚类中心点一致,实际上新旧聚类中心点之间会有一个可允许的误差。修改代码如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import
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

转载于:https://www.cnblogs.com/jyxbk/p/8675402.html

你可能感兴趣的文章
如何根据市场特征判断绝佳买入点
查看>>
MSSQL发现第五到数据的第十
查看>>
百度地图 鼠标绘制,获取矩形,多边形的顶点经纬度
查看>>
iOS 代码规范
查看>>
mvc+webapi 项目架构
查看>>
Funambol Developer&#39;s Guide 中 connector development样例的问题
查看>>
如何在论文中画出漂亮的插图?
查看>>
关于 Cocoa Pods 的使用
查看>>
一位股市高手悟出坐庄全过程
查看>>
php删除多重数组对象属性,重新赋值的方法
查看>>
Linux多进程编程
查看>>
H5页面设计器,仿有赞商城页面在线设计器,比富文本框更友好的内容编辑器...
查看>>
信息搜集神器
查看>>
在ASP.NET Core中使用百度在线编辑器UEditor
查看>>
使用DNSPod解析Freenom域名
查看>>
Nginx学习笔记
查看>>
Zookeeper(二)-- 客户端操作命令
查看>>
LOCAL_WHOLE_STATIC_LIBRARIES与LOCAL_STATIC_LIBRARIES的区别
查看>>
Solid Edge如何估算零件的质量,重心等物理性质
查看>>
Megcup 2017 决赛第一题 规则
查看>>