k-means聚类算法的【java描述】

聚类分析——客户分群分析 聚类分析练习——客户分群 阅读详情

1. 什么是 k-means 聚类算法?

 

  从网上找到了很多定义,这里选取比较典型的几个;

  K-Mean 分群法是一种分割式分群方法,其主要目标是要在大量高纬的资料点中找出

       具有代表性的资料点;这些资料点可以称为群中心,代表点;然后再根据这些

        群中心,进行后续的处理,这些处理可以包含

   1 )资料压缩:以少数的资料点来代表大量的资料,达到资料压缩的功能;

   2 )资料分类:以少数代表点来代表特点类别的资料,可以降低资料量及计算量;

 

       分割式分群法的目的是希望盡量減小每個群聚中,每一點與群中心的距離平方差(square error)。 

 假設我們現在有一組包含c個群聚的資料,其中第 k 個群聚可以用集合 Gk來表示,假設 Gk包含nk筆

 資料 {x1, x2, …, xnk),此群聚中心為yk,則該群聚的平方差 ek可以定義為:

             ek = S i |xi-yk|2 ,其中 xi是屬於第 k 群的資料點。

 而這c個群聚的總和平方差E便是每個群聚的平方差總和:

E = S k=1~c ek

 我們分群的方法,就變成是一個最佳化的問題,換句話說,我們要如何選取 c 個群聚以及相關的群中心,

 使得 E 的值為最小。

 

2 .处理流程

( 1 )   从 c 个数据对象任意选择 k 个对象作为初始聚类中心;
( 2 )   循环( 3 )到( 4 )直到每个聚类不再发生变化为止;
( 3 )   根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;
( 4 )   重新计算每个(有变化)聚类的均值(中心对象)

 

 

