• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: C#
  • 标签: 算法  

资源简介

文件中包含K-Means聚类算法C#版本,一个文件中包含7个函数,使用的时候直接将C#文件复制到项目中即可使用,调用的时候主函数会直接返回结果

资源截图

代码片段和文件信息




using System;
using System.Collections;
using System.Collections.Generic;
/**

* @author aturbo
* 1、随机选择k个点作为中心点(centroid)
* 2、计算点到各个类中心的距离;
* 3、将点放入最近的中心点所在的类
* 4、重新计算中心点
* 5、判断目标函数是否收敛,收敛停止,否则循环2-4步

*/
public class MyKmeans
{

    public static  double[][] points = { new double[]{ 1 1 }new double[] { 2 1 }new double[] { 1 2 } new double[]{ 2 2 } new double[]{ 3 3 } new double[]{ 8 8 } new double[]{ 9 8 }
            new double[]{ 8 9 } new double[]{ 9 9 } };

    /**
 * 随机选择k个点作为中心点
 * @param k 
 * @return k个中心点
 */
    private static double[][] chooseinitK(int k)
    {
        double[][] cluster = new double[k][];
        List set = new List();
        for (int i = 0; i < points.Length; i++)
        {
            set.Add(i);
        }
        //在set中剩下的序列点就为随机选择的
        for (int i = 0; i < (points.Length - k);)
        {
            Random random = new Random();
            int a = random.Next(points.Length);
            if (!set.Contains(a))
                continue;
            set.Remove(a);
            //System.out.println(“a“ + a);
            i++;
        }
        //Iterator iterator = set.iterator();
        int j = 0;
        foreach (int iterator  in set)
        {
            cluster[j] = points[iterator];
            j++;
        }
        for (int i = 0; i < cluster.Length; i++)
        {
            //System.out.println(“随机选择的k个节点:“ + cluster[i][0] + “\t“ + cluster[i][1]);
        }
        return cluster;
    }
    /**
 * 欧式距离计算公式
 * @param center (中心)点
 * @param otherpoint 
 * @return 欧式距离
 */
    private static double eurDistance(double[] center double[] otherpoint)
    {
        double distance = 0.0;
        for (int i = 0; i < center.Length; i++)
        {
            distance += ((center[i] - otherpoint[i]) * (center[i] - otherpoint[i]));
        }
        distance = Math.Sqrt(distance);
        return distance;
    }
    /**
 * 目标函数——也就是每个聚类中的点到它中心点的距离和
 * @param center 中心点
 * @param cluster 划分的(中间)聚类
 * @return cost
 */
    private static double cost(double[][] center List[] cluster)
    {
        double cost = 0.0;
        for (int i = 0; i < cluster.Length; i++)
        {
            for (int j = 0; j < cluster[i].Count; j++)
            {
                double tempCost = 0.0;
                for (int k = 0; k < center.Length; k++)
                {
                    //System.out.println(cluster[i].get(j)[k]);
                    tempCost += (cluster[i][j][k] - center[i][k]) * (cluster[i][j][k] - center[i][k]);
                }

                cost += Math.Sqrt(tempCost);
            }

        }
        return cost;
    }
    /**
 * 聚类算法——将所有点和各中心点计算距离,将点放入最近距离点的类中
 * @param points 所有点
 * @param centers 中心点
 * @param k
 * @return 聚类
 */
    private static List[] returnCluster(double[][] points double[][] centers int k)
   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5647  2019-04-25 15:50  kmeans\MyKmeans.cs

     目录          0  2019-04-25 16:07  kmeans

----------- ---------  ---------- -----  ----

                 5647                    2


评论

共有 条评论