ホームページ  >  記事  >  バックエンド開発  >  C# で K 平均法クラスタリング アルゴリズムを実装する方法

C# で K 平均法クラスタリング アルゴリズムを実装する方法

王林
王林オリジナル
2023-09-19 13:45:291432ブラウズ

C# で K 平均法クラスタリング アルゴリズムを実装する方法

K 平均法クラスタリング アルゴリズムを C で実装する方法

#はじめに:
クラスタリングは、機械学習やデータ マイニングの分野で使用される一般的なデータ分析テクノロジです。広く使われています。その中でも、K-means クラスタリング アルゴリズムはシンプルでよく使用されるクラスタリング手法です。この記事では、C# 言語を使用して K-means クラスタリング アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。

1. K 平均法クラスタリング アルゴリズムの概要
K 平均法クラスタリング アルゴリズムは、データのセットを指定された数のクラスターに分割する (クラスター化) ために使用される教師なし学習手法です。基本的な考え方は、データ ポイント間のユークリッド距離を計算して、データ ポイントを最も近い距離を持つクラスターに分割することです。アルゴリズムの具体的な手順は次のとおりです。

  1. 初期化: 最初のクラスタリング センターとして K 個のデータ ポイントをランダムに選択します。
  2. 距離計算: 各データ ポイントとクラスター中心間のユークリッド距離を計算します。
  3. データ ポイントをマークする: 各データ ポイントを最も近いクラスターの中心に割り当てます。
  4. クラスター中心の更新: 割り当てられたデータ ポイントに基づいて、新しいクラスター中心位置を計算します。
  5. 反復: クラスターの中心が変更されなくなるか、事前に設定された反復回数に達するまで、ステップ 2 ~ 4 を繰り返します。

2. C での K-means クラスタリング アルゴリズムの実装
#以下は、C# 言語を使用して K-means クラスタリング アルゴリズムを実装するサンプル コードです。 MathNet.Numerics ライブラリは、ベクトル計算と行列演算を実行するコードで使用されます。

using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Double;

public class KMeans
{
    private readonly int k; // 聚类数
    private readonly int maxIterations; // 最大迭代次数
    private Matrix<double> data; // 数据
    private Matrix<double> centroids; // 聚类中心

    public KMeans(int k, int maxIterations)
    {
        this.k = k;
        this.maxIterations = maxIterations;
    }

    public void Fit(Matrix<double> data)
    {
        this.data = data;
        Random random = new Random();

        // 随机选择K个数据点作为初始的聚类中心
        centroids = Matrix<double>.Build.Dense(k, data.ColumnCount);
        for (int i = 0; i < k; i++)
        {
            int index = random.Next(data.RowCount);
            centroids.SetRow(i, data.Row(index));
        }

        for (int iteration = 0; iteration < maxIterations; iteration++)
        {
            Matrix<double>[] clusters = new Matrix<double>[k];

            // 初始化聚类
            for (int i = 0; i < k; i++)
            {
                clusters[i] = Matrix<double>.Build.Dense(0, data.ColumnCount);
            }

            // 计算距离并分配数据点到最近的聚类中心
            for (int i = 0; i < data.RowCount; i++)
            {
                Vector<double> point = data.Row(i);
                double minDistance = double.MaxValue;
                int closestCentroid = 0;

                for (int j = 0; j < k; j++)
                {
                    double distance = Distance(point, centroids.Row(j));

                    if (distance < minDistance)
                    {
                        minDistance = distance;
                        closestCentroid = j;
                    }
                }

                clusters[closestCentroid] = clusters[closestCentroid].Stack(point);
            }

            // 更新聚类中心
            for (int i = 0; i < k; i++)
            {
                if (clusters[i].RowCount > 0)
                {
                    centroids.SetRow(i, clusters[i].RowSums().Divide(clusters[i].RowCount));
                }
            }
        }
    }

    private double Distance(Vector<double> a, Vector<double> b)
    {
        return (a.Subtract(b)).Norm(2);
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Matrix<double> data = Matrix<double>.Build.DenseOfArray(new double[,]
        {
            {1, 2},
            {2, 1},
            {4, 5},
            {5, 4},
            {6, 5},
            {7, 6}
        });

        int k = 2;
        int maxIterations = 100;
        KMeans kMeans = new KMeans(k, maxIterations);
        kMeans.Fit(data);

        // 输出聚类结果
        Console.WriteLine("聚类中心:");
        Console.WriteLine(kMeans.Centroids);
    }
}

上記のコードは、C# 言語を使用して K 平均法クラスタリング アルゴリズムを実装する方法を示しています。まず、K-means クラスタリング アルゴリズムを表す KMeans クラスを定義しました。これには、クラスター数や最大反復回数などのパラメーターが含まれます。次に、Fit 法では、最初のクラスター中心として K 個のデータ点をランダムに選択し、各データ点とクラスター中心間の距離を繰り返し計算し、それを最も近いクラスター中心に割り当てます。最後に、クラスターの中心位置が更新され、停止条件が満たされるまでデータ点の距離が再計算されます。

Main メソッドでは、デモ用に単純な 2 次元データ セットを使用します。データとクラスターの数を渡すことで、最終的なクラスターの中心を確認できます。通常の状況では、出力クラスターの中心は入力データとアルゴリズム パラメーターに応じて変化します。

結論:
この記事では、C# 言語を使用して K 平均法クラスタリング アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。このコード例を使用すると、C# 環境で K 平均法クラスタリング アルゴリズムを簡単に実装し、実験して独自のデータ セットに適用することができます。この記事が、K 平均法クラスタリング アルゴリズムの原理と実装を理解するのに役立つことを願っています。

以上がC# で K 平均法クラスタリング アルゴリズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。