3. java 算法的实现说明

  1) 假设给点一组 c 点资料 X = {x1, ..., xc} ,每一点都有 d 维;给定一个群聚的数目 k, 求其

     最好的聚类结果。

  2 ) BasicKMeans.java 主类

        int coordCount = 250;// 原始的资料个树

        int dimensions = 100;// 每个资料的纬度数目

        double[][] coordinates = new double[coordCount][dimensions];

  这里假设 c 点资料为 coordinates 对象,其中 c 为 coordCount,d 为 dimensions 相应值。

        int mk = 30; // 想要群聚的数目

   根据群聚数目定义 mk 个群聚类对象

      mProtoClusters = new ProtoCluster[mK];// 见 ProtoCluster 类说明

   // 首先随机选取 mk 个原始资料点作为群聚类

     mProtoClusters[i]= new ProtoCluster (coordinates[j] );//i 依此为 0 到 mk 的值; j 为 0 到 coordCount 的值

  定义一个变量用于记录和跟踪每个资料点属于哪个群聚类

    mClusterAssignments = new int[coordCount];

    mClusterAssignments[j]=i;// 表示第 j 个资料点对象属于第 i 个群聚类

   // 开始循环

  •    // 依次调用计算每个群聚类的均值

   mProtoClusters[i].updateCenter(mCoordinates);// 计算第 i 个聚类对象的均值

 

  •    // 依次计算每个资料点到中心点的距离,然后根据最小值划分到相应的群集类中;

  采用距离平方差来表示资料点到中心点的距离;

   //定义一个变量,来表示资料点到中心点的距离

   mDistanceCache = new double[coordCount ][mk];

    //其中mDistanceCache[i][j]表示第i个资料点到第j个群聚对象中心点的距离;

    //距离算法描述():

     a)依次取出每个资料点对象double[] coord = coordinates[i];

        b)再依次取出每个群聚类中的中心点对象double[] center = mProtoClusters[j].mCenter;

        c)计算coord对象与center对象之间的距离 

     double distance(double[] coord, double[] center) {
        int len = coord.length;
        double sumSquared = 0.0;
        for (int i=0; i<len; i++) {
            double v = coord[i] - center[i];
            sumSquared += v*v; //平方差
        }
        return Math.sqrt(sumSquared);
      } 

     d)循环执行上面的流程,把结果记录在mDistanceCache[i][j]中;

  •       //比较出最小距离,然后根据最小距离重新对相应对象进行划分

     依次比较每个资料点的 最短中心距离,
      int nearestCluster(int ndx) {
        int nearest = -1;
        double min = Double.MAX_VALUE;  
        for (int c = 0; c < mK; c++) {
                double d = mDistanceCache[ndx][c];
                if (d < min) {
                    min = d;
                    nearest = c;
                }          
           }
        return nearest;
       }
  该方法返回该资料点对应的最短中心距离的群聚类的索引值;
  比较每个 nearestCluster[coordCount] 的值和mClusterAssignments[coordCount]
  的值是否相等,如果全相等表示所有的点已经是最佳距离了,直接返回;
  否则需要重新调整资料点和群聚类的关系,调整完毕后再重新开始循环;

  调整时需要更新下列数据:

    a)更新mProtoClusters[i]中的mCurrentMembership集合;

       b)更新mClusterAssignments[i]中对应的值;

   然后重行开始循环

   3 ) ProtoCluster.java 是一个包含代表点的群聚类,该类有两个最主要的属性"代表点"和"群中心";

         int[] mCurrentMembership;// 用于表示每个群聚包含的数据资料点集合

        double[] mCenter;// 用于表示每个聚类对象的均值,也就是中心对象

         void updateCenter(double[][] coordinates) {

       // 该方法计算 聚类对象的均值 ;

        // 根据 mCurrentMembership 取得原始资料点对象 coord ,该对象是 coordinates 的一个子集;然后取出该子集的均值;

    取均值的算法很简单,可以把 coordinates 想象成一个 m*n 的距阵 , 每个均值就是每个纵向列的取和平均值 , 该值保

    存在 mCenter 中

       for (int i=0; i< mCurrentMembership.length; i++) {

               double[] coord = coordinates[mCurrentMembership[i]];

               for (int j=0; j<coord.length; j++) {

                        mCenter[j] += coord[j];// 得到每个纵向列的和;

               }

               f or (int i=0; i<mCenter.length; i++) {

                    mCenter[i] /= mCurrentSize; // 对每个纵向列取平均值

                }

           } 

用java实现K-means算法,k-means聚类算法原理 阅读详情

相关推荐

K-Means聚类算法详解

KMeans算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。   K-Means聚类算法主要分为三个步骤: (1)第一步是为待聚类的点寻找聚类中心 (2)第二步是计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中去 (3)第三步是计算每个聚类中所

古韦的专栏 2万+

ap聚类算法java实现代码_聚类算法之单链接算法java实现

聚类算法中基于链接的算法大致有三种:单链接算法(single link),平均链接算法(average link),最小生成数算法(minimum spanning tree)。现在实现单链接算法,其他算法以后再续吧。单链接算法的过程是 首先生成各个元素的距离矩阵,根据距离和阀值的比对来控制生成的聚类个数,阀值越大,生成的聚类越少,直到同属一类。下面例子实现了根据经纬度来实现城市的聚类。packa...

weixin_42613017的博客 297

【JAVA实现】K-means聚类算法

上一篇博文介绍了层次聚类算法的实现http://blog.youkuaiyun.com/c_son/article/details/43900503 ,可以发现其效率比较低下,因为每次迭代都要计算每两个聚簇之间的距离。这次的k-means算法在效率上要优于层次聚类算法。               算法实现:        1)从样本D中随机选取K个元素,作为K个簇的中心        2)分别计算剩下

C_son的专栏 5427

客群聚类画像的克星,看这十种分群方法及其分布可视化的实现技巧就够了

客群聚类画像的克星,看这十种分群方法及其分布可视化的实现技巧就够了

weixin_45545159的博客 1111

K-means算法的java实现,聚类分析681个三国武将

一,k-means算法介绍:   k-means算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。 k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各

逆风奔跑。。不要去考虑什么天赋异禀,一切都来自经历和渴望。 1万+

K-Means聚类算法JAVA实现

使用java实现K-Means聚类算法

x_8efengfan的博客 4814

理论+股市数据实战,总结了五种常用聚类分析算法

来源:数据STUDIO大量数据中具有"相似"特征的数据点或样本划分为一个类别。聚类分析提供了样本集在非监督模式下的类别划分。基本思想物以类聚、人以群分常用于数据探索或挖掘前期没有先验经验做...

Python数据之道 1万+

嵌入式学习笔记——EEPROM(M24M01)

M24M01是ST公司出品的1Mbit(128Kbyte)I2C兼容EEPROM,兼容所有I2C总线模式(1MHz、400kHz、100kHz),Page大小为256字节,支持硬件写保护,超过400万次写入操作,超过200年的数据留存通过模块化设计,涵盖了 M24M01-RMN6P 的功能介绍、引脚架构、硬件连线、模块化代码以及性能优化思路,我们将 M24M01 EEPROM 与 STM32 的集成变得高效而可靠。希望能帮你在 STM32 上快速上手,并让你的项目存储管理更高效可靠。

2301_80488241的博客 1656

数据聚类与分群分析

本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》 KMeans算法 KMeans算法名称中的K代表类别数量,Means代表每个类别内样本的均值,所以KMeans算法又称为K-均值算法。KMeans算法以距离作为样本间相似度的度量标准,将距离相近的样本分配至同一个类别。样本间距离的计算方式可以是欧氏距离、曼哈顿距离、余弦相似度等,KMeans算法通常采用欧氏距离来度量各样本间的距离。 # 1.读取数据 import pandas as pd data = pd.read_excel(.

m0_46388544的博客 1864

从零搭建AGV避障系统:我用激光雷达+树莓派视觉模块踩过的那些坑

本文分享了基于树莓派与国产激光雷达从零搭建低成本AGV避障系统的实战经验。针对复杂仓库环境,详细剖析了激光雷达数据噪声、视觉模块算力瓶颈、IMU漂移等核心挑战,并提供了多传感器融合、软件架构设计与避障决策的具体解决方案,为中小型自动化改造项目提供了宝贵参考。

git9versioner的博客 983

Microchip Studio 7.0 从零开始:下载、安装到首个AVR工程实战

本文为AVR单片机开发新手提供了Microchip Studio 7.0的完整入门指南。从官方下载、避坑安装,到创建首个GCC C工程、编写LED闪烁代码,再到项目配置、仿真调试与程序烧录,手把手带你完成从零到一的实战过程,是掌握AVR开发环境的必备教程。

weixin_29200741的博客 517

java的k-means算法_k-means聚类算法的java实现描述!

从网上找到了很多定义,这里选取比较典型的几个;K-Mean分群法是一种分割式分群方法,其主要目标是要在大量高纬的资料点中找出具有代表性的资料点;这些资料点可以称为群中心,代表点;然后再根据这些群中心,进行后续的处理,这些处理可以包含1)资料压缩:以少数的资料点来代表大量的资料,达到资料压缩的功能;2)资料分类:以少数代表点来代表特点类别的资料,可以降低资料量及计算量;分割式分群法的目的是希望盡量減...

