k-means

K-Means算法原理及numpy实现

匿名 (未验证) 提交于 2019-12-03 00:30:01
K-Means应该是大多数人接触到的第一个聚类算法或无监督学习算法,其算法原理简单,Python实现(使用sklearn包)也很方便。同时K-Means算法对于高维聚类(在维度没有达到几十维的情况下)也非常快速有效。我之前也是使用sklearn自带的kMeans包进行数据聚类的,但随着实验的深入,也发现了使用算法库带来的诸多不便,如不能自定义距离计算公式等。而网上的一些完全基于numpy编写的K-Means代码,由于受其自身开源性和可扩展性的影响,导致代码冗长繁杂,对初学者并不十分友好,于是动手实现了一下K-Means,力求简单易懂,同时保持一定的可扩展性,在此与大家分享。 首先简单介绍一些K-Means的原理:字面上,K即原始数据最终被聚为K类或分为K类,Means即均值点。K-Means的核心就是将一堆数据聚集为K个簇,每个簇中都有一个中心点称为均值点,簇中所有点到该簇的均值点的距离都较到其他簇的均值点更近。如下图是一个K=4的聚类示意图,每个点都是到自己所在的簇的均值点更近,而这个均值点可以是原始数据中的点,也可以是一个不存在的点,即不属于原始数据集中的点。 K-Means的算法流程下图所示,这里使用的是周志华教授《机器学习》一书中的插图。用文字描述为: 首先确定K值(即你想把数据聚为几类,K值是K-Means算法中唯一的参数); 从原始数据集中随机选择K个点作为初始均值点

K-MEANS算法及sklearn实现

匿名 (未验证) 提交于 2019-12-03 00:13:02
K-MEANS算法 聚类概念: 1.无监督问题:我们手里没有标签 2.聚类:相似的东西分到一组 3.难点:如何评估,如何调参 4.要得到簇的个数,需要指定K值 5.质心:均值,即向量各维取平均即可 6.距离的度量:常用欧几里得距离和余弦相似度 7.优化目标:min$$ min \sum_{i=0}^k \sum_{C_j=0} dist(c_i,x)^2$$ 来源:博客园 作者: 刘文华 链接:https://www.cnblogs.com/liuwenhua/p/11618909.html

机器学习K-Means使用报错TypeError: unsupported operand type(s) for -: 'map' and 'map'

