kmeans

Kmeans:利用Kmeans实现对多个点进行自动分类—Jason niu

浪尽此生 提交于 2019-12-26 09:41:57
import numpy as np def kmeans(X, k, maxIt): numPoints, numDim = X.shape dataSet = np.zeros((numPoints, numDim + 1)) dataSet[:, :-1] = X centroids = dataSet[np.random.randint(numPoints, size = k), :] centroids[:, -1] = range(1, k +1) iterations = 0 oldCentroids = None while not shouldStop(oldCentroids, centroids, iterations, maxIt): print ("iteration: \n", iterations) print ("dataSet: \n", dataSet) print ("centroids: \n", centroids) oldCentroids = np.copy(centroids) iterations += 1 updateLabels(dataSet, centroids) centroids = getCentroids(dataSet, k) return dataSet def shouldStop(oldCentroids,

KMeans相关问题

爷,独闯天下 提交于 2019-12-15 14:42:50
文章目录 K-means k-means 聚类的原理 K-Means的优缺点及对应的改进 用 EM 算法推导解释 Kmeans KMeans的算法伪代码 KMeans算法的收敛 Kmeans 算法 K 怎么设置、适用什么样数据集 EM算法 tensorflow实现KMeans K-means k-means 聚类的原理 对于给定的样本集,按照样本之间的距离大小,将样本集划分成K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。 目标是最小化平方误差。定义样本与其所属类的中心之间的距离的总和最小 E = ∑ l = 1 K ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 E = \sum_{l = 1}^K \sum_{x \in C_i} ||x - \mu_i||^2 E = l = 1 ∑ K ​ x ∈ C i ​ ∑ ​ ∣ ∣ x − μ i ​ ∣ ∣ 2 其中 μ i \mu_i μ i ​ 是簇 C i C_i C i ​ 的均值或者中心,有时也称质心,表达式为: μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_i=\frac{1}{|C_i|}\sum_{x \in C_i}x μ i ​ = ∣ C i ​ ∣ 1 ​ ∑ x ∈ C i ​ ​ x K-Means的优缺点及对应的改进 优点: 1) 原理比较简单,实现比较容易

机器学习-Kmeans聚类

