聚类算法(K-means聚类算法)

在数据分析挖掘过程中常用的聚类算法有1.K-Means聚类,2.K-中心点,3.系统聚类.

1.K-均值聚类在最小误差基础上将数据划分为预定的类数K(采用距离作为相似性的评价指标).每次都要遍历数据,所以大数据速度慢

2.k-中心点,不采用K-means中的平均值作为簇中心点,而是选中距离平均值最近的点最为簇中心点.

3.系统聚类又叫多层次聚类,分类是由高到低(可以想象下二叉树这种结构),越靠后,包含的数据点越少,但共同特征越多,缺点是不适合大数据量,速度慢.

K-mans聚类实战代码:

#-*- coding: utf-8 -*-
‘‘‘
聚类离散化,最后的result的格式为:
      1           2           3           4
A     0    0.178698    0.257724    0.351843
An  240  356.000000  281.000000   53.000000
即(0, 0.178698]有240个,(0.178698, 0.257724]有356个,依此类推。
‘‘‘
from __future__ import print_function
import pandas as pd
from sklearn.cluster import KMeans #导入K均值聚类算法

datafile = ‘../data/data.xls‘ #待聚类的数据文件
processedfile = ‘../tmp/data_processed.xls‘ #数据处理后文件
typelabel ={u‘肝气郁结证型系数‘:‘A‘, u‘热毒蕴结证型系数‘:‘B‘, u‘冲任失调证型系数‘:‘C‘, u‘气血两虚证型系数‘:‘D‘, u‘脾胃虚弱证型系数‘:‘E‘, u‘肝肾阴虚证型系数‘:‘F‘}
k = 4 #需要进行的聚类类别数

#读取数据并进行聚类分析
data = pd.read_excel(datafile) #读取数据,data是个dataframe
keys = list(typelabel.keys())

result = pd.DataFrame() #声明一个空DataFrame结构

if __name__ == ‘__main__‘: #判断是否主窗口运行,如果是将代码保存为.py后运行,则需要这句,如果直接复制到命令窗口运行,则不需要这句。
  for i in range(len(keys)):
    #调用k-means算法,进行聚类离散化
    print(u‘正在进行“%s”的聚类...‘ % keys[i])
    kmodel = KMeans(n_clusters = k, n_jobs = 4) #n_jobs是并行数,一般等于CPU数较好
    # print(data[[keys[i]]].as_matrix());exit();
    kmodel.fit(data[[keys[i]]].as_matrix()) #训练模型,as_matrix()转化为Numpy数组,返回指定数列
    # print(data[[keys[i]]]);exit();
    r1 = pd.DataFrame(kmodel.cluster_centers_, columns = [typelabel[keys[i]]]) #聚类中心,kmodel.cluster_centers_返回四个聚类中心点
    #选取K个初始类簇中心(通常是从数据集随机选取K个数据)的情况下,遍历数据集中所有点,计算到K个聚类中心点的距离,那个距离最近,
    # 就分配到该类簇中心所代表的类簇,分配完毕后,重新选取K个类簇的中心点(K个类簇各自的平均值),重新遍历数据集到K个类簇中心的距离,
    # 直到类簇中心点的变化很小,或者达到指定的迭代(计算)次数.
    # 缺点:可能收敛到局部最小值(受到初始簇中心的影响),
    # 在大规模数据集上收敛较慢(每次迭代均需要历遍数据集中的每一个数据样本,且迭代次数默认值为300)
    # print([typelabel[keys[i]]]);

    r2 = pd.Series(kmodel.labels_).value_counts() #分类统计,K个聚类各有多少个数据点
    #DataFrame和Series是pandas的两种数据结构,series理解为索引数组,DataFrame是Series组成的二维数据,具有航索引和列索引,形状理解为矩阵

    r2 = pd.DataFrame(r2, columns = [typelabel[keys[i]]+‘n‘]) #转为DataFrame,记录各个类别的数目
    # print(r2);exit();
    r = pd.concat([r1, r2], axis = 1).sort_values(typelabel[keys[i]]) #匹配聚类中心和类别数目,sort_values按某列排序
    # print(r);exit();
    r.index = [1, 2, 3, 4]

    r[typelabel[keys[i]]] = pd.Series.rolling(r[typelabel[keys[i]]], 2).mean() #rolling_mean()用来计算相邻2列的均值
    # (废弃rolling_mean,用Series.rolling().mean()代替),以此作为边界点。
    r[typelabel[keys[i]]][1] = 0.0 #这两句代码将原来的聚类中心改为边界点。
    result = result.append(r.T)

  result = result.sort_index() #以Index排序,即以A,B,C,D,E,F顺序排
  result.to_excel(processedfile)

原文地址:https://www.cnblogs.com/hanshuai0921/p/9032305.html

时间: 2024-11-07 01:53:35

聚类算法(K-means聚类算法)的相关文章

聚类之K均值聚类和EM算法

