rapidminer 和 scikit-learn 中的 DBSCAN 算法
Posted
技术标签:
【中文标题】rapidminer 和 scikit-learn 中的 DBSCAN 算法【英文标题】:DBSCAN algorithms in rapidminer and scikit-learn 【发布时间】:2014-09-11 10:09:36 【问题描述】:我正在尝试寻找一种聚类算法来使用 python 对标称数据进行聚类。为此,我尝试了使用 RapidMiner 的 DBSCAN 算法,它适用于标称数据。但是当我使用 scikit-learn 提供的 DBSCAN 算法尝试相同的数据集时,它给出的错误是函数无法将字符串转换为浮点数。
rapidminer 和 scikit-learn 中的 DBSCAN 是否不同,我该如何解决这个问题? 另外,如果您告诉我另一种适用于名义数据的聚类算法会很棒吗?
【问题讨论】:
在使用 scikit learn 时,您需要将数据编码为一些数字数据类型,这取决于您对字符串值的解释。是值标签,您是否需要从字符串中提取特征,例如长度,tf-idf 等。一般看LabelEncoder 和preprocessing 【参考方案1】:SciPy 默认为欧几里得距离 (metric='euclidean'
),它没有为名义数据定义。
您需要指定距离测量值!
【讨论】:
我试过了,但没有一个接受字符串数组(也许我错过了其中一个我不知道)。但我也从docs.scipy.org/doc/scipy/reference/spatial.distance.html 检查了它,因为其中一些接受布尔值。那么我是否必须将我的标称值转换为二进制文件?并使用其中一种二进制距离指标? 实现自己的距离函数可能是个好主意,专为您的用例而设计。还要先评估距离。您需要了解您的距离才能选择 epsilon 参数;如果距离不减,聚类算法也必然失败!【参考方案2】:RapidMiner 实现了各种距离测量,包括标称距离。这由 DBSCAN 和其他算法使用。
如果属性的值相同,则两个示例之间的距离为零,否则为 1。换句话说,“Raspberry”与“Apple”和“Computer”的距离为 1。另外“Apple”与“Raspberry”、“Computer”等是一回事。
【讨论】:
感谢您的信息。这正是我在 python 中寻找的东西。以上是关于rapidminer 和 scikit-learn 中的 DBSCAN 算法的主要内容,如果未能解决你的问题,请参考以下文章