针对离散和有界数据优化的离散dbscan算法。

ddbscan的Python项目详细描述


https://travis-ci.org/cloudwalkio/ddbscan.svg?branch=masterhttps://img.shields.io/coveralls/cloudwalkio/ddbscan/master.svgLandscape quality scoreLatest VersionSupported Python versionsDownloads on PyPILicense

这是DBSCAN聚类算法的一个版本,针对离散 有界数据,我们称之为离散dbscan(ddbscan)的原因。基础 当前实现来自this source。算法代码在 文件ddbscan/ddbscan.py,且易于读取。主要算法本身 在方法compute()中,可以通过上面的链接理解 或者阅读描述它的文章。

这个实现的另一个特点是它设计为在线 学习。因此,当我们向ddbscan对象添加点时,必须通过 每次指向方法add_point的一个点。见下面的用法。

离散和有界数据的优化

我们对上述链接中描述的香草算法的主要优化是 基于这样一个事实,对于离散和有界的数据,我们期望看到 同一点发生的次数,以便我们可以跟踪 指出并优化我们的算法以使用这些信息。

为了加速新点的插入和簇的计算,每个ddbscan 对象为每个点保留其邻居和邻居的索引 大小(相邻点的计数之和)。所以,当我们插入一个新的 点,我们看它是不是已经存在的一对,只是增加计数器。 以及邻近地区的规模。我们用 插入新对时的点,更新其点数据 邻居。

参数

dbscan模型有两个参数:

  • min_pts:创建群集的点的最小邻居数。
  • eps:查找邻居的半径。

通过调整这两个参数,我们实际上是在设置异常值(异常值) 检测灵敏度。min_pts的较大值意味着 将一个新的模式识别为一个集群,而不是一个异常,我们必须看到 更多的点有这种模式。eps的较大值意味着 更大的星团可以更容易地形成,因此在密度较小的区域中的点可以 给定这么大的eps,将其识别为群集成员。考虑到重要性 我们有一个方法来设置这些参数,称为 set_params(),它相应地更新模型的内部状态。

安装

要安装软件包,最简单的方法是使用pip:

$ pip install ddbscan

另一个选项是克隆此回购并运行

$ python setup.py install

运行测试:

$ python setup.py test

用法

典型的例子如下:

importddbscan# Create a DDBSCAN model with eps = 2 and min_pts = 5scan=ddbscan.DDBSCAN(2,5)# Add points to modeldata=[[1,2],[2,2],[1,3],[2,3],[3,3],[8,9],[7,6],[9,7],[6,9],[6,8],[5,5],[7,8]]forpointindata:scan.add_point(point=point,count=1,desc="")# Compute clustersscan.compute()print'Clusters found and its members points index:'cluster_number=0forclusterinscan.clusters:print'=== Cluster %d ==='%cluster_numberprint'Cluster points index: %s'%list(cluster)cluster_number+=1print'\nCluster assigned to each point:'foriinxrange(len(scan.points)):print'=== Point: %s ==='%scan.points[i]print'Cluster: %2d'%scan.points_data[i].cluster,# If a point cluster is -1, it's an anomalyifscan.points_data[i].cluster==-1:print'\t <== Anomaly found!'else:print

许可证

The MIT License (MIT)

Copyright (c) 2014 CloudWalk, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
运行测试套件时,PowerMockito和SWT出现java不满意的链接错误   java如何在javascript中使用playframework标记   java Android Gradle项目对AAR库的依赖在3.5中失败。x释放   java即使是同步的方法也会生成相同的UUID   在同一个Memcached服务器上使用不同的Memcached服务   来自安卓 studio的java执行shell脚本   swing Java CardLayout未显示   java保存和恢复ArrayList   java如何在travis构建期间使用gpg2导入私钥?   java检查这两个数字是否等于n个有效数字   java在DynamoDB范围键中插入项   JavaSpring正在注入具体的类而不是代理   java如何让AppContext发布AWT组件,以便对其进行垃圾收集?   java如何在jbehave中实现if条件   java使用动态编程生成从1到n的所有二进制搜索树   java Mule使用基本流重试连接   java Worklight Server本地开发,有些是WL。服务器调用不可用或工作不正常   java 安卓。支持v7。小装置。无法实例化AppCompatTextView   Java中使用线程和递归计算斐波那契数的多线程处理