kmeans

聚类算法之kmeans算法java版本

允我心安 提交于 2019-12-05 12:09:19
聚类的意思很明确,物以类聚,把类似的事物放在一起。 聚类算法是web智能中很重要的一步,可运用在社交,新闻,电商等各种应用中,我打算专门开个分类讲解聚类各种算法的java版实现。 首先介绍kmeans算法。 kmeans算法的速度很快,性能良好,几乎是应用最广泛的,它需要先指定聚类的个数k,然后根据k值来自动分出k个类别集合。 举个例子,某某教练在得到全队的数据后,想把这些球员自动分成不同的组别,你得问教练需要分成几个组,他回答你k个,ok可以开始了,在解决这个问题之前有必要详细了解自己需要达到的目的:根据教练给出的k值,呈现出k个组,每个组的队员是相似的。 首先,我们创建球员类。 package kmeans; /** * 球员 * * @author 阿飞哥 * */ public class Player { private int id; private String name; private int age; /* 得分 */ @KmeanField private double goal; /* 助攻 */ //@KmeanField private double assists; /* 篮板 */ //@KmeanField private double backboard; /* 抢断 */ //@KmeanField private double steals;

A--K-Means快速聚类

蓝咒 提交于 2019-12-05 06:34:55
聚类概述 皆在理解/探索数据的某些自然结构,商业上最有名的FRM(客户价值评估模型)就是聚类分析的一种数据处理,降维,数据离散压缩,有效的发现最近邻居等。 种类 1.K-Means:K均值是基于原型的,划分的聚类计数,它试图发现用户指定个数(K)的簇,(由质心代表) 2.层次聚类:把数据划分为又层次包含的簇,开始:每个点作为一个单点簇,然后重复的合并两个最相近的簇,知道产生一个包含所有点的簇 3.DBSCAN:这是一种产生划分聚类的基于密度的聚类算法,簇的个数由算法自动决定,低密度区域的点被视为噪声而忽略,因此它不产生完全分类 K-Means 原理:随机放入K个点,然后计算组内每一个点到这K个点的距离,将距离最近的点划分到K1所代表的簇中,划分成初始的K个簇,然后以K个簇为基础,分别求均值更新为质心,之后再计算所有点到质心的距离,更新点的所属簇,再次更新质心,重复迭代直到质心不在发生变化为止。 In [2]: import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt In [3]: iris = pd.read_csv('iris (1).txt', header=None) iris.shape Out[4]: (150, 5) In [6]:

Kmeans聚类算法实现(输出聚类过程,分布图展示)

我是研究僧i 提交于 2019-12-04 15:13:19
Kmeans 聚类算法实现(输出聚类过程,分布图展示) Kmeans聚类算法是聚类算法中最基础最常用的聚类算法,算法很简单,主要是将距离最近的点聚到一起,不断遍历点与簇中心的距离,并不断修正簇中心的位置与簇中的点集合,通过最近距离和遍历次数来控制输出最终的结果。初始的簇中心、遍历次数、最小距离会影响最终的结果。具体的聚类算法过程不详细讲解,网上资料很多,本文主要是java语言实现,1000个点(本文是二维向量,也可以是多维,实现原理和程序一样),程序运行过程中会输出每一次遍历点的簇中心,和簇中包含的点,并将最终结果通过插件在html中显示。 一、Kmeans聚类算法实现步骤 1、将本地文件读取到点集合中: 2、从点集合中随机选取K个簇中心(也可以采取其他方法获取,后续讲解,初始簇中心的选择会影响最终聚类结果): 3、Kmeans聚类。Kmeans聚类的实现主要是通过遍历所有点与簇中心的距离,不断更换簇中心并将点存入距离最近的簇中,距离的计算公式有多种,常用的是欧几里得距离算法。 二、Kmeans聚类算法实现结果 1、运算过程: 2、分布图: 需要源代码的朋友可联系私信或者留言。 来源: oschina 链接: https://my.oschina.net/u/946979/blog/3136812

算法 - k-means++

六眼飞鱼酱① 提交于 2019-12-04 02:03:13
Kmeans++算法 Kmeans++算法,主要可以解决初始中心的选择问题,不可解决k的个数。 Kmeans++主要思想是选择的初始聚类中心要尽量的远。 做法: 1. 在输入的数据点中随机选一个作为第一个聚类中心。 2. 对于所有数据点,计算它与最近的聚类中心的距离D(x) 3. 重新选择一个数据点作为聚类中心,选择原则:D(x)较大的点被选为聚类中心的概率较大。 4. 重复2-3直到选出k个聚类中心。 5. 运行Kmeans算法。 来源: https://www.cnblogs.com/ZeroMZ/p/11827690.html

人工智能必看-Kmeans算法

巧了我就是萌 提交于 2019-12-04 01:29:07
Kmeans聚类算法 推导过程及原理: 假设随机出10个数[1,2],[2,3],[4,5],[7,8],[3,2],[4,5],[45,12],[12,23],[1,5],[7,3] 再从十个数中随机出2个中心点(你想聚几个类就随机出几个中心点)假设中心点为 [3,2],[7,8]将其它的数做欧式距离算法得出两个点的距离,每个数与两个中心点的距离建成一个数列,将数列中最小的距离提出进行索引分类。将每个维度进行平均值计算生成一个新的质点,如果新质点与老质点的距离大于收敛条件,那么重复以上操作。 import random import matplotlib.pyplot as plt import numpy class KMeans(): def __init__(self, k=1): ''' :param k: k代表分类数 ''' self.__k = k self.__data = [] # 存放原始数据 self.__pointCenter = [] # 存放中心点,第一次获得的中心点通过随机方式在__data里随机出来 self.__result = [] for i in range(k): self.__result.append([]) # [[],[],[],[],[]] pass pass def fit(self, data, threshold,

文本聚类——Kmeans

丶灬走出姿态 提交于 2019-12-04 01:28:37
上两篇文章分别用朴素贝叶斯算法和KNN算法对newgroup文本进行了分类测试,本文使用Kmeans算法对文本进行聚类。 1、文本预处理 文本预处理在前面两本文章中已经介绍,此处(略)。 2、文本向量化 package com.datamine.kmeans; import java.io.*; import java.util.*; import java.util.Map.Entry; /** * 计算文档的属性向量,将所有文档向量化 * @author Administrator */ public class ComputeWordsVector { /** * 计算文档的TF-IDF属性向量,返回Map<文件名,<特征词,TF-IDF值>> * @param testSampleDir 处理好的聚类样本测试样例集 * @return 所有测试样例的属性向量构成的map * @throws IOException */ public Map<String,Map<String,Double>> computeTFMultiIDF(String testSampleDir) throws IOException{ String word; Map<String,Map<String,Double>> allTestSampleMap = new TreeMap<String,

Kmeans 的 CUDA 并行实现

寵の児 提交于 2019-12-04 01:28:14
1. Kmeans 步骤 常规的 Kmeans 步骤: 1. 初始化聚类中心 2. 迭代 1. 计算每个样本与聚类中心的欧式距离 2. 根据样本与聚类中心的欧式距离更新每个样本的类标签 3. 根据类标签更新聚类中心 本文中并行化的 Kmeans 的步骤: 初始化每个样本的类标签 迭代 统计每一类的样本和 统计每一类的样本个数 计算每一类的聚类中心:样本和 / 样本个数 计算每个样本与每个聚类中心的欧式距离 根据每个样本与聚类中心的欧式距离更新样本的类标签 如下所示: /* 样本聚类索引的初始化*/ KmeansCUDA_Init_ObjClusterIdx<<<>>>(); for ( int i = 0 ; i < maxKmeansIter; i++) { /* 统计每一类的样本和 */ KmeansCUDA_Update_Cluster<<<>>>(); /* 统计每一类的样本个数 */ KmeansCUDA_Count_objNumInCluster<<<>>>(); /* 聚类中心平均 = 样本和 / 样本个数 */ KmeansCUDA_Scale_Cluster<<<>>>(); /* 计算每个样本与每个聚类中心的欧式距离 */ KmeansCUDA_distOfObjAndCluster<<<>>>(); /* 根据每个样本与聚类中心的欧式距离更新样本的类标签 */

聚类(一)——Kmeans

不羁岁月 提交于 2019-12-04 01:20:46
Clustering 聚类K-means   聚类 是机器学习和数据挖掘领域的主要研究方向之一,它是一种 无监督 学习算法,小编研究生时期的主要研究方向是“ 数据流自适应聚类算法 ”,所以对聚类算法有比较深刻的理解,于是决定开一个专题来写聚类算法,希望可以为入门及研究聚类相关算法的读者带来帮助。聚类可以作为一个单独的任务,用于寻找数据内在分布结构,也经常作为其他学习任务的前驱过程,应用十分广泛。今天,小编就带你探索聚类算法的奥秘,并介绍第一个聚类算法Kmeans。 Q:什么是聚类? A:聚类是按照某一种特定的 标准 (相似性度量,如欧式距离等),把一个数据集分割成不同的类,使得同一个类中的数据对象的相似性尽可能大,不同类之间的差异性也尽可能大,如下图是一个聚类结果的可视化: 聚类有非常广泛的应用,比如根据消费记录发现不同的客户群,对基因表达进行聚类可以研究不同种群中的基因特征,对文本进行聚类可以快速找出相关主题的文章等。 Q:如何度量相似性? A:常用的相似性度量方式主要有以下几种: 欧式距离: Minkowoski距离: 曼哈顿距离: 余弦距离: Jaccard相似系数: 相关系数: Q:常用的聚类算法有哪些? A: 基于划分的聚类:k-means,mean shift 层次聚类:BIRCH 密度聚类:DBSCAN 基于模型的聚类:GMM Affinity propagation

聚类(一)——Kmeans

余生长醉 提交于 2019-12-04 00:38:09
Clustering 聚类K-means   聚类 是机器学习和数据挖掘领域的主要研究方向之一,它是一种 无监督 学习算法,小编研究生时期的主要研究方向是“ 数据流自适应聚类算法 ”,所以对聚类算法有比较深刻的理解,于是决定开一个专题来写聚类算法,希望可以为入门及研究聚类相关算法的读者带来帮助。聚类可以作为一个单独的任务,用于寻找数据内在分布结构,也经常作为其他学习任务的前驱过程,应用十分广泛。今天,小编就带你探索聚类算法的奥秘,并介绍第一个聚类算法Kmeans。 Q:什么是聚类? A:聚类是按照某一种特定的 标准 (相似性度量,如欧式距离等),把一个数据集分割成不同的类,使得同一个类中的数据对象的相似性尽可能大,不同类之间的差异性也尽可能大,如下图是一个聚类结果的可视化: 聚类有非常广泛的应用,比如根据消费记录发现不同的客户群,对基因表达进行聚类可以研究不同种群中的基因特征,对文本进行聚类可以快速找出相关主题的文章等。 Q:如何度量相似性? A:常用的相似性度量方式主要有以下几种: 欧式距离: Minkowoski距离: 曼哈顿距离: 余弦距离: Jaccard相似系数: 相关系数: Q:常用的聚类算法有哪些? A: 基于划分的聚类:k-means,mean shift 层次聚类:BIRCH 密度聚类:DBSCAN 基于模型的聚类:GMM Affinity propagation

《机器学习实战》 ch10 KMeans学习记录

别说谁变了你拦得住时间么 提交于 2019-12-03 20:35:57
我终于快把这本书看完了!!!开心! 前面学习到的算法都属于监督学习,数据都会自带标签,而接下来我们会转向无监督学习,目标变量事先不存在,无监督学习在现实生活中应用更为广泛。首先就是聚类和K-Means算法。 这一部分可以看看吴恩达的视频,感觉讲的挺清楚的,当然这本书也不错。 聚类是将相似的对象归到同一簇中,簇内的对象越相似聚类的效果越好。聚类和分类最大的不同是:分类的目标事先已经知道,但聚类不一样。聚类分析试图将相似对象归入同一簇,不相似的对象归入不同的簇,而是否相似则取决于相似度的计算方法。 K-Means是聚类算法的一种,可以发现K个不同的簇,每个簇的中心采用簇中算含数值的均值计算而成。 (1)K-Means聚类方法 K-Means的算法思想如下: 随机选择K个点作为起始质心 当任意一个点的簇分配结果改变时: 对数据集中的每个数据点: 对每个质心: 计算质心与数据点之间的距离 将数据点分配到距离其最近的簇 对每一个簇,计算簇中所有点的均值并将其作为质心 这里的距离计算方法选择欧式距离 K-Means实现起来首先需要一些辅助函数,具体代码如下: from numpy import * def loadDataSet(fileName): #general function to parse tab -delimited floats dataMat = [] #assume