k-means算法

MNIST | 基于k-means和KNN的0-9数字手写体识别

匆匆过客 提交于 2019-12-05 09:03:48
MNIST | 基于k-means和KNN的0-9数字手写体识别 1 背景说明 2 算法原理 3 代码实现 3.1 文件目录 3.2 核心代码 4 实验与结果分析 5 后记 概要: 本实验是在实验“ kaggle|基于k-means和KNN的语音性别识别 ”、实验“ MNIST|基于朴素贝叶斯分类器的0-9数字手写体识别 ”以及实验“ 算法|k-means聚类 ”的基础上进行的,把k-means聚类和CNN识别应用到数字手写体识别问题中去。有关MINIST数据集和kmeans+KNN的内容可以先看我的上面三篇博文,本实验的代码依然是MATLAB。 关键字: 数字手写体识别; k-means; KNN; MATLAB; 机器学习 1 背景说明    我在我的 上上篇博文 中提到会把kmeans聚类算法用到诸如语音性别识别和0-9数字手写体识别等具体问题中去, 语音性别识别的实验 已经在11月2号完成,现在来填0-9数字手写体识别的坑。由于本篇博客承接了我之前若干篇博客,而MNIST数据集、kmeans以及KNN算法的原理和用法等内容均已在之前提到过,所以这里不再专门说明。 2 算法原理    可以将本次实验思路概括如下:    S1:训练时,将训练集中0-9对应的数据各聚成k类,共计10k个聚类中心;    S2:验证时

使用高斯混合模型建立更精确的聚类

笑着哭i 提交于 2019-12-04 16:19:30
介绍 我很喜欢研究无监督学习问题。它们为监督学习问题提供了一个完全不同的挑战,用我拥有的数据进行实验的发挥空间要比监督学习大得多。毫无疑问,机器学习领域的大多数发展和突破都发生在无监督学习领域。 无监督学习中最流行的技术之一就是聚类。这是一个我们通常在机器学习的早期学习的概念,它很容易理解。我相信你曾经遇到过,甚至参与过顾客细分、购物篮分析等项目。 但问题是聚类有很多方面。它并不局限于我们之前学过的基本算法。它是一种强大的无监督学习技术,我们可以在现实世界中准确地使用它。 > 高斯混合模型就是我想在本文中讨论的一种聚类算法。 想预测一下你最喜欢的产品的销售情况吗?或许你想通过不同客户群体的视角来理解客户流失。无论用什么方法,你都会发现高斯混合模型非常有用。 在本文中,我们将采用自下而上的方法。因此,我们首先来看一下聚类的基础知识,包括快速回顾一下k-means算法。然后,我们将深入讨论高斯混合模型的概念,并在Python中实现它们。 目录 聚类简介 k-means聚类简介 k-means聚类的缺点 介绍高斯混合模型 高斯分布 期望最大化EM算法 高斯混合模型的期望最大化 在Python中实现用于聚类的高斯混合模型 聚类简介 在我们开始讨论高斯混合模型的实质内容之前,让我们快速更新一些基本概念。 注意:如果你已经熟悉了聚类背后的思想以及k-means聚类算法的工作原理

算法 - 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

算法 - k-means算法

孤人 提交于 2019-12-04 02:02:23
一、聚类思想 所谓聚类算法是指将一堆没有标签的数据自动划分成几类的方法,属于无监督学习方法,这个方法要保证同一类的数据有相似的特征,如下图所示: 根据样本之间的距离或者说是相似性(亲疏性),把越相似、差异越小的样本聚成一类(簇),最后形成多个簇,使同一个簇内部的样本相似度高,不同簇之间差异性高。 二、k-means聚类分析算法 相关概念: K值 :要得到的簇的个数 质心 :每个簇的均值向量,即向量各维取平均即可 距离量度 :常用欧几里得距离和余弦相似度(先标准化) 算法流程: 1、首先确定一个k值,即我们希望将数据集经过聚类得到k个集合。 2、从数据集中随机选择k个数据点作为质心。 3、对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合。 4、把所有数据归好集合后,一共有k个集合。然后重新计算每个集合的质心。 5、如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),我们可以认为聚类已经达到期望的结果,算法终止。 6、如果新质心和原质心距离变化很大,需要迭代3~5步骤。 三、数学原理 K-Means采用的启发式方式很简单,用下面一组图就可以形象的描述: 上图a表达了初始的数据集,假设k=2。在图b中,我们随机选择了两个k类所对应的类别质心,即图中的红色质心和蓝色质心

非监督学习之k-means

