改进的k -均值聚类(Ward准则)速度提高
Improved K-means clustering (Ward criterion) speed improvement
我使用随机初始化的k-means聚类来识别聚类。算法对好的数据很有效。但是如果我处理有很多噪声的数据,那么我的k-means算法就会失去它的鲁棒性,并且在相同的数据集上每次运行都会给出不同的解决方案。
所以我决定改进我的k-means聚类以最小化Ward准则:
- 执行标准k-means聚类
- 遍寻所有的点和聚类找到点P和聚类A和B,如果我将点P从聚类A移动到聚类B,那么该聚类的ward准则将是最小的
- 如果发现这样的点,将其从A移动到B,更新集群中心并继续2
我在这里用c++写了这个算法。然而,问题是,这种方法非常慢,我正在处理每个大约有20,000个点的集群。
你能给我一个更好的解决方案吗,或者你能帮我加快这个算法吗?
我终于找到了解决办法。我已经意识到:
- 我对Ward的方法真的很没用
- PCA对我来说是不可用的,因为我只使用1D集群。
- 在我实现了k-means++之后,正如Micka所说,k-means的可靠性得到了提高。尽管如此,它偶尔还是会给出糟糕的解决方案。(实验中相同数据的5个聚类中有1个是坏的)
对我很有帮助的是均值归一化。我做了5x k-means,每次迭代的聚类中心的计算平均值。最后以计算出的均值作为初始解运行k-means。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 运算符继承和 cpp 核心准则 c.128 的问题
- 如何用符合C++核心准则的代码替换C风格的字符串解析
- 如何在不违反C++核心准则的情况下将整数强制转换为void*
- 有选择地禁用第三方库的C++核心准则检查器
- 是否有C++准则将第一个枚举设置为"safe"默认值?
- 什么时候应该将 Stream 从 DataWriter 和 DataReader 中分离出来?此 I/O 模型的一般准则是什么?
- 我是否违反了OOP设计准则?两个有趣的设计泡菜
- 斯特劳斯特鲁普在函数中传递参数的准则
- 在C++中使用递归的主要准则是什么?
- 为 isocpp 的核心准则配置 clang 格式
- 根据某些准则对数组进行除法
- 改进的k -均值聚类(Ward准则)速度提高
- C++异常处理准则
- boost python make_constructor and custodians and ward
- 你最不喜欢的C++编码准则