聚类算法 K-Means 简介与入门

K-Means 算法是最简单的一种聚类算法,属于无监督学习算法。
聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来。

假设我们的样本是 {x^(1), x^(2), x^(3),……, x^(m) },每个 x^(i) ∈ R^n,即它是一个维向量。现在用户给定一个 k 值,要求将样本聚类成 k 个类簇。在这里,我们把整个算法成为聚类算法,聚类算法的结果是一系列的类簇。

步骤:
输入:样本集 D,簇的数目 k,最大迭代次数N;
输出:簇划分( k 个簇,使平方误差最小)
(1)为每个聚类选择一个初始聚类中心;
(2)将样本集按照最小距离原则分配到最邻近聚类;
(3)使用每个聚类的样本均值更新聚类中心;
(4)重复步骤(2)(3),直到聚类中心不再发生变化;
(5)输出最终的聚类中心和 k 个簇划分。

涉及距离的计算,最常用的距离是欧氏距离(Euclidean Distance),公式为:
在这里插入图片描述
此外,还有闵可夫斯基距离:

曼哈顿距离(也称为城市街区距离,City Block Distance):

在这里插入图片描述
优点:
(1) 算法简单,容易实现
(2) 算法速度很快
(3) 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(NKt),其中,N 为数据对象的数目,t 为迭代的次数。一般来说, K <<N ,t <<N。这个算法通常局部收敛。
(4) 算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

缺点:
(1) K是事先给定的,一个合适的 K 值难以估计。
(2) 在 K-Means 算法中,首先需要根据初始类簇中心来确定一个初始划分,然后对初始划分进行优化。初始类簇中心的选择对聚类结果有较大的影响。一旦选择的不好,可能无法得到有效的聚类结果。可以使用遗传算法来选择合适的初始类簇中心。
(3) 算法需要不断地进行样本分类调整,不断计算调整后的新的类簇中心,因此当数据量非常大的时,算法的时间开销是非常大的。可以利用采样策略,改进算法效率。也就是初始点的选择,以及每一次迭代完成时对数据的调整,都是建立在随机采样的样本数据的基础之上,这样可以提高算法的收敛速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚焦五大领域:浙江大学发布《重大领域交叉前沿方向2021》报告

来源&#xff1a;浙江大学以智能化为特征的第四次工业革命已经全面开启&#xff0c;会聚技术的不断涌现&#xff0c;正引领各领域创新突破性跃迁。学科交叉是这场变革的核心驱动力&#xff0c;主要表现为信息、生命、物质三大学科板块间的深度融合&#xff0c;最终将推动人类生…

分类算法支持向量机(SVM) 简介与入门

在二维平面上&#xff0c;把两类数据分开需要一条直线。到了3微空间&#xff0c;要把两类数据分开&#xff0c;就需要一个平面。把上述分类机制扩展到基本情形&#xff0c;在高维空间里&#xff0c;把两类数据分开&#xff0c;则需要一个超平面。直线和平面是超平面在2维和3维空…

主宰这个世界的10大算法

来源&#xff1a;算法与数学之美什么是算法&#xff1f;简而言之&#xff0c;任何定义明确的计算步骤都可称为算法&#xff0c;接受一个或一组值为输入&#xff0c;输出一个或一组值。(来源&#xff1a;homas H. Cormen, Chales E. Leiserson 《算法导论第3版》)可以这样理解&a…

关联规则分析 Apriori 算法 简介与入门

关联规则的几个概念&#xff1a; 关联规则是形如 X -> Y 的蕴含式&#xff0c;表示通过 X 可以推导出 Y&#xff0c;X称为关联规则的左部&#xff08;Left Hand Side&#xff0c;LHS&#xff09;&#xff0c;Y 称为关联规则的右部&#xff08;Right Hand Side&#xff0c;R…

OO第一单元总结__多项式求导问题

作业一、含幂函数的简单多项式的求导 &#xff08;1&#xff09;基于度量的程序结构分析 1. 统计信息图&#xff1a; 2. 结构信息图&#xff1a; 3. 复杂度分析 基本复杂度&#xff08;Essential Complexity (ev(G))、模块设计复杂度&#xff08;Module Design Complexity (iv(…

Go语言中的`sync`包同步原语

通过sync包掌握Go语言的并发 并发是现代软件开发的基本方面&#xff0c;而Go&#xff08;也称为Golang&#xff09;为并发编程提供了一套强大的工具。在Go中用于管理并发的基本包之一是sync包。在本文中&#xff0c;我们将概述sync包&#xff0c;并深入探讨其最关键的同步原语…

AdaBoost 算法 入门

AdaBoost 是一种迭代算法&#xff0c;其核心思想是针对同一个训练集训练不同的分类器&#xff0c;即弱分类器&#xff0c;然后把这些弱分类器集合起来&#xff0c;构造一个更强的最终分类器。算法的适应性在于前一个基本分类器分错的样本会得到加强&#xff0c;加权后的全体样本…

