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年2月10日 IEEE Microwave Magazineは女性マイクロ波研究者特集(インターコネクトやダークマター探査等)、Samusungの6GとAIホワイトペーパー、QualcommとQorixがソフトウェア定義車両で提携、ATISがOpen RAN Minimum Viable Profile発表など(2025.02.10)
- 高周波・RFニュース 2025年2月7日 フジクラがMWCバルセロナでミリ波(28GHz,60GHz)モジュールデモ、Qorvo、NXP、AMDらのヘルスケアウェビナー、Samsung Galaxy S25もやはり5Gミリ波AiPは1個、u-bloxがBluetooth LEモジュール4種発表(2025.02.07)
- 高周波・RFニュース 2025年2月6日 3GPPがRel-20(5G Advancedと6G)の計画を公開、SEMCOが産業用MLCC(0805 inch, X6S, 22uF, 25V)と車載MLCC(1005,2.2uF,10V)を発表、KYOCERA AVXのスーパーキャパシタシミュレーションソフト、I向けフォトニックチップ解説(2025.02.06)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年2月10日 IEEE Microwave Magazineは女性マイクロ波研究者特集(インターコネクトやダークマター探査等)、Samusungの6GとAIホワイトペーパー、QualcommとQorixがソフトウェア定義車両で提携、ATISがOpen RAN Minimum Viable Profile発表など(2025.02.10)
- 高周波・RFニュース 2025年2月7日 フジクラがMWCバルセロナでミリ波(28GHz,60GHz)モジュールデモ、Qorvo、NXP、AMDらのヘルスケアウェビナー、Samsung Galaxy S25もやはり5Gミリ波AiPは1個、u-bloxがBluetooth LEモジュール4種発表(2025.02.07)
- 高周波・RFニュース 2025年2月6日 3GPPがRel-20(5G Advancedと6G)の計画を公開、SEMCOが産業用MLCC(0805 inch, X6S, 22uF, 25V)と車載MLCC(1005,2.2uF,10V)を発表、KYOCERA AVXのスーパーキャパシタシミュレーションソフト、I向けフォトニックチップ解説(2025.02.06)
« かつやで海老カツと鶏カツの合い盛り定食をいただく。タルタルソースがとても美味しい。 | トップページ | やよい軒で黒酢酢豚定食をいただく。いい感じに酸味が強く美味しかった。 »
コメント