k-means算法

K-means聚类(一)

拜拜、爱过 提交于 2019-11-30 06:26:05
我们的问题是:怎么给一堆数据分类? 首先,每一类都叫一个簇(Cluster),如何才能算作是同一类能? 我们有K-means聚类,DBSCAN(Density-Based Spatial Clustering of Application with Noise),hierarchical clustering等等这些聚类算法,这些算法区分同一类的方式都不同,比如DBSCAN,它是以一定的密度进行传播,将传播到的点都聚成一类,在某些场景,比如簇与簇之间有明显分隔的,DBSCAN显然要比k-means好。 下面是用k-means和DBSCAN划分一个笑脸的不同效果。 k-means算法 DBSCAN算法 不过对于均匀分布的数据,指定簇个数的k-means就要优于依靠密度发展的DBSCAN了。 k-means算法 DBSCAN算法 这些动画的演示你可在https://www.naftaliharris.com/blog/visualizing-k-means-clustering/上做到 使用pycharm手写k-means聚类算法 思路: ①随机生成1000个二维坐标的样本点 ②指定划分成5类 ③确定收敛阈值为0.2 ④从1000个样本点中随机选出5个样本点,作为5个簇的中心 ⑤每个中心为一个Cluster ⑥遍历1000个点,分别计算它们到5个中心点之间的距离,对每个点

k-means 聚类的简单理解

落花浮王杯 提交于 2019-11-29 17:09:06
k-means 聚类 聚类算法有很多种,K-Means 是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。 K-Means算法是一种很典型的基于距离的聚类算法,采用距离作为相似性的评价标准,认为两个对象的距离越近,那么相似度就越大。把簇作为距离靠近的对象组成的,最终得到的是紧凑和独立的簇。对于聚类分析来说,用于发现数据对象之间的关系。组内的相似性越大,组间的相似性越小,可以说效果越好。K个初始类聚类中心点的选取对聚类结果具有比较大的影响。在算法的第一步中随机的选取了K个初始聚类的中心,代表了一个簇。在每次迭代的过程中,对数据集中剩余的每个对象。根据每个簇中心的距离将每个对象重新赋给最近的族。 算法框架: 给定大小为n的数据集,令O=l,选取k个初始聚类中心 Zj(O),j=1,2,3,...,k,O代表不同迭代轮数的聚类中心 计算每个样本数据对象与聚合中心的距离D(xi,Zj(O)),i=1,2,3,…,并分类 令O=O+1,计算新的聚类中心和误差平方和准则f(目标函数)值: 判断:若If(O+1)-f(O)I<theta(f收敛)或者对象无类别变化,则算法结束,否则,O=O+1,返回2)步; 来源: https://blog.csdn.net/h284306976/article

Python Monte Carlo K-Means聚类实战研究

放肆的年华 提交于 2019-11-29 16:23:46
原文链接: http://tecdat.cn/?p=6689 在本文中,188个国家基于这19个社会经济指标聚集在一起,使用Python实现的蒙特卡罗K-Means聚类算法。通过将类似国家分组在一起并对其进行概括,聚类可以帮助减少识别有吸引力的投资机会所需的工作量。 在讨论聚类国家和得出结论的结果之前,本文详细介绍了距离度量,聚类质量测量,聚类算法,K-Means聚类算法。 聚类理论 - 相似与距离的度量 聚类是将一组异构(不同)对象划分为同类(相似)对象的子集的过程。聚类分析的核心是假设给定任何两个对象,您可以量化这些对象之间的相似性或不相似性。在连续搜索空间中距离测量相似性。 下面我写了关于连续搜索空间的相似性度量。对于每个我都包含公式(给定两个向量, 和 q )和Python代码。用于编写本文的所有Python代码都可用。 聚类理论 - 聚类算法类 聚类算法的两个主要类别是 分层聚类和分区聚类 。分层聚类通过将小聚类合并为较大的聚类或将较大的聚类分成较小的聚类来形成聚类。分区聚类通过将输入数据集划分为互斥的子集来形成聚类。 分层和分区聚类之间的差异主要与所需的输入有关。分层聚类仅需要相似性度量,而分区聚类可能需要许多额外的输入,最常见的是簇的数量。一般而言,分层聚类算法也更适合于分类数据。ķķ 分层聚类 有两种类型的层次聚类,即 凝聚聚类 和 分裂聚类

k-means聚类分析范例程序