这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means)是一种基于中心的聚类算法,通过迭代,将样本分到K个类中,使得每个样本与其所属类的中心或均值的距离之和最小. 1.定义损失函数 假设我们有一个数据集{x1, x2,..., xN},每个样本的特征维度是m维,我们的目标是将数据集划分为K个类别.假定K的值已经给定,那么第k个类别的中心定义为μk,k=1

软件——机器学习与Python,聚类,K——means

K-means是一种聚类算法: 这里运用k-means进行31个城市的分类 城市的数据保存在city.txt文件中,内容如下: BJ,2959.19,730.79,749.41,513.34,467.87,1141.82,478.42,457.64TianJin,2459.77,495.47,697.33,302.87,284.19,735.97,570.84,305.08HeBei,1495.63,515.90,362.37,285.32,272.95,540.58,364.91,188.63

k means聚类过程

k-means是一种非监督 (从下图0 当中我们可以看到训练数据并没有标签标注类别)的聚类算法 0.initial 1.select centroids randomly 2.assign points 3.update centroids 4.reassign points 5.update centroids 6.reassign points 7.iteration reference: https://www.naftaliharris.com/blog/visualizing-k-me

ML: 聚类算法R包-K中心点聚类

K-medodis与K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值,在 K-medoids算法中,我们将从当前cluster 中选取这样一个点--它到其他所有(当前cluster中的)点的距离之和最小--作为中心点.K-medodis算法不容易受到那些由于误差之类的原因产生的脏数据的影响,但计算量显然要比K-means要大,一般只适合小数据量. K-medoids

k均值聚类

目录 一.k均值简介 二.应用简介 三.算法 四.选择合适的K 五.具体实例 一.k均值简介 K均值聚类是一种无监督学习,对未标记的数据(即没有定义类别或组的数据)进行分类. 该算法的目标是在数据中找到由变量K标记的组.该算法迭代地工作基于所提供的特征,将每个数据点分配给K个组中的一个. 基于特征相似性对数据点进行聚类. K均值聚类算法的结果是: 1.K簇的质心,可用于标记新数据 2.训练数据的标签(每个数据点分配给一个集群) 二.应用简介 K均值聚类算法用于查找未在数据中明确标记的组.这可用于

机器学习--k均值聚类(k-means)算法

一.基本原理 分类是指分类器根据已标注类别的训练集,通过训练可以对未知类别的样本进行分类.分类被称为监督学习.如果训练集的样本没有标注类别,那么就需要用到聚类.聚类是把相似的样本聚成一类,这种相似性通常以距离来度量.聚类被称为无监督学习. 聚类是指根据"物以类聚"的原理,将本身没有类别的样本聚集成不同的组,这样的一组数据对象的集合叫做簇,并且对每一个这样的簇进行描述的过程.它的目的是使得属于同一个簇的样本之间应该彼此相似,而不同簇的样本应该足够不相似.与分类规则不同,进行聚类前并不知道

R语言最优聚类数目k改进kmean聚类算法

原文链接:http://tecdat.cn/?p=7237 在本文中,我们将探讨应用聚类算法(例如k均值和期望最大化)来确定集群的最佳数量时所遇到的问题之一.从数据集本身来看,确定集群数量的最佳值的问题通常不是很清楚.在本文中,我们将介绍几种技术,可用于帮助确定给定数据集的最佳k值.  我们将在当前的R Studio环境中下载数据集: StudentKnowledgeData <-read_csv(“ YourdownloadFolderPath / StudentKnowledgeData.c

聚类算法:K-means 算法(k均值算法)

k-means算法:      第一步:选$K$个初始聚类中心,$z_1(1),z_2(1),\cdots,z_k(1)$,其中括号内的序号为寻找聚类中心的迭代运算的次序号. 聚类中心的向量值可任意设定,例如可选开始的$K$个模式样本的向量值作为初始聚类中心.      第二步:逐个将需分类的模式样本$\{x\}$按最小距离准则分配给$K$个聚类中心中的某一个$z_j(1)$.假设$i=j$时, \[D_j (k) = \min \{ \left\| {x - z_i (k)} \right\|

基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)

其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登后,陆陆续续收到本科生.研究生还有博士生的来信和短信微信等,表示了对论文的兴趣以及寻求算法的效果和实现细节,所以,我也就通过邮件或者短信微信来回信,但是有时候也会忘记回复. 另外一个原因也是时间久了,我对于论文以及改进的算法的记忆也越来越模糊,或者那天无意间把代码遗失在哪个角落,真的很难想象我还会全

k-均值聚类算法;二分k均值聚类算法

根据<机器学习实战>一书第十章学习k均值聚类算法和二分k均值聚类算法,自己把代码边敲边理解了一下,修正了一些原书中代码的细微差错.目前代码有时会出现如下4种报错信息,这有待继续探究和完善. 报错信息: Warning (from warnings module): File "F:\Python2.7.6\lib\site-packages\numpy\core\_methods.py", line 55 warnings.warn("Mean of empty