孤人 提交于 2019-12-03 17:29:56
K-means通常被称为劳埃德算法,这在数据聚类中是最经典的,也是相对容易理解的模型。算法执行的过程分为4个阶段: 1、随机设置K个特征空间内的点作为初始的聚类中心 2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别 3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值) 4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行 第二步过程 sklearn.cluster.KMeans class sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm='auto') """ :param n_clusters:要形成的聚类数以及生成的质心数 :param init:初始化方法,默认为'k-means ++',以智能方式选择k-均值聚类的初始聚类中心,以加速收敛;random,从初始质心数据中随机选择k个观察值(行 :param n_init:int,默认值:10使用不同质心种子运行k-means算法的时间

K-means 聚类学习

对着背影说爱祢 提交于 2019-12-03 10:32:21
没有监督标签,只有x特征值,没有y,没有办法去预测,没有办法证明你做的对错,这样的数据集,我们能做的是什么呢?就是非监督机器学习。常见的算法就是聚类或者降维。聚类做的是什么?就是挖掘数据集中的规律的存在,通过把相似的数据归类,帮助我们探索数据集里的样本如何划分,比如可以将用户分群,不同的营销策略。聚类里包含的算法也是非常多。 聚类的基本思路是:物以类聚,人以群分。通过特征,计算样本之间的相似度。 K-means 聚类学习: 第一步:确定一个超参数k,k就是打算把样本聚集为几类。 第二步:在所有的样本中,随机的选择三个点,作为聚类的初始中心。 第三步:依次计算除这三个中心点以外的每一个点,和三个中心点的距离。然后找出样本点离哪个中心点最近。 第四歩:将所有点划分到离它最近的那个中心点所代表的簇中去。 第五步:所有样本会被划分k个类别,有了k堆数据,分别计算这k个簇的质心。例如: 第六步:生成k个新的聚类中心点,以这k个新的重点重新重复3-5歩。 第七歩:终止条件(一):在重复的聚类过程中,所有样本点的分类结果都不再发生变化;(二)或者达到你设定的算法最大迭代次数,例如max_iter = 200 . 原理-算法实现: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

机器学习:聚类

天大地大妈咪最大 提交于 2019-12-03 06:53:30
聚类算法 简介 聚类就是对大量 未知标注的数据集 ,按照数据 内部存在的数据特征 将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小; 属于无监督学习 。 聚类算法的重点是计算样本项之间的 相似度 ,有时候也称为样本间的 距离 相似度/距离 闵可夫斯基距离 \[ dist(X,Y)=\quad\sqrt[p]{\sum_{i=1}^{n}{|x_i-y_i|^p}} \] \[ 其中X=(x_1,x_2,...,x_n),Y=(y_1,y_2,...,y_n) \] 当p是1的时候为哈曼顿距离(Manhattan)/城市距离: \[ dist(X,Y)=\sum_{i=1}^{n}{|x_i-y_i|} \] 当p为2的时候为欧式距离(Euclidean): \[ E\_dist(X,Y)=\sqrt{\sum_{i=1}^{n}{|x_i-y_i|^2}} \] 当p为无穷大的时候是切比雪夫距离(Chebyshew): \[ C\_dist(X,Y)=max(|x_i-y_i|) \] 有数学性质可得,当p为无穷大时,有如下: \[ dist(X,Y)=\quad\sqrt[p]{\sum_{i=1}^{n}{|x_i-y_i|^p}} \] \[ \leq\quad\sqrt[p]{n\times max(|x_i-y_i|^p)}=max(|x

机器学习十大算法之K-means

匿名 (未验证) 提交于 2019-12-03 00:41:02
K-means算法,也称为K平均或K均值算法; K平均聚类的目的是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近中心点的距离最近(或者说相似度上更相近的)对应的聚类。 1.从定义可以看出Kmeans主要是通过K中心和对K中心的距离计算进行聚类;所以K-means主要问题是 K值选取和距离(相似度衡量)使用 2.由于每次都要计算所有的样本与每一个质心之间的距离(相似度),故在大规模的数据集上,K-Means算法的收敛速度比较慢。 1.选择聚类的个数k(kmeans算法传递超参数的时候,只需设置最大的K值) 2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心。 3.对每个点确定其聚类中心点。 4.再计算其聚类新中心。 5.重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变,或者损失函数达到预期范围) 举例如下样本,通过Kmeans对其分为两类: 样本 Xֵ Yֵ p1 7 7 p2 2 3 p3 6 8 p4 1 4 p5 1 2 p6 3 1 p7 8 8 p8 9 10 p9 10 7 p10 5 5 p11 7 6 p12 9 3 p13 2 8 p14 5 11 p15 5 2 数据点分布在坐标轴上的图像如下: 1.使用K-means中分两类K=2; 2.选择p1,p2为初始的两个中心点 3

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