今すぐC#で機械学習を始めるための手っ取り早い手順
使うもの
インストール
VisualStudioをインストールする.
プロジェクト作成
- コンソールアプリケーションを選択.
- 言語はC#
Nugetパッケージ
『Nugetパッケージの管理』を開き,次を検索してインストール
- Accord (Accord.NET)
- Accord.MachineLearning (Accord.NET)
その他必要なものは自動的にセットアップされる.
K-means
早速K-meansしてみよう
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloAccord { class Program { static void Main(string[] args) { var rand = new Random(); int N = 100; double[][] points = Enumerable.Range(0, N) .Select((i) => Enumerable.Range(0,2).Select((j) => rand.NextDouble()).ToArray() ) .Where((e) => Math.Abs(e[0] + e[1] - 1.0) > 0.1).ToArray(); var kmeans = new Accord.MachineLearning.KMeans(2); var clusters = kmeans.Learn(points); int[] labels = clusters.Decide(points); int[] cluster0 = labels.Select((e, i) => e == 0 ? i : -1).Where((e) => e >= 0).ToArray(); int[] cluster1 = labels.Select((e, i) => e == 1 ? i : -1).Where((e) => e >= 0).ToArray(); Console.Out.WriteLine("Polygon"); foreach (var i in cluster0) Console.Out.WriteLine(string.Join(" ", points[i])); Console.Out.WriteLine("..."); Console.Out.WriteLine("Polygon"); foreach (var i in cluster1) Console.Out.WriteLine(string.Join(" ", points[i])); Console.Out.WriteLine("..."); Console.In.ReadLine(); // pause key } } }
やっている事
- 二次元平面上の[0,1]区間に点をN個打つ.
Math.Abs(e[0] + e[1] - 1.0) > 0.1
を満たす点を残し他を削除する.- 点群を2つの群に分類するようK-meansを使ってクラスタリング学習.
- 学習結果を使って,元の点群をクラスタリング
- 1つ目の群,2つめの群の順に点を出力する
visualize
出力した内容はCSAcademyのGeometry Widgetに貼り付けられる内容になっている
2つの群に分類できている.