精华内容
下载资源
问答
  • 聚类算法没有训练过程,这是和分类算法最本质的区别3.K-means是一种最常见的聚类算法,它通过距离定义相似性4.求解K-means采取启发式的迭代方法5.[_^strong:19171314!]类别个数k和初始质心的选取是影响Kmeans的因素...

    1.聚类,通俗解释就是物以类聚

    2.聚类算法没有训练过程,这是和分类算法最本质的区别

    3.K-means是一种最常见的聚类算法,它通过距离定义相似性

    4.求解K-means采取启发式的迭代方法5.[_^strong:19171314!]类别个数k和初始质心的选取是影响Kmeans的因素

    6.改进的k-means算法有K-means++,elkanK-means和miniBatchK-means

    7.K-means是高斯混合模型的一种特殊情形

    从今天起,我们用四篇文章介绍四种聚类算法,包括K-means、DBSCAN、BIRCH谱聚类。开始之前,先简单介绍一下聚类的定义。

    9a7223c29c2c72aef6ed1ab85fe70cdf.png

    聚类简介

    82f06d757ed552b6631e5adb42885c43.png

    聚类,通俗解释就是物以类聚,把同属一个类别的物体聚合在一起。比如小时候玩的课题游戏,把相同的水果放在一堆。本质上就是把相似的样本放在一起,不相似的样本尽可能的分开。

    算法没有训练过程,这是和分类算法最本质的区别,算法要根据自己定义的规则把样本进行分类。

    根据此,我们用数学语言对聚类做精确定义

    假设一个样本集C={x1,x2,...,xl},聚类算法把这个样本集划分成m个不相交的子集C1,...,Cm即。这些子集的并集是整个样本集

    992945f9ed0bad067d27cb6485b65d73.png

    且每个样本只能属于这些子集中的一个,即任意两个子集之间没有交集

    936ab38520c909782148b9c4978c8e53.png

    同一子集内的样本要具备相似性,相似性没有固定的定义,根据不同场景由人工设定。

    举个例子,对于样本集C={1,2,3,4,5,6,7,8,9}

    按照奇偶性,可以划分为:C1={1,3,5,7,9},C2={2,4,6,8};

    按照是否能被3整除,可以分为:C1={1,2,4,5,7,8},C2={3,6,9}

    我们把这些样本集合称为,显然算法要解决的核心问题是如何定义簇,唯一的要求是簇内的样本尽可能相似。通常我们根据距离和密度来确定,这些往后详细介绍。

    9a7223c29c2c72aef6ed1ab85fe70cdf.png

    K-means及优化

    82f06d757ed552b6631e5adb42885c43.png

    K-means是一种最常见的聚类算法,它的原理是:对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

    假设簇划分为{C1,...,Ck},则优化目标是最小化平方误差E:

    a6b6e98c797eb3ca44e6377ad712ebdf.png

    直接求解非常难,一般采取启发式的迭代方法:

    6d7c2853b16b6ec8bc14ac9aa1f7faab.png

    很显然,对于K-means,类别个数k和初始质心的选取将会影响算法的效率。

    传统K-means算法流程为:

    4b467efa4468a7a044f820f2b440fce3.png


    前面提到,初始质心选择的随机性是影响算法迭代效率的原因,针对这个问题,提出了改进的方案——K-means++算法:

    20647be757d44865e749f70c8dd59031.png

    我们观察到,每一轮迭代中,要计算所有样本到所有质心的距离,这样耗时,效率较低。针对这个现象,提出了改进方案——elkan K-meansmini Batch K-means

    elkan K-means算法的目标是减少不必要的距离的计算。它利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算。

    如果样本的特征稀疏、有缺失值的话,这个方法就不使用了,此时某些距离无法计算

    mini Batch K-means选择一个合适的批样本来做K-Means聚类,该批样本一般通过无放回的随机采样得到

    9a7223c29c2c72aef6ed1ab85fe70cdf.png

    从K-means到GMM

    82f06d757ed552b6631e5adb42885c43.png


    K-means是通过距离来度量相似性。实际上,它可以看成高斯混合模型(GMM)的一种特殊情形。

    传送门:高斯混合模型(GMM)

    我们知道,GMM的算法流程为:

    87242c1dfd8b77ccb48cad6b7dcd0812.png

    在高斯混合模型中,每个样本可以属于任何分模型,它来自所有模型的加权之和。如果对GMM的条件做一些限制:

    • 每个样本将不再依概率Z~X归属于每个高斯分布,而是每次迭代中每个样本将以概率为1只归属于一个确定的高斯分布(后验概率取值1或0)

    • 各个高斯分布的协方差矩阵为单位矩阵I

    • 隐变量Z为均匀分布, 即样本是等概率从各个高斯分布中采样得到

    即GMM特殊形式(K-means)的E步和M步是:

    5a31c5539600045bd7f0481d30702ec0.png

    又因为:

    d0ccd1870ba2ed749a6020d0fb627261.png

    所以,后验概率γ中的高斯分布概率密度函数值实际上反比于样本xi与对应高斯分布均值向量u的欧式距离:

    b01db733cb15cb9447c0679e6811df5c.png

    所有样本以概率为1被归于与之欧氏距离最小的均值向量所属的高斯分布

    这与K-means算法一致!

    K-means算法优缺点

    最后,总结一下K-means的优缺点:

    K-Means的主要优点有:原理简单易于实现;可解释度较强;调参仅仅是簇数k

    K-Means的主要缺点有:K值选取不好把握;非凸的数据集难收敛;异常点较敏感;若类别的数据量失衡,或者各类别方差不同,则聚类效果不佳。

    参考资料:

    https://mp.weixin.qq.com/s/1SOQZ3fsiYtT4emt4jvMxQ

    https://mp.weixin.qq.com/s/FLR36-n126aVbTxjD1MMGQ

    展开全文
  • 试想一下,如果我们训练了一个二分类的模型,测试数据集100张图像,正例10张,负例90张,那么只要每张图像模型都直接判断为负例准确率都90%了,我们不能直接说该模型性能Accuracy准确率达到了90%,实际上对于...

    当我们训练完一个模型算法后,该如何评估模型算法的好坏呢?不同的算法任务适用哪些评估体系呢?哪种评估方式才能真实反馈实际的效果呢?试想一下,如果我们训练了一个二分类的模型,测试数据集有100张图像,正例10张,负例90张,那么只要每张图像模型都直接判断为负例准确率都有90%了,我们不能直接说该模型性能Accuracy准确率达到了90%,实际上对于正例来说其精确率和召回率都为0。根据多年的算法开发经验,今天我们就来探讨一下模型算法评估中的“心中尺”和“心里称”!

    常见的评估指标

    先让我们看一下以下这两个评估指标,在大名鼎鼎的ImageNet ILSVRC比赛中经常被提及的重要指标。

    Top-1错误率:预测输出的概率最高的类别,是否和人工标注的类别一致,如果不一致,此时的概率,比如预测100张图像的类别,每张图像的最高概率错误的有2张,那么top-1为2%;

    Top-5错误率:预测输出的概率最高的前5个类别当中,有没有和人工标注的类别不一致,当5个都不一致时错误次数占总次数的概率,比如预测100张图像的类别,每张图像前5个最高概率类别中没有一个正确时的张数有3张,那么top-5错误率为3%;

    为了引出以下的评估指标,先让我们来看一个二分类的混淆矩阵,对于多分类来说,只要把其他类别当做负例则一样适用。

    3152f042824274163bf3f2b3f38782c4.png
    二分类混淆矩阵

    表中的四个参数说明如下:

    True Positive(TP) :预测为正例,实际为正例,即算法预测正确(True)

    False Positive(FP) :预测为正例,实际为负例,即算法预测错误(False)

    True Negative(TN) :预测为负例,实际为负例,即算法预测正确(True)

    False Negative(FN) :预测为负例,实际为正例,即算法预测错误(False)

    由该混淆矩阵可以引出如下Accuracy、Precision、Recall、F1-Score等等评估指标:

    Accuracy:准确率,指的是正确预测的样本数占总预测样本数的比值,它不考虑预测的样本是正例还是负例,反映的是模型算法整体性能,其公式如下:

    .

    Precision:精确率,指的是正确预测的正样本数占所有预测为正样本的数量的比值,也就是说所有预测为正样本的样本中有多少是真正的正样本,它只关注正样本,这是区别于Accuracy的地方,其公式如下:

    .

    Recall:召回率,指的是正确预测的正样本数占真实正样本总数的比值,也就是指能从这些预测样本中能够正确找出多少个正样本,其公式如下:

    .

    F1-Score:F1分数,是统计学中用来衡量二分类模型精确度的一种指标,它被定义为精确率和召回率的调和平均数,它的最大值是1,最小值是0,其公式如下:

    .

    TPR(True Positive rate):真阳率,指的是在所有实际为阳性的样本中,被正确地判断为阳性的比率,同召回率,其公式如下:

    .

    FPR(False Positive rate):假阳率,指的是在所有实际为阴性的样本中,被错误地判断为阳性的比率,其公式如下:

    .

    ROC(Receiver Operating Characteristic):受试者工作特征曲线,其以FPR假阳率为X轴坐标,以TPR真阳率为Y轴坐标,曲线越靠近左上角则说明模型算法性能越好,左上角(0,1)为最理想的情况说明模型性能非常完美,而其对角线对应于“随机猜测”模型的性能。在图像分类图像识别等任务里,模型算法的输出通常为一个预测概率,而我们通常也会设定一个阈值,超过这个阈值则我们就判断为其中的一类,反之预测为另一类。于是,不同的阈值就对应了不同的真阳率和假阳率,从而形成了真阳率和假阳率序列,它们就可以在直角坐标系上通过描点成为光滑曲线,这个曲线就是 ROC 曲线,其形状类似如下:

    02b4b546f1ac3493fbd769a4704b5e2a.png
    ROC受试者工作特征曲线

    AUC(Area Under Curve):ROC曲线下的面积,因为ROC“随机猜测”模型通常对应于其对角线,因而通常AUC的值范围为0.5~1,其值越大说明模型算法的性能越好,AUC为0.5时模型算法为“随机猜测”,其值为1时说明模型算法达到理想状态。通常我们可以使用sklearn.metrics.auc(fpr, tpr)来求得AUC值。

    PRC(Precision-Recall Curve):精准率-召回率曲线也叫PR曲线,其以Recall为X轴坐标,以Precision为Y轴坐标,通过对模型算法设定不同的阈值会得到不同的precision和recall值,将这些序列绘制到直角坐标系上就得到了PR曲线,PR曲线下的面积为1时则说明模型算法性能最为理想。

    以上评估指标大部分用于图像分类图像识别图像分割等等任务中,下面让我们来看一下在目标检测里经常用来评估模型算法性能的指标。

    IOU(Intersection over Union):交并比,指的是ground truth bbox与predict bbox的交集面积占两者并集面积的一个比率,IoU值越大说明预测检测框的模型算法性能越好,通常在目标检测任务里将IoU>=0.7的区域设定为正例(目标),而将IoU<=0.3的区域设定为负例(背景),其余的会丢弃掉,形象化来说可以用如下图来解释IoU:

    54d715652ed62d34af8d01744e0de521.png
    IoU形象化公式

    如果我们用A表示ground truth bbox的面积,B表示predict bbox的面积,而I表示两者的交集面积,那么IoU的计算公式如下:

    .

    AP(Average Percision):AP为平均精度,指的是所有图片内的具体某一类的PR曲线下的面积,其计算方式有两种,第一种算法:首先设定一组recall阈值[0, 0.1, 0.2, …, 1],然后对每个recall阈值从小到大取值,同时计算当取大于该recall阈值时top-n所对应的最大precision。这样,我们就计算出了11个precision,AP即为这11个precision的平均值,这种方法英文叫做11-point interpolated average precision;第二种算法:该方法类似,新的计算方法假设这N个样本中有M个正例,那么我们会得到M个recall值(1/M, 2/M, …, M/M),对于每个recall值r,该recall阈值时top-n所对应的最大precision,然后对这M个precision值取平均即得到最后的AP值。

    mAP(Mean Average Percision):mAP为均值平均精度,指的是所有图片内的所有类别的AP的平均值,目前,在目标检测类里用的最多的是mAP,一般所宣称的性能是在IoU为0.5时mAP的值。常见的目标检测评估指标输出样式如下:

    7fee82cd27317ad99b992e006280e70e.png
    目标检测任务中评估指标输出样式

    而对于回归预测类常见的评估指标如下:

    MAE(Mean Absolute Error):平均绝对误差,其能更好地反映预测值与真实值误差的实际情况,其计算公式如下:

    .

    RMSE(Root Mean Square Error):均方根误差,用于衡量观测值与真实值之间的偏差,其对一组预测中的特大或特小误差反映比较敏感,常用来作为机器学习模型预测结果衡量的标准,其计算公式如下:

    .

    以上为常见的模型算法评估指标,当然,针对特定领域还有很多评估指标,比如在机器翻译领域用于评估模型算法的指标有BLEU和METEOR,在这里就不罗列了。我们只要掌握了这些常见的评估指标,并且正确使用它们,我们就能够合理正确的评估训练出来的模型算法,从而让我们的工作结果正确应用在业务任务中来!

    展开全文
  • KMeans算法是MacQueen在1967年提出的,是最简单与最常见的数据分类方法之一。它做为一种常见数据分析技术在机器学习、数据挖掘、模式识别、图像分析等领域都应用。如果从分类角度看,KMeans属于硬分类即需要人为...


    OpenCV中的KMeans算法介绍与应用


    一、KMeans算法介绍

    KMeans算法是MacQueen在1967年提出的,是最简单与最常见的数据分类方法之一。它做为一种常见数据分析技术在机器学习、数据挖掘、模式识别、图像分析等领域都有应用。如果从分类角度看,KMeans属于硬分类即需要人为指定分类数目,而MeanSift分类方法则可以根据收敛条件自动决定分类数目。从学习方法上来说,KMeans属于非监督学习方法即整个学习过程中不需要人为干预的学习方法,自动完成整个数据集合分类。对于给定的数据集合DS (Data Set)与输入的分类数目K,KMeans的整个工作原理可以描述如下:

      1. 根据输入的分类数目K定义K个分类,每个分类选择一个中心点

      2. 对DS中每个数据点做如下操作:

    - 计算它与K个中心点之间的距离

    - 把数据点指定属于K个中心点中距离最近的中心点所属的分类

      3. 对K个分类中每个数据点计算平均值得到新的K个中心点

      4. 比较新K个中心点之间与第一步中已经存在的K个中心差值

    - 当两者之间的差值没有变化或者小于指定阈值,结束分类

    - 当两者之间的差值或者条件不满足时候,用新计算的中心点值做为K个分类的新中心点,继续执行2~4步。直到条件满足退出。

    从数学的角度来说KMeans就是要找到K个分类而且他们的中心点到各个分类中各个数据的之间差值平方和最小化,而实现这个过程就是要通过上述2~4步不断的迭代执行,直到收敛为止。公式表示如下:

    以上是KMeans算法的基本思想,想要实现或者应用该算法有三个注意点值得关注:

    1. 初始的K个分类中每个分类的中心点选择,多数的算法实现都是支持随机选择与人工指定两种方式,OpenCV中的KMeans实现同样支持这两种方式。

    2. 多维数据支持,多数时候我们要分类的特征对象的描述数据不止一个数据特征,而是一个特征向量来表示,OpenCV中通过Mat对象构建实现对多维数据KMeans分类支持。

    3. 收敛条件 - 一般情况下在达到指定的迭代次数或者两次RSS差值小于给定阈值的情况下,结束执行分类处理,输出最终分类结果。

    下图是一个例子,黑色的点代表数据点,十字表示中心点位置,初始输入的分类数目K=2时,KMeans各步执行结果:

    二、OpenCV中KMeans相关函数说明

    KMeans是OpenCV核心模块的一个API函数。

    各个参数的详细解释如下:

    - data表示输入的数据集合,可以一维或者多维数据,类型是Mat类型,比如:

    Mat points(count, 2, CV_32F)

    表示数据集合是二维,浮点数数据集。

    - K表示分类的数目,最常见的是K=2表示二分类。

    -bestLabels表示计算之后各个数据点的最终的分类索引,是一个INT类型的Mat对象。

    -criteria表示算法终止的条件,达到最大循环数目或者指定的精度阈值算法就停止继续分类迭代计算。

    - attempts表示为了获得最佳的分类效果,算法要不同的初始分类尝试次数

    - flags表示选择初始中心点选择方法用哪一种

    KMEANS_RANDOM_CENTERS 表示随机选择中心点

    KMEANS_PP_CENTERS 基于中心化算法选择

    KMEANS_USE_INITIAL_LABELS第一次分类中心点用输入的中心点

    - centers表示输出的每个分类的中心点数据。

    三、应用案例-利用KMeans实现图像分割

    KMeans在图像处理中经典应用场景就是根据用户输入的分类数目实现图像自动区域分割,本例就是基于OpenCV KMeans函数实现图像的自动分割, 对彩色图像来说,每个像素点都有RGB三个分量,整个图像可以看成是一个3维数据集合,只要把这个三维数据集作为输入参数传给KMeans函数即可,算法执行完毕之后,根据分类标记的索引设置不同的颜色即可。所以演示程序的实现步骤如下:

    1. 将输入图像转换为数据集合

    2. 使用KMeans算法对数据实现分类

    3. 根据每个数据点的分类索引,对图像重新填充颜色,显示分割后图像。

    运行效果如下:

    完整的代码实现如下:

    
    
    1. #include<opencv2/opencv.hpp> 
    2. #include<iostream> 
    3.  
    4. usingnamespace cv; 
    5. usingnamespace std; 
    6.  
    7. int main(intargc, char** argv) { 
    8.     Mat src = imread("D:/vcprojects/images/toux.jpg"); 
    9.     imshow("input", src); 
    10.     int width = src.cols; 
    11.     int height = src.rows; 
    12.     int dims = src.channels(); 
    13.  
    14.     // 初始化定义 
    15.     int sampleCount = width*height; 
    16.     int clusterCount = 4; 
    17.     Mat points(sampleCount, dims, CV_32F, Scalar(10)); 
    18.     Mat labels; 
    19.     Mat centers(clusterCount, 1, points.type()); 
    20.  
    21.     // 图像RGB到数据集转换 
    22.     int index = 0; 
    23.     for (int row = 0; row < height; row++) { 
    24.         for (int col = 0; col < width; col++) { 
    25.             index = row*width + col; 
    26.             Vec3b rgb = src.at<Vec3b>(row, col); 
    27.             points.at<float>(index, 0) = static_cast<int>(rgb[0]); 
    28.             points.at<float>(index, 1) = static_cast<int>(rgb[1]); 
    29.             points.at<float>(index, 2) = static_cast<int>(rgb[2]); 
    30.         } 
    31.     } 
    32.  
    33.     // 运行K-Means数据分类 
    34.     TermCriteria criteria = TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 10, 1.0); 
    35.     kmeans(points, clusterCount, labels, criteria, 3, KMEANS_PP_CENTERS, centers); 
    36.  
    37.     // 显示图像分割结果 
    38.     Mat result = Mat::zeros(src.size(), CV_8UC3); 
    39.     for (int row = 0; row < height; row++) { 
    40.         for (int col = 0; col < width; col++) { 
    41.             index = row*width + col; 
    42.             int label = labels.at<int>(index, 0); 
    43.             if (label == 1) { 
    44.                 result.at<Vec3b>(row, col)[0] = 255; 
    45.                 result.at<Vec3b>(row, col)[1] = 0; 
    46.                 result.at<Vec3b>(row, col)[2] = 0; 
    47.             } 
    48.             elseif (label == 2) { 
    49.                 result.at<Vec3b>(row, col)[0] = 0; 
    50.                 result.at<Vec3b>(row, col)[1] = 255; 
    51.                 result.at<Vec3b>(row, col)[2] = 0; 
    52.             } 
    53.             elseif (label == 3) { 
    54.                 result.at<Vec3b>(row, col)[0] = 0; 
    55.                 result.at<Vec3b>(row, col)[1] = 0; 
    56.                 result.at<Vec3b>(row, col)[2] = 255; 
    57.             } 
    58.             elseif (label == 0) { 
    59.                 result.at<Vec3b>(row, col)[0] = 0; 
    60.                 result.at<Vec3b>(row, col)[1] = 255; 
    61.                 result.at<Vec3b>(row, col)[2] = 255; 
    62.             } 
    63.         } 
    64.     } 
    65.     imshow("kmeans-demo", result); 
    66.     //imwrite("D:/vcprojects/images/cvtest.png", result); 
    67.     waitKey(0); 
    68.     return 0; 
    69. }  



    作者:贾志刚

    来源:51CTO

    展开全文
  • 在理解聚类算法前必须了解这两类两种类型直接的差别监督学习(supervised learning)在监督学习中最常见的是回归和分类(注意和聚类区分),关于回归,是将输入的数据集按照一个函数(模型参数)进行训练学习,当要对新来...

    监督学习和无监督学习

    无监督学习和监督学习是机器学习最基本的两种类型。在理解聚类算法前必须了解这两类两种类型直接的差别

    监督学习(supervised learning)

    在监督学习中最常见的是回归和分类(注意和聚类区分),关于回归,是将输入的数据集按照一个函数(模型参数)进行训练学习,当要对新来的数据进行预测时,便可以通过这个函数来进行回归预测。关于分类,通过已有的训练样本(即已知数据及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优表示某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的。
    监督学习是训练神经网络和决策树的常见技术。这两种技术高度依赖事先确定的分类系统给出的信息,对于神经网络,分类系统利用信息判断网络的错误,然后不断调整网络参数。对于决策树,分类系统用它来判断哪些属性提供了最多的信息。
    常见的有监督学习算法:回归分析和统计分类。最典型的算法是KNN和SVM。

    无监督学习(unsupervised learning)

    无监督学习与监督学习最大的差别是无监督学习中输入的样本是未知的,样本数据没有被标记,没有确定的类型和结果,无法用确切函数模型进行拟合。而是通过样本之间的相似性对样本集进行分类(聚类clustering)使得类内差距最小化,类间差距最大化从而让计算机自己将数据进行分类(并不是告诉计算机怎么分类)。
    无监督学习的方法分为两大类:
    (1) 一类为基于概率密度函数估计的直接方法:指设法找到各类别在特征空间的分布参数,再进行分类。
    (2) 另一类是称为基于样本间相似性度量的简洁聚类方法:其原理是设法定出不同类别的核心或初始内核,然后依据样本与核心之间的相似性度量将样本聚集成不同的类别。
    利用聚类结果,可以提取数据集中隐藏信息,对未来数据进行分类和预测。应用于数据挖掘,模式识别,图像处理等。

    聚类

    聚类,简单来说,就是将一个庞杂数据集中具有相似特征的数据自动归类到一起,称为一个簇,簇内的对象越相似,聚类的效果越好。它是一种无监督的学习(Unsupervised Learning)方法,不需要预先标注好的训练集。聚类与分类最大的区别就是分类的目标事先已知,例如猫狗识别,你在分类之前已经预先知道要将它分为猫、狗两个种类;而在你聚类之前,你对你的目标是未知的,同样以动物为例,对于一个动物集来说,你并不清楚这个数据集内部有多少种类的动物,你能做的只是利用聚类方法将它自动按照特征分为多类,然后人为给出这个聚类结果的定义(即簇识别)。例如,你将一个动物集分为了三簇(类),然后通过观察这三类动物的特征,你为每一个簇起一个名字,如大象、狗、猫等,这就是聚类的基本思想。

    至于“相似”这一概念,是利用距离这个评价标准来衡量的,我们通过计算对象与对象之间的距离远近来判断它们是否属于同一类别,即是否是同一个簇。至于距离如何计算,科学家们提出了许多种距离的计算方法,其中欧式距离是最为简单和常用的,除此之外还有曼哈顿距离和余弦相似性距离等。

    欧式距离,我想大家再熟悉不过了,但为免有一些基础薄弱的同学,在此再说明一下,它的定义为:
    对于x点坐标为(x1,x2,x3,…,xn)和 y点坐标为(y1,y2,y3,…,yn),两者的欧式距离为:

    82f3e8b3331c32d21ed255f07d2a6b87.png

    在二维平面,它就是我们初中时就学过的两点距离公式

    K-Means 算法

    K-Means 是发现给定数据集的 K 个簇的聚类算法, 之所以称之为 K-均值 是因为它可以发现 K 个不同的簇, 且每个簇的中心采用簇中所含值的均值计算而成.
    簇个数 K 是用户指定的, 每一个簇通过其质心(centroid), 即簇中所有点的中心来描述.
    聚类与分类算法的最大区别在于, 分类的目标类别已知, 而聚类的目标类别是未知的.

    优点:

    • 属于无监督学习,无须准备训练集

    • 原理简单,实现起来较为容易

    • 结果可解释性较好

    缺点:

    • 需手动设置k值。在算法开始预测之前,我们需要手动设置k值,即估计数据大概的类别个数,不合理的k值会使结果缺乏解释性

    • 可能收敛到局部最小值, 在大规模数据集上收敛较慢

    • 对于异常点、离群点敏感

    使用数据类型 : 数值型数据

    K-Means 场景

    kmeans,如前所述,用于数据集内种类属性不明晰,希望能够通过数据挖掘出或自动归类出有相似特点的对象的场景。其商业界的应用场景一般为挖掘出具有相似特点的潜在客户群体以便公司能够重点研究、对症下药。

    例如,在2000年和2004年的美国总统大选中,候选人的得票数比较接近或者说非常接近。任一候选人得到的普选票数的最大百分比为50.7%而最小百分比为47.9% 如果1%的选民将手中的选票投向另外的候选人,那么选举结果就会截然不同。实际上,如果妥善加以引导与吸引,少部分选民就会转换立场。尽管这类选举者占的比例较低,但当候选人的选票接近时,这些人的立场无疑会对选举结果产生非常大的影响。如何找出这类选民,以及如何在有限的预算下采取措施来吸引他们?答案就是聚类(Clustering)。

    那么,具体如何实施呢?首先,收集用户的信息,可以同时收集用户满意或不满意的信息,这是因为任何对用户重要的内容都可能影响用户的投票结果。然后,将这些信息输入到某个聚类算法中。接着,对聚类结果中的每一个簇(最好选择最大簇 ), 精心构造能够吸引该簇选民的消息。最后, 开展竞选活动并观察上述做法是否有效。

    另一个例子就是产品部门的市场调研了。为了更好的了解自己的用户,产品部门可以采用聚类的方法得到不同特征的用户群体,然后针对不同的用户群体可以对症下药,为他们提供更加精准有效的服务。

    K-Means 术语

    • 簇: 所有数据的点集合,簇中的对象是相似的。

    • 质心: 簇中所有点的中心(计算所有点的均值而来).

    • SSE: Sum of Sqared Error(误差平方和), 它被用来评估模型的好坏,SSE 值越小,表示越接近它们的质心. 聚类效果越好。由于对误差取了平方,因此更加注重那些远离中心的点(一般为边界点或离群点)。详情见kmeans的评价标准。

    K-Means 工作流程

    1. 首先, 随机确定 K 个初始点作为质心(不必是数据中的点)。

    2. 然后将数据集中的每个点分配到一个簇中, 具体来讲, 就是为每个点找到距其最近的质心, 并将其分配该质心所对应的簇. 这一步完成之后, 每个簇的质心更新为该簇所有点的平均值.
      3.重复上述过程直到数据集中的所有点都距离它所对应的质心最近时结束。

    上述过程的如下:

    • 创建 k 个点作为起始质心(通常是随机选择)

    • 当任意一个点的簇分配结果发生改变时(不改变时算法结束)

      • 对每个质心

      • 将数据点分配到距其最近的簇

      • 计算质心与数据点之间的距离

      • 对数据集中的每个数据点

      • 对每一个簇, 计算簇中所有点的均值并将均值作为质心

    展开全文
  • kmeans算法是无监督聚类学习中最常见、最常用的算法之一,其基本原理如下:1、随机初始化k个聚类中心点,并计算数据中每个点到k个点距离;2、将每个数据点分到距离聚类中心点最近聚类中心中;3、针对每个类别...
  • KMeans算法是MacQueen在1967年提出的,是最简单与最常见的数据分类方法之一。它做为一种常见数据分析技术在机器学习、数据挖掘、模式识别、图像分析等领域都应用。如果从分类角度看,KMeans属于硬分类即需要人为...
  • 决策树算法分类算法聚类算法集成算法(AdaBoost算法)人工神经网络算法排序算法关联规则算法(Apriori算法)一、 决策树算法决策树优点:1、决策树易于理解和解释,可以可视化分析,容易提取出规则。2、可以同时处理...
  • 聚类是把相似的对象通过静态分类的方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都相似的一些属性,常见的包括在坐标系中更加短的空间距离(一般是欧式距离)等。聚类的应用在商务上,...
  • KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是监督学习中的分类算法,它看起来和另一个机器学习算法Kmeans有点像(Kmeans是无监督学习算法)。关于K-means可以看上篇博客。 ...
  • 1. 理解 简单来说, 无监督聚类也是对数据实体的分类,只是在这个分类过程中,没有一...KMeans算法是最典型的无监督聚类算法。 K代表了K个类别,这是用户需要自定义的。也可以说是K个中心点(cluster centers/centrio
  • 常见的聚类规则包括:1)基于原型的,例如通过质心或中心点聚类,常见的算法KMeans;2)基于图的,也就是通过节点和边的概念,形成连通分支的分类常见的算法是凝聚层次聚类,最小生成树聚类;3)基于密度的,根据...
  • 聚类算法总结

    2019-04-14 23:51:00
    常见的聚类规则包括:1)基于原型的,例如通过质心或中心点聚类,常见的算法KMeans;2)基于图的,也就是通过节点和边的概念,形成连通分支的分类常见的算法是凝聚层次聚类,最小生成树聚类;3)基于密度的,...
  • KMeans算法是MacQueen在1967年提出的,是最简单与最常见的数据分类方法之一,作为一种常见的数据分析技术在机器学习、数据挖掘、模式识别、图像分析等领域都广泛应用。 KMeans算法的实现原理 如果从分类角度...
  • 常用机器学习算法包括分类、回归、聚类等几大类型,以下针对不同模型总结其评估指标一、分类模型常见的分类模型包括:逻辑回归、决策树、朴素贝叶斯、SVM、神经网络等,模型评估指标包括以下几种:(1)二分类问题(a)...
  • 非监督机器学习非监督机器学习没有提前标记结果,全靠算法自动判断相似性非监督学习中输入数据没有被标记,也没有确定结果,在这种学习中需要机器根据样本间相似性对样本集进行分类,使相同类别中变异最小化而...
  • 在Mahout_in_Action这本书中,给了一个...作为聚类算法的主要应用场景 - 文本分类,对文本信息的建模也是一个常见的问题。在信息检索研究领域已经很好的建模方式,就是信息检索领域中最常用的向量空间模型 词频 -
  •   在Mahout_in_Action这本书中,...作为聚类算法的主要应用场景 - 文本分类,对文本信息的建模也是一个常见的问题。在信息检索研究领域已经很好的建模方式,就是信息检索领域中最常用的向量空间模型 词频 - 逆...
  • (update 2012.12.28 关于本项目下载及运行的常见问题 FAQ见newsgroup18828文本分类器、文本聚类器、关联分析频繁模式挖掘算法的Java实现工程下载及运行FAQDBScan是一种基于密度聚类算法,它一个核心点概念:...
  • kmeans是一种聚类算法,而KNN是分类算法。 2、机器学习中什么时候需要正则化? 当模型显示出过拟合/欠拟合时,就需要正则化。正则化引入了成本项,用于为目标函数带来更多特征。正则化试图将许多变量系数变为0,...
  • 一些常见的机器学习算法的实现代码,本人学习过程中做的总结,资历尚浅,如错误请不吝指出。 目录介绍 DeepLearning Tutorials 这个文件夹下包含一些深度学习算法的实现代码,以及具体的应用实例,包含: dive_...
  • 1.常见分类算法及应用场景 2.逻辑回归推导 3.SVM相关问题 4.核函数使用 5.生成模型和判别模型基本形式 6.ID3,C4.5和CART区别 7.交叉熵公式原理 8.L1和L2正则化区别 9.传统机器学习模型哪些 10.k-means算法流程 ...
  • 一些常见的机器学习算法的实现代码,本人学习过程中做的总结,资历尚浅,如错误请不吝指出。 目录介绍 DeepLearning Tutorials 这个文件夹下包含一些深度学习算法的实现代码,以及具体的应用实例,包含: dive_...
  • 从基本软件安装到必备Python扩展讲起,然后对机器学习算法一一讲解,同时配合编程实操实现过程,适合零基础系统学习,配套资料包括讲义作业软件数据都。 课程目录: 第一章Numpy前导介绍 1.1、Anconda安装 ...
  • scikit-learn 是一个基于SciPy和Numpy开源机器学习模块,包括分类、回归、聚类系列算法,主要算法有SVM、逻辑回归、朴素贝叶斯、Kmeans、DBSCAN等,目前由INRI 资助,偶尔Google也资助一点。 项目主页: ...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

常见的分类算法有kmeans