微笑、不失礼 提交于 2019-12-09 16:23:28
Kmeans聚类 简介 之前提到的算法大多数都是监督学习算法,主要代表是分类和回归问题,但是很多时候想要从数据中发现一些潜在的规律,而数据是没有指标驱动的,即没有标签,这种自学习算法称为非监督学习(Unsupervised Learning)。非监督学习算法的典型代表是聚类(Clustering),分类问题是给定x和y,要求找到一种假设拟合数据的分布,将不同的类别区分开,而聚类问题则是只有x,从中发现一些规律将样本分成区别较大的多个簇。聚类的应用较分类在业界更为广泛,因为标注成本大且易错,最为典型的聚类算法是Kmeans算法。 原理 K-means是一种给定聚类数目k的聚类算法,它通过迭代不断调整聚类中心达到聚类的目的,由于聚类中心的调整是基于当前簇的均值决定的,故叫做k均值聚类算法。下面以样本都是二维特征的数据为例(方便可视化),详述算法思路。 随机初始化K个聚类中心。 计算每个样本点到聚类中心的距离(一般欧式距离),样本点离哪个聚类中心最近则将该样本划分到对应簇中; 计算每个簇的各特征均值(本例即x和y坐标的均值),将该簇的聚类中心调整为均值位置; 重复上述2和3步,直到聚类中心稳定不变动。 上述的Kmeans算法存在一些问题,如k个聚类中心的初始化,一旦出现极端情况将很难更新(所有样本离某个中心都是最近,其他中心无法形成簇)。 首先来看Kmeans的优化目标,记 c ( i

小白机器学习基础算法学习必经之路(下)

ぃ、小莉子 提交于 2019-12-07 14:03:54
我们在上文 小白机器学习基础算法学习必经之路(上) 简述了线性回归 (Linear Regression) ,逻辑回归 (Logistic Regression) ,决策树 (Decision Tree) ,支持向量机(SVM) ,朴素贝叶斯 (Naive Bayes) 现在我们接着继续学习另五个算法: K邻近算法(KNN) k-NN算法是最简单的分类算法,主要的思想是计算待分类样本与训练样本之间的差异性,并将差异按照由小到大排序,选出前面K个差异最小的类别,并统计在K个中类别出现次数最多的类别为最相似的类,最终将待分类样本分到最相似的训练样本的类中。与投票(Vote)的机制类似。 k-近邻算法是基于实例的学习,使用算法时我们必须有接近实际数据的训练样本数据。 优点:精度高,对异常值不敏感,无数据输入假定 缺点:时间和空间复杂度高,无法获取样本特征 数据:数值型和标称型 k-均值算法(K-means) KMeans算法是典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且**的簇作为最终目标。 K个初始聚类中心点的选取对聚类结果具有较大的影响,因为在该算法第一步中是随机地选取任意k个对象作为初始聚类中心,初始地代表一个簇。该算法在每次迭代中对数据集中剩余的每个对象

隐马尔科夫(HMM)的Matlab实现

偶尔善良 提交于 2019-12-06 14:36:26
说明: 1. 本文实现了PRML一书第13章的隐马尔科夫(HMM)算法,并与K-means聚类、GMM模型聚类进行了对比。当然,HMM的用处远不止是聚类; 2. 非职业码农,代码质量不高,变量命名也不规范,凑合着看吧,不好意思。 隐马尔科夫模型(HMM)是我一直想弄清楚的一种模型。可能是上学时随机过程只考了60分,心有不甘。 模型和算法本身不赘述了,详见PRML第13章。直接看结果,把隐变量z作为类别编号,HMM可用于聚类。这里可以看到,由于HMM利用了序列跳转信息(也就是马尔科夫特性),可以获得比混合高斯模型(GMM,http://blog.csdn.net/foreseerwang/article/details/75222522)更为准确的结果。 Matlab输出: **************************************************************** **************************************************************** K-means聚类计算,结果将作为HMM初始值...... K-means聚类算法结束 **************************************************************** GMM聚类计算中......

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

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

【大数据分析常用算法】6.K均值

二次信任 提交于 2019-12-06 08:19:40
简介 1、K-均值距离函数 1.1、欧式距离 欧式距离的计算公式 $$ d(x,y) = \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2 + ... + (x_n - y_n)^2} $$ 其中,x,y分别代表两个点,同时,两个点具有相同的维度:n。$x_1,x_2,...,x_n$代表点x的每个维度的值,$y_1,y_2,...,y_n$代表点y的各个维度的值。 1.2、欧氏距离的性质 假设有$p_1,p_2,p_{k}$3个点。 $d(p_1,p_2) \ge 0$ $d(p_i,p_i) = 0$ $d(p_i,p_j) = d(p_j,p_i)$ $d(p_i,p_j) \le d(p_i,p_k) + d(p_k,p_j)$ 最后一个性质也说明了一个很常见的现象:两点间的距离,线段最短。 1.3、源码实现 import java.util.List; /** * 欧式距离计算 */ public class EuclideanDistance { public static double caculate(List<Double> p1, List<Double> p2){ double sum = 0.0; int length = p1.size(); for (int i = 0; i < length; i++) { sum += Math

python异常值(outlier)检测实战:KMeans + PCA + IsolationForest + SVM + EllipticEnvelope

孤街醉人 提交于 2019-12-06 05:36:20
机器学习_深度学习_入门经典(博主永久免费教学视频系列) https://study.163.com/course/courseMain.htm?courseId=1006390023&share=2&shareId=400000000398149 转载 https://blog.csdn.net/weixin_42608414/article/details/89092501 作者:Susan Li ,原文: https://towardsdatascience.com/time-series-of-price-anomaly-detection-13586cd5ff46 略有增删 异常值检测(outlier)是一种数据挖掘过程,用于确定数据集中发现的异常值并确定其出现的详细信息。当前自动异常检测至关重要,因为大量数据无法手动标记异常值。 自动异常检测具有广泛的应用,例如信用卡欺诈检测,系统健康监测,故障检测以及传感器网络中的事件检测系统等。今天我们就通过使用python来实现异常值的自动检测系统的实战开发。我们将会使用以下技术来实现异常值检测: KMeans PCA IsolationForest SVM EllipticEnvelope 数据 我们的数据kaggle你可以在这里 下载 。Expedia是全球最大的在线旅行社(OTA,类似我们的携程网)

KMeans聚类算法

孤街浪徒 提交于 2019-12-06 05:02:20
简介 聚类是一种无监督的机器学习任务,它可以自动将数据划分成类cluster。 聚类 给事物打标签,寻找同一组内的个体之间的一些潜在的相似模式。力图找到数据的自然分组kmeans 因此聚类分组不需要提前被告知所划分的组应该是什么样的。 因为我们甚至可能都不知道我们在寻找什么,所以聚类是用于知识发现而不是预测 理解 聚类原则是一个组内的记录彼此必须非常相似,而与该组之外的记录截然不同。 所有聚类做的就是遍历所有数据然后找到这些相似性 使用距离来分配和更新类 由以上一系列图可知, 该区域被划分为三个cluster(簇), 当有新的单位被添加到该区域时, 根据该点到簇中心的距离将该单位进行划分并优化。 距离测度 欧氏距离测度(EuclideanDistanceMeasure) 平方欧氏距离测度(SquaredEuclideanDistanceMeasure) 曼哈顿距离测度(ManhattanDistanceMeasure) 图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。 曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|x i -x j |+|y i -y j |。 对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离,因此

pyhanlp 文本聚类详细介绍

半腔热情 提交于 2019-12-05 12:09:34
文本聚类 文本聚类简单点的来说就是将文本视作一个样本,在其上面进行聚类操作。但是与我们机器学习中常用的聚类操作不同之处在于。 我们的聚类对象不是直接的文本本身,而是文本提取出来的特征。因此如何提取特征因而是非常重要的一步。在HanLP中一共有三个文本聚类方法。前两种都基于词袋模式,第一个是最常见的聚类算法:k-means,但HanLP不光实现了k-means,还实现了速度更快效果更好的repeated bisection算法(重复二分法,还是翻译为累次平方法,好像是第一种)。笔者动笔前段时间刚刚添加了一个新的聚类分析器是,基于词向量的kmens聚类分析器。 基于词向量的kmeans聚类分析器,输入的需要时词向量化后的文件。虽然HanLP的词向量在Java实现中,还算可以,但在Python中使用不算太好用,同时Python也不推荐用HanLP做词向量,我们有更好的工具。所以这里我们也就不画蛇添足了。 而对于前两个聚类分析器而言,其聚类模块可以接受任意文本作为文档,而不需要用特殊分隔符隔开单词。另外,该模块还接受单词列表作为输入,用户可以将英文、日文等预先切分为单词列表后输入本模块。统计方法适用于所有语种,不必拘泥于中文。 分词器的性能问题 在repeated bisection算法无论性能还是速度都要优于kmens,但是在本人的测试中,前者速度基本原作者一致约为kmeans的三倍左右