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

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

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#中我不会这个操作

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

你可能感兴趣的:(高质量,经过认真思考并精心写作))