k 均值聚类与通过蛮力方法创建组之间的区别
Difference between k-means clustering and creating groups by brute force approach
我的任务是根据数字尺寸(直径、厚度)和分类尺寸(material、热处理等)查找相似零件。我有一个包含 100 万个零件的清单。作为程序员,我的方法是将所有部分放在列表中,弹出第一部分并将其用作新的 "cluster" 以根据维度比较列表中的其余部分。由于列表中的一部分与分类维度和数字维度相匹配——在 5% 以内——我将该部分添加到集群中并从初始列表中删除。一旦列表中的所有部分都与初始集群部分的尺寸进行比较,我将从列表中弹出下一个部分并重新开始,填充集群直到原始列表中没有任何部分。这是一种编程方法。我不确定这是否是将零件分类为 "clusters" 的最有效方法,或者 k-means 聚类是否是更好的方法。
定义"better".
您所做的似乎与 "leader" 集群有关。但这是一种非常原始的聚类形式,通常不会产生有竞争力的结果。但是有 100 万个点,你的选择是有限的,kmeans 不能很好地处理分类数据。
但是在你决定什么是 'better' 之前,你的贪婪方法可能没有任何东西 'wrong'。
一个明显的优化是首先根据分类属性拆分所有数据(因为您希望它们完全匹配)。这只需要遍历一次数据集和一个散列 table。如果您的剩余部分足够小,您可以在每个部分上尝试 kmeans(但您将如何选择 k)或 DBSCAN(可能使用您已有的相同阈值)。
我的任务是根据数字尺寸(直径、厚度)和分类尺寸(material、热处理等)查找相似零件。我有一个包含 100 万个零件的清单。作为程序员,我的方法是将所有部分放在列表中,弹出第一部分并将其用作新的 "cluster" 以根据维度比较列表中的其余部分。由于列表中的一部分与分类维度和数字维度相匹配——在 5% 以内——我将该部分添加到集群中并从初始列表中删除。一旦列表中的所有部分都与初始集群部分的尺寸进行比较,我将从列表中弹出下一个部分并重新开始,填充集群直到原始列表中没有任何部分。这是一种编程方法。我不确定这是否是将零件分类为 "clusters" 的最有效方法,或者 k-means 聚类是否是更好的方法。
定义"better".
您所做的似乎与 "leader" 集群有关。但这是一种非常原始的聚类形式,通常不会产生有竞争力的结果。但是有 100 万个点,你的选择是有限的,kmeans 不能很好地处理分类数据。
但是在你决定什么是 'better' 之前,你的贪婪方法可能没有任何东西 'wrong'。
一个明显的优化是首先根据分类属性拆分所有数据(因为您希望它们完全匹配)。这只需要遍历一次数据集和一个散列 table。如果您的剩余部分足够小,您可以在每个部分上尝试 kmeans(但您将如何选择 k)或 DBSCAN(可能使用您已有的相同阈值)。