无人久伴 提交于 2019-11-29 12:05:29
K-Means聚类算法原理参考以下链接: https://www.cnblogs.com/pinard/p/6164214.html 2. 传统K-Means算法流程     在上一节我们对K-Means的原理做了初步的探讨,这里我们对K-Means的算法做一个总结。     首先我们看看K-Means算法的一些要点。     1)对于K-Means算法,首先要注意的是k值的选择,一般来说,我们会根据对数据的先验经验选择一个合适的k值,如果没有什么先验知识,则可以通过交叉验证选择一个合适的k值。     2)在确定了k的个数后,我们需要选择k个初始化的质心,就像上图b中的随机质心。由于我们是启发式方法,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心,最好这些质心不能太近。     好了,现在我们来总结下传统的K-Means算法流程。      输入是样本集 D = { x 1 , x 2 , . . . x m } ,聚类的簇树k,最大迭代次数N     输出是簇划分 C = { C 1 , C 2 , . . . C k }       1) 从数据集D中随机选择k个样本作为初始的k个质心向量: { μ 1 , μ 2 , . . . , μ k }     2)对于n=1,2,...,N       a) 将簇划分C初始化为 C

KNN与K-MEANS的区别

冷暖自知 提交于 2019-11-28 21:55:55
1. k-means聚类算法过程与原理 k-means算法(k-均值聚类算法)是一种基本的已知聚类类别数的划分算法。它是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。它是使用欧氏距离度量的(简单理解就是两点间直线距离,欧氏距离只是将这个距离定义更加规范化,扩展到N维而已)。它可以处理大数据集,且高效。聚类结果是划分为k类的k个数据集。根据聚类结果的表达方式又可以分为硬 k-means(H CM)算法、模糊k-means算法(F CM)和概率k-means算法(P CM)。 1.1.基本思想 它是基于给定的聚类目标函数,算法采用迭代更新的方法,每一次迭代过程都是向目标函数减小的方向进行,最终聚类结果使得目标函数取得极小值,达到较好的分类效果 1.2 原理 原始的k-means算法首先随机选取k个点作为初始聚类中心,然后计算各个数据对 象到各聚类中心的距离,把数据对象归到离它最近的那个聚类中心所在的类; 调整后的新类计算新的聚类中心,如果相邻两次的聚类中心没有任何变化,说明 数据对象调整结束,聚类准则函数f已经收敛。在每次迭 代中都要考察每个样本的分类是否正确,若不正确,就要调整。在全部数据调整 完后,再修改聚类中心,进入下一次迭代。如果在一次迭代算法中,所有的数据 对象被正确分类,则不会有调整,聚类中心也不会有任何变化

KNN和K-means的区别

帅比萌擦擦* 提交于 2019-11-28 12:10:01
knn 算法思路: 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 k近邻模型的三个基本要素: k值的选择:k值的选择会对结果产生重大影响。较小的k值可以减少近似误差,但是会增加估计误差;较大的k值可以减小估计误差,但是会增加近似误差。一般而言,通常采用交叉验证法来选取最优的k值。 距离度量:距离反映了特征空间中两个实例的相似程度。可以采用欧氏距离、曼哈顿距离等。 分类决策规则:往往采用多数表决。 k-means 算法步骤: 1. 从n个数据中随机选择 k 个对象作为初始聚类中心; 2. 根据每个聚类对象的均值(中心对象),计算每个数据点与这些中心对象的距离;并根据最小距离准则,重新对数据进行划分; 3. 重新计算每个有变化的聚类簇的均值,选择与均值距离最小的数据作为中心对象; 4. 循环步骤2和3,直到每个聚类簇不再发生变化为止。 k-means方法的基本要素: k值的选择:也就是类别的确定,与K近邻中k值的确定方法类似。 距离度量:可以采用欧氏距离、曼哈顿距离等。 KNN K-Means 1.KNN是分类算法 2.监督学习 3.喂给它的数据集是带label的数据,已经是完全正确的数据 1.K-Means是聚类算法 2.非监督学习 3.喂给它的数据集是无label的数据,是杂乱无章的,经过聚类后才变得有点顺序

8.最佳电影聚类分析

拈花ヽ惹草 提交于 2019-11-27 08:17:41
8.最佳电影聚类分析 将使用电影简介作为原始数据,将总共 100 部流行电影进行聚类分析。IMDb 也称为互联网电影数据库(www.imdb.com),是一个在线的数据库,它提供有关电影、电子游戏和电视节目的大量详细信息。它聚集了电影和电视节目的评论以及简介,并有几个精选影片清单。原始数据地址 https://www.imdb.com/list/ls055592025/ 上获取名为 “100部最佳影片(中级清单),可在 https://github.com/brandomr/document_cluster 处进行下载。 解析并清洗了数据,并作为原始数据中缺少简介的几部电影添加了影片介绍。这些简介和电影描述来自维基百科。数据解析完成后,将它们存储在数据框中,并将其保存至 movie_data.csv 文件中: $ wget https: //mirror .shileizcc.com /wiki_Resources/python/text_analysis/movie_data .csv 将在聚类分析中加载并使用该文件中的数据,首先,需要加载并查看电影数据的内容,如下代码所示: import pandas as pd import numpy as np movie_data = pd.read_csv( 'movie_data.csv' ) print (movie_data

