K 平均法クラスタリング アルゴリズムを C で実装する方法
#はじめに:
クラスタリングは、機械学習やデータ マイニングの分野で使用される一般的なデータ分析テクノロジです。広く使われています。その中でも、K-means クラスタリング アルゴリズムはシンプルでよく使用されるクラスタリング手法です。この記事では、C# 言語を使用して K-means クラスタリング アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。
1. K 平均法クラスタリング アルゴリズムの概要
K 平均法クラスタリング アルゴリズムは、データのセットを指定された数のクラスターに分割する (クラスター化) ために使用される教師なし学習手法です。基本的な考え方は、データ ポイント間のユークリッド距離を計算して、データ ポイントを最も近い距離を持つクラスターに分割することです。アルゴリズムの具体的な手順は次のとおりです。
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 サイトの他の関連記事を参照してください。