大数据挖掘实践——K-Means聚类算法

本文介绍了K-Means聚类算法在大数据挖掘中的实践,阐述了算法的基本思想和步骤,包括初始化中心点、计算点到中心的距离、更新类别和中心点,直至收敛。通过实例展示了算法的实现过程,总结了K-Means算法的优势如简单易懂,以及面临的挑战如K值选择和大规模数据处理的效率问题。
摘要由CSDN通过智能技术生成

大数据挖掘实践

K-Means聚类算法

引言:

有n个数据D={X1,X2,…,Xn},我们想把这些数据分成K个类。这个问题的关键在于K为多大时分类是合适的,并且我们也不好选择一个好的初始点。所以我们在这里引入距离的概念(以欧式距离为例)。我们想找到K个中心,数据离哪些中心近我们就将其定义为哪一类,同时我们的K个中心能够使这个分类最合理也就是每个点到其中心的距离的和最小。提炼为:找K个中心,数据属于距离离其最近的中心一类,这K个中心能使所有数据距离其中心的距离和最小。

算法介绍:

L-Means又叫做K均值算法,是一个已知聚类类别数的划分算法。它是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标。K表示聚簇中心的个数,代表数据中存在多少数据簇。K-Means可以高效地处理大数据集,它的输入自然是数据集和类别数,聚类结果是划分为k类的k个数据集。K-Means算法类似于KNN算法,都用到了距离矢量度量。

算法框架:
(1)、设定数字k,从n个初始数据中随机的设置k个点为聚类中心点。
(2)、针对n个点的每个数据点,遍历计算到k个聚类中心点的距离,最后按照离哪个中心点最近,就划分到那个类别中。
(3)、对每个已经划分好类别的n个点,对同个类别的点求均值,作为此类别新的中心点。
(4)、循环(2),(3)直到最终中心点收敛。
在这里插入图片描述
(流程图)

数据描述:
训练数据集
创建一个input.txt文件,随机构造几组数据,输入到txt文件中
在这里插入图片描述

实践过程
代码实现:
创建主实现类:

package KMeans;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;

/**
 * k均值算法工具类
 *
 * @author wxy
 *
 */
public class KMeansTool {
   
   // 输入数据文件地址
   private String filePath;
   // 分类类别个数
   private int classNum;
   // 类名称
   private ArrayList<String> classNames;
   // 聚类坐标点
   private ArrayList<Point> classPoints;
   // 所有的数据左边点
   private ArrayList<Point> totalPoints;

   public KMeansTool(String filePath, int classNum) {
   
      this.filePath = filePath;
      this.classNum = classNum;
      readDataFile();
   }

   /**
    * 从文件中读取数据
    */
   private void readDataFile() {
   
      File file = new File(filePath);
      ArrayList<String[]> dataArray = new ArrayList<String[]>();

      try {
   
         BufferedReader in = new BufferedReader(new FileReader(file));
         String str;
         String[] tempArray;
         while ((str = in.readLine()) != null) {
   
            tempArray = str.split(" ")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值