匿名 (未验证) 提交于 2019-12-03 00:11:01
最近使用kmeans做一个二维数据点的聚类,发现网上的代码,要么是自己写的,各种报错,连个txt文件都读取出错,当然这里不排除可能有python版本的原因,要么是sklearn进行调包的,当然这一点,也可以去网上找到一堆例子,但是很少讲很详细的,能够拿来即用的。本文便是使用网上某博客的代码,是手写的,但是会报这个错 TypeError: unsupported operand type(s) for -: 'map' and 'map' ,以及对应的解决办法。 TypeError: unsupported operand type(s) for -: ‘map’ and ‘map’ 书中源代码如下: from numpy import * def loadDataSet ( fileName ): dataMat = [] fr = open ( fileName ) for line in fr . readlines (): curLine = line . strip (). split ( '\t' ) fltLine = map ( float , curLine ) dataMat . append ( fltLine ) return dataMat def distEclud ( vecA , vecB ): return sqrt ( sum ( power (

K-means聚类算法

匿名 (未验证) 提交于 2019-12-02 23:59:01
K-means聚类算法简介 K-means算法是典型的基于距离的聚类算法,即对各个样本集采用距离作为相似性的评价指标,若两个样本集K个簇。让簇内的点尽量紧密的连在一起,且让簇间的距离尽量的大。最后把得到紧凑且独立的簇作为最终的目标。 二、相关知识点 1、距离度量:不同的距离量度会对距离的结果产生影响,常见的距离量度公式有很多。在该算法中一般采用欧几里得公式: 但是欧几里得距离度量会受指标不同单位刻度的影响,所以一般需要先进行标准化。距离越大,个体间差异越大; 2、聚类分析:聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好。 3、簇类型:用不同的簇类型划分数据的结果是不同的,簇的类型有很多种。如: K-means算法过程 1)随机选取K个初始质心 2)分别计算所有样本到这K个质心的距离 3)如果样本离某质心Ki最近,那么这个样本属于Ki点群;如果到多个质心的距离相等,则可划分到任意组中 4)按距离对所有样本分完组之后,计算每个组的均值(最简单的方法就是求样本每个维度的平均值),作为新的质心 5)重复(2)(3)(4)直到新的质心和原质心相等,算法结束 如上图所示,图a表达了初始的样本集,假设质心k=2。(×和绿色×表示两个不同的质心b中随机选择两个k类所对应的类别质心,即图中的红色质心和绿c所示

K-Means算法及代码实现

匿名 (未验证) 提交于 2019-12-02 23:59:01
1.K-Means算法 K-Means算法,也被称为K-平均或K-均值算法,是一种广泛使用的聚类算法。K-Means算法是聚焦于相似的无监督的算法,以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们的相似性越高,则它们越有可能在同一个类簇。之所以被称为K-Means是因为它可以发现k个不同的簇,且每个簇的中心采用簇中所含值的均值计算而成。 2.聚类的概念 聚类,则是给定的样本没有事先确定类别,根据自己需要,确定类别数量,再把样本归到不同的类别里面。也就是说,同样是垃圾分类的例子,你给一堆垃圾,我可以根据可回收、不可回收分为聚类为两堆;也可以根据可回收、不可回收、厨余垃圾聚类为三堆。而其中聚类为同一堆的条件,我们可以理解为垃圾间的相似程度。 3.k-means算法思想 1.从数据集中随机选取k个数据对象作为k个簇的初始聚类中心点,且每个数据对象对应于一个簇; 2.将剩余的数据对象根据其与各个簇中心点的距离,分别指派到离其距离最近的簇中; 3.更新每个簇的聚类中心(即重新计算各个簇内所有对象的平均值,重新分配各个数据对象); 4.直到准则函数收敛或者聚类中心不再变化,否则转到step3。 4. 代码实现 运行结果: 来源:博客园 作者: MangoWu 链接:https://www.cnblogs.com/wukuanglin/p/11488042.html

K-means聚类算法及c语言实现

匿名 (未验证) 提交于 2019-12-02 23:59:01
1. 概述 K-means聚类算法也称k均值聚类算法,是集简单和经典于一身的基于距离的聚类算法。它采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为类簇是由距离靠近的对象组成的,因此把得到 紧凑且独立的簇作为最终目标。 2. 算法核心思想 K-means聚类算法是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。 3. 算法实现步骤 1、首先确定一个k值,即我们希望将数据集经过聚类得到k个集合。 2、从数据集中随机选择k个数据点作为质心。 3、对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合。 4、把所有数据归好集合后,一共有k个集合。然后重新计算每个集合的质心。 5、如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),我们可以认为聚类已经达到期望的结果,算法终止。

一维数组的 K-Means 聚类算法理解

