数据挖掘中的DBSCAN聚类算法CSharp实现及一些问题

感谢PharaohNinputer 的建议,两者方法都可以工作,但我最终采用了Pharaoh的技术方案,技术没有最好,只有更好嘛14.gif,现在这个实现以及解决下述所有问题,保留下文仅供怀旧,代码已更新了。

DBSCAN实现代码和示例下载:dbscan


因为前一阶段考试,好久没写blog了,我加入 商业智能团队后也从没出过一篇像样的blog,希望这篇关于DBSCAN聚类算法的CSharp实现的blog能够引起大家一些关注。

程序说明:
Form1.cs是应用聚类算法 DBSCAN (Density-Based Spatical Clustering of Application with Noise)的示例,可以通过两个参数EPS和MinPts调节聚类。DBSCAN.cs是全部算法的实现文件,聚类算法的进一步信息请参考“ 数据挖掘”或者相关书籍。聚类示例数据来自于sxdb.mdb,一个Access数据库。

已知问题及解决方法:
问题:dbscan.cs行64,SortedList不支持重复键,因此若两个数据点距离相同则无法加入集合
解决方法:采用人为减小一个微小量,使数据点距离不同且不影响聚类结果
上一解决方案的问题:减小double.Epsilon微小量无助于使SortedList认为两点距离以及不同
解决方法:采用一个指数增长的微小量,连续重试直至SortedList认为距离已经不同

进一步改进建议:
可能通过double的强制转型为内存中的byte类型(假设double型转为8个byte)
然后最后一个byte减去0x01可以比较漂亮的解决问题,但是……呵呵,C#中我不会这个操作icon18.gif

也可以自己实现一个SortedList,支持重复键,当然,这,好像是微软应该做的工作了23.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值