第一单元总结

一、作业分析 第一次作业 与后两次作业相比&#xff0c;第一次作业非常简单&#xff0c;仅要求对由常数项和幂函数组成的多项式求导。但由于缺少面向对象编程经验&#xff0c;我在这次作业中栽了不少跟头。 &#xff08;1&#xff09;度量分析 在第一次作业中&#xff0c;我还没…

牛客16426 玩具谜题

题目描述 南有一套可爱的玩具小人&#xff0c;它们各有不同的职业。 有一天&#xff0c;这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈&#xff0c;它们有的面朝圈内&#xff0c;有的面朝圈外&#xff0c;如下图&#xff1a; 这时 singer 告诉小南一个谜…

牛客16438 回文日期

date1 input() date2 input()""" 判断是否是闰年 """ def isLeap(year):if (year%4 0 and year%100 ! 0) or (year%400 0):return 1else:return 0""" 判断是否是回文数 """ def isPalindrome(year):for i in …

Codeforces 1139F Dish Shopping 树状数组套平衡树 || 平衡树

Dish Shopping 将每个物品拆成p 和 s 再加上人排序。 然后问题就变成了&#xff0c; 对于一个线段(L - R)&#xff0c; 问有多少个(li, ri)满足 L > li && R > ri&#xff0c; 这个东西可以直接树状数组套平衡树维护。 但是这个题目有个特殊性&#xff0c;因为排…

牛客16494 生活大爆炸版石头剪刀布

题目描述 石头剪刀布是常见的猜拳游戏&#xff1a;石头胜剪刀&#xff0c;剪刀胜布&#xff0c;布胜石头。如果两个人出拳一样&#xff0c;则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上&#xff0c;…

codeforces 1073E

题解&#xff1a; 考虑数位DP,状压出现过的数字集合S&#xff0c;f ( l , x , S , pz , lim )表示到第 l 位&#xff0c;数字为x&#xff0c; 数字集合为S &#xff0c;是否为前导0&#xff0c;是否贴上界 然后同时定义g为该状态下的数字和&#xff0c;利用 10^(l-1) * f(l , x…

时空AI技术:深度强化学习在智能城市领域应时空AI技术:深度强化学习在智能城市领域应用介绍...

来源&#xff1a;海豚数据科学实验室作者&#xff1a;京东科技 时空AI团队深度强化学习是近年来热起来的一项技术。深度强化学习的控制与决策流程必须包含状态&#xff0c;动作&#xff0c;奖励是三要素。在建模过程中&#xff0c;智能体根据环境的当前状态信息输出动作作用于环…

牛客16500 珠心算测试

题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练&#xff0c;既能够开发智力&#xff0c;又能够为日常生活带来很多便利&#xff0c;因而在很多学校得到普及。 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成…

读书笔记007:《伤寒论》- 手少阴心经

手少阴脉起心中&#xff0c;下膈直与小肠通&#xff0c;支者还从肺系走&#xff0c;直上喉咙系目瞳。直者上肺出腋下&#xff0c;臑后肘内少海从&#xff0c;臂内后廉抵掌中&#xff0c;锐骨之端注少冲。多气少血属此经&#xff0c;是动心脾痛难任&#xff0c;渴欲饮水咽干燥&a…

牛客16585 统计单词数

题目描述 一般的文本编辑器都有查找单词的功能&#xff0c;该功能可以快速定位特定单词在文章中的位置&#xff0c;有的还能统计出特定单词在文章中出现的次数。 现在&#xff0c;请你编程实现这一功能&#xff0c;具体要求是&#xff1a;给定一个单词&#xff0c;请你输出它在…

牛客21312 神秘餐馆

题目描述 一家神秘餐馆准备开放N天&#xff0c;牛牛 和 牛妹听到这个消息后&#xff0c;准备尽可能多的一起去吃午饭 餐馆有M道菜&#xff0c;牛牛和牛妹每次来只允许点一道菜&#xff0c;如果在第i天买了第j道菜 那么第i7天也只能买第j道菜 第i天第j道菜的价格为price[i][j] …

牛客21297 手机号码

题目描述 给你一个整数n表示手机号码的位数 再给你m个字符串表示保留的号码,比如911 110 120等 问你一共有多少的手机号码不以保留号码开头 n, m map(int, input().split()) s [] for _ in range(m):s.append(input())sum pow(10, n) num 0for i in range(m):flag Falsefo…

牛客16785 Cantor表

先找到第N个数在第几行第几列&#xff0c;然后根据规律进行计算 N int(input())t 1 while N-t > 0:N N-tt 1if t%2 0:print("%d/%d"%(N,t-N1)) else:print("%d/%d"%(t-N1,N))