Visual C# (C_sharp)の数値計算ライブラリ MathNET Numericsを使う(8) 特異値分解(SVD)、主成分分析(PCA)を計算してみる(ちょうど奥村先生が記事を出されてたので)
今日、このTweet見た。
主成分分析とバイプロットの関係がわかりにくいというご質問をいただいたので、特異値分解も含めて三者の関係を解説した記事を書きました(Rを利用。そのうちPython版も書くかも) https://t.co/11Nt23dOmw
— Haruhiko Okumura (@h_okumura) August 28, 2022
こちらのリンクの例題をC#とMath.NET Numericsでやってみよう。
特異値分解は実はめちゃくちゃ簡単で、M.Svd()だけで計算できる。その前にCSV読んで平均引いて、、、というのが実は面倒くさい(もしかしたらもっと簡単になるのかもしれないが、私はC#初心者…)。
結果はこちら。奥村先生がRでやられたのと一致している。
ファイル読み込みも含めたソースはこちら。
using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra;
namespace SVDtest01
{
class Program
{
static void Main(string[] args)
{
EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance;
var encoding = provider.GetEncoding("shift-jis");
StreamReader sr = new StreamReader(@"atest2014chu.csv",encoding);
string[] header = sr.ReadLine().Split(",");
var list = new List();
while (!sr.EndOfStream)
{
list.Add(sr.ReadLine().Split(","));
}
var M = Matrix.Build.Dense(list.Count, list[0].Length - 1);
for (int i = 0; i < list.Count; i++) {
for (int j = 0; j < list[0].Length - 1; j++)
{
M[i, j] = Convert.ToDouble(list[i][j + 1]);
}
}
var ColumnMean = new double[list[0].Length - 1];
for (int j = 0; j < list[0].Length - 1; j++)
{
ColumnMean[j] = 0.0;
for (int i = 0; i < list.Count; i++)
{
ColumnMean[j] += M[i, j];
}
ColumnMean[j] /= Convert.ToDouble(list.Count);
}
for (int i = 0; i < list.Count; i++)
{
for (int j = 0; j < list[0].Length - 1; j++)
{
M[i, j] -= ColumnMean[j];
}
}
var factorSvd = M.Svd();
var u = factorSvd.U;
var v = factorSvd.VT.Transpose();
var w = factorSvd.W;
Console.WriteLine(w.Diagonal() / Math.Sqrt(47 - 1));
Console.WriteLine(v);
Console.WriteLine(u * w);
}
}
}
過去のもの:
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(1) 複素行列を定義して一次方程式や逆行列、行列式などを計算する。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。
« かつやで海老カツと鶏カツの合い盛り定食をいただく。タルタルソースがとても美味しい。 | トップページ | やよい軒で黒酢酢豚定食をいただく。いい感じに酸味が強く美味しかった。 »
「パソコン・インターネット」カテゴリの記事
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年6月12日 QorvoがKバンド衛星通信向けパワーアンプ発表、QuectelがWi-SUNモジュール発表、Kymetaがマルチバンドアンテナ発表、iFixitがAppleがiPadの修理は悪夢と認めたと語る、中国の6G戦略解説、iFixitがNintendo Switch2のチップ同定(2025.06.12)
- 高周波・RFニュース 2025年6月11日 Siversの28GHzモジュールがaiRadarに採用、LG Innotekが車載5G衛星通信モジュール発表、Nuvotronicsがフィルタ設計のためのStrataWorksプラットフォーム発表、TechInsigtsのXiaomi 15S Pro分解、QualcommがAlphawave Semi買収(2025.06.11)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年6月12日 QorvoがKバンド衛星通信向けパワーアンプ発表、QuectelがWi-SUNモジュール発表、Kymetaがマルチバンドアンテナ発表、iFixitがAppleがiPadの修理は悪夢と認めたと語る、中国の6G戦略解説、iFixitがNintendo Switch2のチップ同定(2025.06.12)
- 高周波・RFニュース 2025年6月11日 Siversの28GHzモジュールがaiRadarに採用、LG Innotekが車載5G衛星通信モジュール発表、Nuvotronicsがフィルタ設計のためのStrataWorksプラットフォーム発表、TechInsigtsのXiaomi 15S Pro分解、QualcommがAlphawave Semi買収(2025.06.11)
« かつやで海老カツと鶏カツの合い盛り定食をいただく。タルタルソースがとても美味しい。 | トップページ | やよい軒で黒酢酢豚定食をいただく。いい感じに酸味が強く美味しかった。 »
コメント