weixin_30269407的博客 379

Hypermesh二次开发实战:Tcl命令分类与常用函数详解(附避坑指南)

本文深入解析Hypermesh二次开发中Tcl命令的三大核心类别:界面命令、查询命令与修改命令。重点剖析了*createmark集合管理与hm_getvalue信息查询等关键函数的实战用法,并提供了避免Mark覆盖、生命周期管理等常见陷阱的实用指南,旨在帮助CAE工程师构建高效可靠的自动化前处理流程。

weixin_29233333的博客 237

聚类算法的java实现_k-means聚类算法的java实现描述!

从网上找到了很多定义,这里选取比较典型的几个;K-Mean分群法是一种分割式分群方法,其主要目标是要在大量高纬的资料点中找出具有代表性的资料点;这些资料点可以称为群中心,代表点;然后再根据这些群中心,进行后续的处理,这些处理可以包含1)资料压缩:以少数的资料点来代表大量的资料,达到资料压缩的功能;2)资料分类:以少数代表点来代表特点类别的资料,可以降低资料量及计算量;分割式分群法的目的是希望盡量減...

weixin_30988079的博客 682

「极简」扣子(coze)教程 | 细节决定成败!这个小功能让用户满意度飙升,讲的太细了

这一期大师兄通过向扣子(coze)应用添加提示语的方法向用户显示系统运行的状态。

u014527622的博客 2111

使用Google Earth Engine下载JRC全球水体数据

通过Google Earth Engine平台和提供的源代码,研究人员和水资源管理者可以方便地获取和利用这一重要的水资源监测数据集,从而开展相关的研究和决策支持工作。要使用Google Earth Engine下载JRC全球水体数据,首先需要在Google Earth Engine平台上进行注册和登录。JRC全球水体数据是由欧洲联合研究中心开发的高分辨率全球水体分类数据集,覆盖了整个地球的陆地和水域。下载完成后,你可以使用各种遥感数据处理软件来打开和分析这些数据,以满足不同的研究和应用需求。

LrlDebug的博客 1157

k-means聚类算法的java实现描述

从网上找到了很多定义,这里选取比较典型的几个; K-Mean 分群法是一种分割式分群方法,其主要目标是要在大量高纬的资料点中找出 具有代表性的资料点;这些资料点可以称为群中心,代表点;然后再根据这些 群中心,进行后续...

cuijuyong7477的博客 150

控制科学与工程(自动化)保研经验【1】——预备篇