匿名 (未验证) 提交于 2019-12-02 23:51:01
一、背景 煤矿地磅产生了一系列数据: 我想从这些数据中,取出最能反映当前车辆重量的数据(有很多数据是车辆上磅过程中产生的数据)。我于是想到了聚类算法 KMeans ,该算法思想比较简单。 二、算法步骤 1、从样本中随机取出k个值,作为初始中心 2、以k个中心划分这些数据,分为k个组 3、重新计算出每个组的中心,作为新中心 4、如果初始中心和新中心不相等,则把新中心作为初始中心,重复2,3。反之,结束 注意: 1、我没有用严格的算法定义,怕不好理解 2、KMeans善于处理球形数据,因此随机取k个质心,每个质心吸引离它最近的数据 3、由于质心的取值是不科学的,所以需要不断地计算调整,直到质心名副其实 三、算法分析及特点 1、从算法步骤当中可以看出有两个问题,需要解决: 2、解决上面两个问题,因场景和要求不同而有不同的小算法,由于我的数据是一维的,而不是点,所以可以简单处理: 3、此算法有两个缺点: 4、优点:简单易理解和上手 四、实现 public class KMeans { /* * 聚类函数主体。 * 针对一维 decimal 数组。指定聚类数目 k。 * 将数据聚成 k 类。 */ public static decimal[][] cluster(decimal[] p, int k) { // 存放聚类旧的聚类中心 decimal[] c = new decimal[k]

算法实现一:K-means

匿名 (未验证) 提交于 2019-12-02 23:43:01
k-means基础实现 __author__ = 'Administrator' from numpy import * import time import matplotlib . pyplot as plt # 计算距离(欧式) def euclDistance ( vector1 , vector2 ) : return sqrt ( sum ( power ( vector2 - vector1 , 2 ) ) ) # 初始中心点(随机) def initCentroids ( dataSet , k ) : numSamples , dim = dataSet . shape centroids = zeros ( ( k , dim ) ) for i in range ( k ) : index = int ( random . uniform ( 0 , numSamples ) ) centroids [ i , : ] = dataSet [ index , : ] return centroids def loaddata ( name ) : dataMat = [ ] fe = open ( name , 'r' ) for line in fe : strs = line . restrip ( ) . split ( ',' ) flt = map

K-Means算法-聚类

匿名 (未验证) 提交于 2019-12-02 23:42:01
概述: 1.聚类: 聚类是一种无监督的学习,它将相似的对象归到同一簇中。聚类的方法几乎可以应用所有对象,簇内的对象越相似,聚类的效果就越好。 聚类和分类最大的不同在于,分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来,所以,聚类有时也叫无监督学习 。聚类分析试图将相似的对象归入同一簇,将不相似的对象归为不同簇,那么,显然需要一种合适的相似度计算方法,我们已知的有很多相似度的计算方法,比如欧氏距离,余弦距离,汉明距离等。事实上,我们应该根据具体的应用来选取合适的相似度计算方法。 2.K-Means的聚类:K-means算法中的k表示的是聚类为k个簇,means代表取每一个聚类中数据值的均值作为该簇的中心,或者称为质心,即用每一个的类的质心对该簇进行描述 K-means算法虽然比较容易实现,但是其可能收敛到局部最优解,且在大规模数据集上收敛速度相对较慢 3.K-means算法的工作流程 1)首先,随机确定k个初始点的质心; 2)然后将数据集中的每一个点分配到一个簇中(即为每一个点找到距其最近的质心,并将其分配给该质心所对应的簇); 3)该步完成后,每一个簇的质心更新为该簇所有点的平均值 伪代码: 创建 k 个点作为起始质心,可以随机选择(位于数据边界内)    当任意一个点的簇分配结果发生改变时      对数据集中每一个点    

常用数据挖掘算法-聚类

匿名 (未验证) 提交于 2019-12-02 23:38:02
概述 数据挖掘常又被称为价值发现或者是数据勘探,一般是指从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的,人们事先不知道的、但又是潜在有用的信息和知识的过程。它是一种大量数据的高级处理方式。 常用的数据挖掘算法分为四大类:聚类、分类、关联以及推荐算法。另外还有一个预处理:降维算法 聚类算法 聚类是在一群未知类别标号的样本上,用某种算法将他们分成若干类别,这是一种无监督学习。其主要研究数据间逻辑上或物理上的相互关系。由聚类所组成的簇是一组数据对象的集合,这些对象与同一簇中的对象彼此类似,与其他簇中的对象相异。其分析结果不仅可以揭示数据间的内在联系与区别,还可以为进一步的数据分析与知识发现提供重要依据。聚类算法的聚类效果如图所示 常用的聚类算法由k-means聚类算法、Canopy 聚类算法、FCM(Fuzzy C-Means,模糊C 均值)聚类算法、DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)聚类算法、LDA(Latent Dirichlet Allocation,隐含狄利克雷分配)算法、层次聚类算法、基于EM(Expectation-Maximization,最大期望)的聚类算法等。以下将对上述聚类算法从算法的简介