K-Means

江枫思渺然 提交于 2019-11-26 23:19:08
利用临近信息来标注类别的。是聚类算法中最简单的、搞笑的。 核心思想:指定k个初始质心作为聚类的类别,重复迭代值算法收敛。对于欧式空间的样本,误差平方和作为目标函数。 一、优缺点 优点:简单、快速,效果好,适用于高维; 缺点:很容易受到初始质心的影响,而且初始质心也很难选择。 二、k如何选取? 1、手肘法 随着k的增加,样本划分的越来越细,越来越接近真实类别数,这个时候误差下降的速度会平缓,当等于真实的类别数时,此时的误差是最小的,再继续增加k的时候,由于越来越偏离真实类别墅,误差会增加,此时这个拐弯的地方就是最佳的k值。 2、轮廓系数 簇内不相似度:样本到同簇内其他样本的平均距离,越小说明越应该被分到这个簇; 簇间不相似度:样本到其他簇内样本的平均距离,越大说明越不属于其他簇; 计算簇内不相似度和簇见不相似度,通过公式得到每个样本的轮廓系数: 轮廓系数范围在[-1,1]之间,越大越合理; 等于0说明在边界上; 所有样本的轮廓系数均值作为聚类结果的轮廓系数,用来衡量聚类结果的好坏。 三、怎么找这k个中心点? 选择彼此距离最远的k个点。 四、停止条件? 迭代次数,聚类中心移动的距离阈值。 五、如何处理空聚类? 找一个分布最散的簇,找一个替补质心,就能消除这个空簇。重复多次,如果噪点或者孤立点还很多要考虑更换算法,例如密度算法。 六、如何快速收敛超大的kmeans? 前m次迭代正常进行

k-means 算法

落爺英雄遲暮 提交于 2019-11-26 14:35:27
1. scikit-learn中的K-Means类     在scikit-learn中,包括两个K-Means的算法,:       (1)传统的K-Means算法,对应的类是KMeans。          (2)基于采样的Mini Batch K-Means算法,对应的类是MiniBatchKMeans。     一般来说,K-Means的算法调参是比较简单的,虽然KMeans类和MiniBatchKMeans类可以选择的参数并不少,但是大多不太需要去调参。:          (1)用KMeans,一般要注意的仅仅就是k值的选择,即参数n_clusters;          (2)用MiniBatchKMeans,一般注意n_clusters和batch_size(即采样的数量) 2. KMeans类、MiniBatchKMeans类主要参数      1、KMeans类的主要参数有:     1) n_clusters : 即我们的k值,一般需要多试一些值以获得较好的聚类效果。k值好坏的评估标准在下面会讲。     2) max_iter : 最大的迭代次数,一般如果是凸数据集的话可以不管这个值,如果数据集不是凸的,可能很难收敛,此时可以指定最大的迭代次数让算法可以及时退出循环。     3) n_init: 用不同的初始化质心运行算法的次数。由于K

一文详尽解释K-means算法

社会主义新天地 提交于 2019-11-26 11:04:53
K-means 是我们最常用的基于距离的聚类算法,其认为两个目标的距离越近,相似度越大。 算法 1.1 牧师-村民模型 K-means 有一个著名的解释:牧师—村民模型: 有四个牧师去郊区布道,一开始牧师们随意选了几个布道点,并且把这几个布道点的情况公告给了郊区所有的村民,于是每个村民到离自己家最近的布道点去听课。 听课之后,大家觉得距离太远了,于是每个牧师统计了一下自己的课上所有的村民的地址,搬到了所有地址的中心地带,并且在海报上更新了自己的布道点的位置。 牧师每一次移动不可能离所有人都更近,有的人发现A牧师移动以后自己还不如去B牧师处听课更近,于是每个村民又去了离自己最近的布道点…… 就这样,牧师每个礼拜更新自己的位置,村民根据自己的情况选择布道点,最终稳定了下来。 我们可以看到该牧师的目的是为了让每个村民到其最近中心点的距离和最小。 1.2 算法步骤 所以 K-means 的算法步骤为: 选择初始化的 k 个样本作为初始聚类中心 ; 针对数据集中每个样本 计算它到 k 个聚类中心的距离并将其分到距离最小的聚类中心所对应的类中; 针对每个类别 ,重新计算它的聚类中心 (即属于该类的所有样本的质心); 重复上面 2 3 两步操作,直到达到某个中止条件(迭代次数、最小误差变化等)。 1.3 复杂度 我们先看下伪代码: 获取数据 n 个 m 维的数据 随机生成 K 个 m 维的点