每日算法(二)
来源:互联网 发布:五线谱打谱软件mac 编辑:程序博客网 时间:2024/04/30 03:32
KMeans-K均值算法
点击打开链接
k-means算法,也被称为k-平均或k-均值,是一种得到最广泛使用的聚类算法。它是将各个聚类子集内的所有数据样本的均值作为该聚类的代表点,算法的主要思想是通过迭代过程把数据集划分为不同的类别,使得评价聚类性能的准则函数达到最优,从而使生成的每个聚类内紧凑,类间独立。这一算法不适合处理离散型属性,但是对连续型具有较好的聚类效果
K-MEANS算法是输入聚类个数k,以及包含 n个数据对象的数据库,输出满足方差最小标准的k个聚类。
k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
1选定某种距离作为数据样本间的相似性度量: 欧拉距离公式,
2选定评价聚类性能的准则函数:误差平方和准则函数公式,
3相似度的计算根据一个簇中对象的平均值来进行。
{算法原理
kmeans的计算方法如下:
1 随机选取k个中心点
2 遍历所有数据,将每个数据划分到最近的中心点中
3 计算每个聚类的平均值,并作为新的中心点
4 重复2-3,直到这k个中线点不再变化(收敛了),或执行了足够多的迭代
时间复杂度:O(I*n*k*m)
空间复杂度:O(n*m)
其中m为每个元素字段个数,n为数据量,I为跌打个数。一般I,k,m均可认为是常量,所以时间和空间复杂度可以简化为O(n),即线性的。}
k-means 算法基本步骤
k-means 算法缺点
① 在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。这也是 K-means 算法的一个不足。有的算法是通过类的自动合并和分裂,得到较为合理的类型数目 K,例如 ISODATA 算法。关于 K-means 算法中聚类数目K 值的确定在文献中,是根据方差分析理论,应用混合 F统计量来确定最佳分类数,并应用了模糊划分熵来验证最佳分类数的正确性。在文献中,使用了一种结合全协方差矩阵的 RPCL 算法,并逐步删除那些只包含少量训练数据的类。而文献中使用的是一种称为次胜者受罚的竞争学习规则,来自动决定类的适当数目。它的思想是:对每个输入而言,不仅竞争获胜单元的权值被修正以适应输入值,而且对次胜单元采用惩罚的方法使之远离输入值。
② 在 K-means 算法中,首先需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果,这也成为 K-means算法的一个主要问题。对于该问题的解决,许多算法采用遗传算法(GA),例如文献 中采用遗传算法(GA)进行初始化,以内部聚类准则作为评价指标。
③ 从 K-means 算法框架可以看出,该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的。所以需要对算法的时间复杂度进行分析、改进,提高算法应用范围。在文献中从该算法的时间复杂度进行分析考虑,通过一定的相似性准则来去掉聚类中心的侯选集。而在文献中,使用的 K-means 算法是对样本数据进行聚类,无论是初始点的选择还是一次迭代完成时对数据的调整,都是建立在随机选取的样本数据的基础之上,这样可以提高算法的收敛速度.
- 每日算法(二)
- 每日一算法:老鼠走迷官(二)
- 每日算法(数组与字符串二)
- 每日一个小算法(二)-插入排序
- 每日阅读(二)
- 每日进步(二)
- 每日英语(二)
- 每日算法(链表)
- 每日算法(一)
- 每日算法之二十:Generate Parentheses
- 每日算法之二十四:Implement strStr()
- 每日一题(二)
- Linux每日学习(二)
- 每日十道面试题(二)
- 每日英语阅读(二)
- 每日一点Js(二)
- Python每日小结(二)
- 每日一算法(判断)
- TCP定时器
- [sicily] 1000.函数求值
- Android应用在不同版本间兼容性处理
- App进入首页三秒后跳转到主页面,第二次进入直接跳到主页面,带倒计时
- Python基础-元类
- 每日算法(二)
- 协调者布局:CoordinatorLayout
- Handler和Timer实现倒计时跳转页面
- Visual Studio的一些帮助提升代码速度的小技巧
- 303. Range Sum Query
- 命令行进度条实现
- redis基本部署
- g729编解码的总结(2)
- 表单js验证