kmeans算法简单实现

# -*- coding:utf-8 -*-

# kmeans简单实现

"""
kmeans是经典的无监督聚类方法。步骤可以分为以下几步:
1.确定聚类的数目k
2.随机初始化k个聚类中心
3.根据准则(一般计算欧式距离)将数据分配到对应的聚类中心
4.更新每个类别的聚类中心(均值)
5.重复步骤2-步骤4若干次
"""


import numpy as np
import random
from collections import  defaultdict
import matplotlib.pyplot as plt

class KMeans():

    def __init__(self, data, k, max_iter=5):
        # 初始化变量
        self._data = data # 数据
        self._k = k # 簇
        self._max_iter = max_iter # 最大迭代次数
        self._example_num = data.shape[0] # 有多少个数据
        self._centroids = None # 设置质心
        self._cluster_data_indices = None # 具体的每个簇

    def _random_init_centroid(self):
        # 随机初始化质心,保证质心在数据点之中
        # sample函数,随机选择一个点做初始化质心
        random_centroid_indicss = random.sample(
            range(3, self._example_num), self._k)
        centroids = self._data[random_centroid_indicss]
        self._ce
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K-Means算法是一种常见的无监督聚类算法,适用于大规模数据集的聚类分析。在Java编程语言中,实现K-Means算法可以使用一些开源的第三方机器学习库,例如Weka、Apache Mahout等。 以Weka为例,其提供了丰富的聚类算法实现,包括K-Means。用户可以使用Weka提供的API来实现K-Means算法。首先需要将数据转化为Weka框架中的Instances格式,即一个Instances对象表示一个实例集合,其中每个实例由多个属性组成。然后,通过构建一个SimpleKMeans对象,将转化后的数据传递给SimpleKMeans对象,即可进行聚类分析。 简单示例代码如下: ```java import weka.clusterers.SimpleKMeans; import weka.core.Instances; import weka.core.converters.ConverterUtils.DataSource; public class KMeansDemo { public static void main(String[] args) { try { Instances data = DataSource.read("path/to/dataset.arff"); SimpleKMeans kmeans = new SimpleKMeans(); kmeans.setSeed(10); kmeans.setPreserveInstancesOrder(true); kmeans.setNumClusters(3); kmeans.buildClusterer(data); System.out.println(kmeans.toString()); // 输出聚类结果 } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码首先从数据源加载数据集,然后创建一个SimpleKMeans对象,设置其参数(例如种子、簇数等),最后将数据集传递给kmeans实例对象进行聚类分析。最终输出结果可以通过SimpleKMeans对象的toString方法获取。 需要注意的是,K-Means算法需要对原始数据进行预处理(例如特征缩放、归一化等),特别是当数据集的特征数很多时。此外,Weka还提供了其他调节聚类效果的参数,例如聚类中心初始化方法、聚类质量评估方法等,用户可以根据实际情况进行调节。 综上所述,使用Java实现K-Means算法可以通过第三方机器学习库,例如Weka、Mahout等来完成。在实现过程中需要注意数据预处理及算法调节参数的设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值