个人情况 学校:中末流211 专业:自动化(学科评估B-) 年份:2019 排名:4/128 绩点:4.16/5 竞赛:三个国二(包括数模国赛美赛)、两个省一(机器人、电子设计竞赛) 【本科期间竞赛做的比较多,是我的一大亮点,可以在筛简历这关适当弥补专业排名的不足】 科研:一个校级的大创项目(水) 夏令营报名:中科大科学岛、中科大本部、自动化所、沈自所、北航(仪器17系)、山大、浙江大学、南开、同...

Control Everything 1万+

【转】k-means聚类算法的java实现描述

从网上找到了很多定义,这里选取比较典型的几个; K-Mean 分群法是一种分割式分群方法,其主要目标是要在大量高纬的资料点中找出 具有代表性的资料点;这些资料点可以称为群中心,代表点;然后再根据这些 群中心,进行后续的处理,这些处理可以包含 1 )资料压缩:以少数的资料点来代表大量的资料,达到资料压缩的功能; 2 )资料分类:以少数代表点来代表特点类别的资料,可以降低资料...

创意恒动力 186

C#上位机开发揭秘:从新手到大神的蜕变之路,代码实例全解析!

上位机通常是与硬件设备(如嵌入式系统、PLC、传感器等)进行通信的计算机程序。它的作用是通过某种通信协议(如串口、TCP/IP 等)向设备发送命令,并接收设备的反馈数据。上位机需要有一个图形用户界面(GUI)来展示数据或控制硬件设备。通过本篇教程,我们介绍了 C# 上位机开发的基本步骤,从串口通信的实现,到图形用户界面的构建,再到进阶功能的实现。作为上位机开发的新手,掌握这些基础知识是非常重要的。而随着经验的积累,你可以逐步尝试更复杂的功能,比如多线程处理、数据分析与存储等。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 4828

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

kmeans python interation flag_Bisecting k-means聚类算法实现

Bisecting k-means聚类算法,即二分k均值算法,它是k-means聚类算法的一个变体,主要是为了改进k-means算法随机选择初始质心的随机性造成聚类结果不确定性的问题,而Bisectingk-means算法受随机选择初始质心的影响比较小。首先,我们考虑在欧几里德空间中,衡量簇的质量通常使用如下度量:误差平方和(Sumof the Squared Error,简称SSE),也就是要计...

weixin_26782929的博客 294

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

K-Means(K均值聚类算法)

K-Means(K均值聚类算法)1.前言要学习聚类算法就要知道聚类学习算法是什么,为什么要学习聚类学习聚类学习算法,有什么用途,下面就简单的做一下介绍,并且详细的说明k—means均值聚类学习算法。2.是什么问题 机器学习中有两类大问题,一类是分类,一类是聚类。聚类问题属于无监督学习范畴,分类属于监督学习范畴。也就是说在监督学习领域比如朴素贝叶斯、SVM等,一开始都会给定类别y,说明该样本的类别,比

mejustdoit的专栏 2603

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

K-Means算法的代码实现(Java)

K-Means算法的代码实现(Java)   2013-03-02 20:28:41|  分类: 数据挖掘 |  标签: |举报 |字号大中小 订阅 //package cn.edu.pku.ss.dm.cluster; import java.io.BufferedReader; import java.io.BufferedWriter; import jav

daguocai的专栏 2283

基于欧式距离的聚类算法的Kmeans作业

System.out.println(“中心点” + num + “坐标:(” + i.x[0] + “,” + i.x[1] + “)”);System.out.println(“中心点” + num + “坐标:(” + i.x[0] + “,” + i.x[1] + “)”);如果计算出来的中心和聚类中心相同,则退出循环,否则以新的计算出来的中心为每个聚类的聚类中心,不断重复3 - 4步。对每个样本点计算到k个聚类中心的距离,采用的是欧氏距离,将其分类到距离最近的类别中。选择k,聚类的数量。

wm1634208243的博客 1109

【聚类算法】K-means算法

K-means算法是一种常用的聚类分析方法,其目的是将n个数据点划分为k个簇,使得每个数据点属于离它最近的均值(即簇中心)对应的簇,以此来最小化簇内的平方误差之和。

大雨淅淅的博客 5704

JAVA实现K-means聚类

K-means算法是比较经典的聚类算法,算法的基本思想是选取K个点(随机)作为中心进行聚类,然后对聚类的结果计算该类的质心,通过迭代的方法不断更新质心,直到质心不变或稍微移动为止,则最后的聚类结果就是最后的聚类结果

小鸡慢慢的专栏 2万+
上一篇: 带cookie保存功能的DIV拖拽效果
下一篇: 如何判断链表中有环
Java2King
博客等级 码龄18年 221粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值