Cara melaksanakan algoritma pengelompokan K-means dalam C#
Pengenalan:
Pengelompokan ialah teknologi analisis data biasa dan digunakan secara meluas dalam bidang pembelajaran mesin dan perlombongan data. Antaranya, algoritma pengelompokan K-means ialah kaedah pengelompokan yang mudah dan biasa digunakan. Artikel ini akan memperkenalkan cara menggunakan bahasa C# untuk melaksanakan algoritma pengelompokan K-means dan menyediakan contoh kod khusus.
1. Gambaran keseluruhan algoritma pengelompokan K-means
Algoritma pengelompokan K-means ialah kaedah pembelajaran tanpa pengawasan yang digunakan untuk membahagikan satu set data kepada bilangan gugusan (cluster) yang ditentukan. Idea asas adalah untuk membahagikan titik data kepada kelompok dengan jarak terdekat dengan mengira jarak Euclidean antara titik data. Langkah khusus algoritma adalah seperti berikut:
2. C# melaksanakan algoritma pengelompokan K-means
Berikut ialah kod sampel yang menggunakan bahasa C# untuk melaksanakan algoritma pengelompokan K-means. Pustaka MathNet.Numerics digunakan dalam kod untuk melaksanakan pengiraan vektor dan operasi matriks.
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); } }
Kod di atas menunjukkan cara melaksanakan algoritma pengelompokan K-means menggunakan bahasa C#. Pertama, kami mentakrifkan kelas KMeans untuk mewakili algoritma pengelompokan K-means, termasuk parameter seperti bilangan gugusan dan bilangan maksimum lelaran. Kemudian, dalam kaedah Fit, kami memilih titik data K secara rawak sebagai pusat kluster awal, mengira secara berulang jarak antara setiap titik data dan pusat kluster, dan menetapkannya kepada pusat kluster terdekat. Akhir sekali, kedudukan pusat kluster dikemas kini dan jarak titik data dikira semula sehingga keadaan berhenti dipenuhi.
Dalam kaedah Utama, kami menggunakan set data dua dimensi mudah untuk demonstrasi. Dengan menghantar data dan bilangan kluster, kita boleh melihat pusat kluster akhir. Dalam keadaan biasa, pusat kluster keluaran akan berbeza-beza bergantung pada data input dan parameter algoritma.
Kesimpulan:
Artikel ini memperkenalkan cara melaksanakan algoritma pengelompokan K-means menggunakan bahasa C# dan menyediakan contoh kod khusus. Menggunakan contoh kod ini, anda boleh melaksanakan algoritma pengelompokan K-means dengan mudah dalam persekitaran C# dan mencuba serta menggunakannya pada set data anda sendiri. Saya harap artikel ini akan membantu anda memahami prinsip dan pelaksanaan algoritma pengelompokan K-means.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma pengelompokan K-means dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!