`
sunbin
  • 浏览: 352696 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

 
阅读更多

1、准备数据

0.0 0.0 0.0
0.1 0.1 0.1
0.2 0.2 0.2
9.0 9.0 9.0
9.1 9.1 9.1
9.2 9.2 9.2

 

 

2、python算法

 

import numpy as np    
import matplotlib.pyplot as plt  
from sklearn.cluster import KMeans
from sklearn import metrics  #导入sklearn效果评估模块

raw_data=np.loadtxt("../../data.txt")

X_test=raw_data[5:6,:]
X=raw_data[:,:] 

#训练聚类模型
n_clusters=2  #设置聚类数量
model_kmeans=KMeans(n_clusters=n_clusters,random_state=0)  #建立聚类模型对象
model_kmeans.fit(X)            #训练聚类模型
y_pre=model_kmeans.predict(X_test)  #预测聚类模型
y_true=y_pre #此处应给出真实值,因为数据样本未提供,先给出预测值为真实值

#模型效果评估
n_samples,n_features=X.shape     #总样本量,总特征数
inertias=model_kmeans.inertia_   #样本距离最近的聚类中心的总和
adjusted_rand_s=metrics.adjusted_rand_score(y_true, y_pre)     #调整后的兰德指数、此处第一个值应为
homogeneity_s=metrics.homogeneity_score(y_true,y_pre)               #同质化得分



#模型效果可视化
centers=model_kmeans.cluster_centers_  #各类别中心
colors=['#4EACC5','#FF9C34','#4E9A06']   #设置不同类别的颜色
plt.figure()    #建立画布
for i in range(n_clusters):    #循环读取类别
    index_sets=np.where(y_pre==i)  #找到相同类的索引集合、
    cluster=X[index_sets]   #将相同类的数据划分为一个聚类子集
    plt.scatter(cluster[:,0],cluster[:,1],c=colors[i],marker='.')   #展示聚类子集内的样本点
    plt.plot(centers[i][0],centers[i][1],'o',markerfacecolor=colors[i],markeredgecolor='k',markersize=4) #展示各聚类子集的中心
plt.show() 
 

 

 

3、spark算法

package com.sunbin


import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.clustering.{KMeans, KMeansModel}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.sql.SparkSession
import org.apache.log4j.{ Level, Logger }


/**
  * 聚合算法kmeans
  *
  */
object KMeansdemo {

  def main(args: Array[String]): Unit = {
  Logger.getRootLogger.setLevel(Level.WARN)

    //创建SparkContext
    val conf = new SparkConf().setMaster("local[4]").setAppName("KMeans")
    val sc = new SparkContext(conf)

    //加载数据
    val path = "data.txt"
    val data = sc.textFile(path)
    val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache()

    //通过KMeans将数据分成两个阵营
    val numClusters = 2
    val numIterations = 20
    val clusters = KMeans.train(parsedData, numClusters, numIterations)

    //输出当前的聚类中心
    clusters.clusterCenters.foreach(println _)

    val index = clusters.predict(Vectors.dense(Array(8.9,7.2,9.0)))
    println(s"Vector[8.9, 7.2, 9.0] 属于聚类索引为:${index} 中心坐标为:${clusters.clusterCenters(index)} 的簇")

    //计算误差平方和
    val WSSSE = clusters.computeCost(parsedData)
    println("误差平方和 = " + WSSSE)

    
    // 保存模型
//    clusters.save(sc, "target/KMeansModel")
//    val sameModel = KMeansModel.load(sc, "target/KMeansModel")

    sc.stop()

  }
}

 

 

分享到:
评论

相关推荐

    k-均值聚类算法实现灰度图像分割_K均值算法_K._图像聚类_图像聚类_图像分割_

    k-均值聚类算法(K-Means Clustering)是一种广泛应用的数据分析方法,尤其在图像处理领域,常用于图像的灰度图像分割。该算法通过将数据集中的样本点分配到最近的聚类中心所属的类别,以此来达到划分的目的。在图像...

    基于K-means聚类算法的图像分割及其MATLAB实现

    基于K-means聚类算法的图像分割 算法的基本原理:  基于K-means聚类算法的图像分割以图像中的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。 算法步骤: ①随机选取...

    K均值聚类即K-Means算法详解PPT

    K-Means聚类算法详解 K-Means聚类算法是一种常用的无监督学习方法,主要用于将数据点分组成不同的簇,以便更好地理解数据的结构和特征。在这里,我们将详细介绍K-Means聚类算法的原理、步骤和应用。 一、聚类算法...

    模式识别K-均值聚类法matlab实现程序

    标题与描述中的“模式识别K-均值聚类法matlab实现程序”指向了一种在数据科学和机器学习领域广泛使用的算法——K-均值聚类(K-Means Clustering)。K-均值聚类是一种无监督学习方法,主要用于数据的分类与模式识别,其...

    基于K-means聚类算法的图像分割(MATLAB实现).rar_ASV聚类_K-Means图像分割_k means_rest

    K-means算法的目标是将n个数据点分配到k个簇中,使得每个数据点都属于与其最近的质心所在的簇。这个过程包括两个主要步骤:初始化质心和迭代更新。初始化时,通常随机选择k个数据点作为初始质心;然后,根据每个数据...

    delphi xe5编写的k-均值聚类算法

    K-均值聚类算法是一种广泛应用的数据挖掘技术,主要用于无监督学习中的数据分类。它通过迭代过程将数据集划分为K个不同的簇,使得每个数据点都属于最近的均值(或中心)所在的簇。在Delphi XE5中实现K-均值聚类算法...

    K-均值聚类法实现脑图像自动阈值化分割

    参考了其他学者的研究,如基于K-最近邻规则的分割算法、改进的K-平均聚类算法和K-Means初始聚类中心优化算法等,进一步深化了对K-均值聚类法在医学图像分割领域的理解。 总的来说,K-均值聚类法在脑图像自动阈值化...

    K-means聚类算法.pptx

    以下是K-means算法的详细解析: ### 算法原理 K-means算法基于以下基本思想: 1. **初始选择**:随机选取k个数据点作为初始的聚类中心(或称为质心)。 2. **分配阶段**:计算所有数据点与这k个质心的距离,根据...

    K-均值聚类实现路标检测

    本项目采用K-均值聚类算法来实现这一功能,这是一种经典的无监督机器学习方法,常用于数据分类和分割。接下来,我们将详细讨论K-均值聚类及其在路标检测中的应用。 K-均值聚类是一种迭代算法,其目标是将数据集分为...

    k-means聚类 动画演示

    通过观看这样的动画,初学者可以更好地理解k-means算法的工作原理,以及数据分布和类别中心变动如何影响聚类结果。同时,这也是一种生动的教学工具,有助于增强对复杂统计概念的理解。在"k-means动画聚类"的压缩包中...

    K-均值聚类数据集.zip

    《K-均值聚类:理解与应用》 K-均值聚类是一种广泛应用的数据挖掘技术,用于将数据集中的对象分成不同的组或类别,这些组被称为簇。它基于距离度量,通过迭代过程来最小化簇内的变异性,最大化簇间的差异性。在本...

    k-means聚类分析

    在给定的资料中,包含了一个名为`kmeans.m`的MATLAB源代码,这可能是实现k-means算法的核心函数,而`main.m`则可能是调用和运行这个函数的主程序。 k-means算法的基本步骤如下: 1. 初始化:选择K个初始质心,通常...

    K-MEANS聚类算法的实现

    K-MEANS聚类算法的实现 K-MEANS聚类算法是一种常用的无监督机器学习算法,主要用于对数据进行聚类分析。该算法的主要思想是将相似的数据对象划分到同一个簇中,使得簇内的数据对象尽量相似,而簇间的数据对象尽量...

    K-均值聚类

    K-均值聚类是一种广泛应用的数据...理解其原理、选择合适的K值、预处理数据、评估聚类效果以及优化算法都是实施K-均值聚类过程中不可忽视的部分。在实际应用中,我们还需要结合业务背景和需求来选择最合适的聚类方法。

    k-means聚类学习算法matlab源码

    K-means算法的基本思想是将数据集划分为K个不同的簇,每个簇由其内部点的均值(或称为质心)来代表。算法主要分为两个步骤:初始化和迭代。首先,选择K个初始质心,通常随机选取;然后,将每个数据点分配到最近的...

    变换K-均值聚类_Transformed K-means Clustering

    为了克服这些问题,研究人员提出了“变换K-均值聚类”(Transformed K-means Clustering)这一创新性的框架,它结合了变换学习(Transform Learning)和K-均值聚类,以提高聚类效果。 变换学习是一种新兴的表示学习...

    K-均值聚类_k均值聚类_K均值_K._k均值matlab_K均值聚类算法_

    《K-均值聚类算法在Matlab中的实现》 K-均值聚类(K-Means Clustering)是一种广泛应用的数据分析方法,主要用于无监督学习中的数据分组。它通过迭代过程,将数据集中的样本点分配到最近的聚类中心所属的簇中,以...

    k-means聚类算法

    **K-均值聚类算法详解** K-均值(K-Means)是一种广泛应用的无监督学习算法,主要用于数据的聚类分析。它通过迭代寻找数据的最佳分组,使得同一组内的数据点彼此相似,而不同组间的数据点差异较大。在原始的K-均值...

    K均值聚类(K-Means聚类)-聚类算法-聚类可视化-MATLAB代码

    K均值聚类(K-Means聚类)-聚类算法-聚类可视化-MATLAB代码 本代码详细图文介绍,请点击博客主页查找对应文章查看。可保证运行,运行失败或报错免费解决。 ‌k均值聚类算法的基本概念和原理‌ ‌k均值聚类算法(k-...

Global site tag (gtag.js) - Google Analytics