« 東京油組総本店ドーチカ組で油そばW盛り、スペシャルトッピングAをいただく。油そばは初めて食べたが思ったよりあっさりしていていいな。 | トップページ | 高周波・RFニュース 2025年6月30日 QualcommがAIを用いた6Rxアンテナ解説、Next G Allianceと日本のXGMFが5G,6Gで協力、5G Americasが25Q1で5G加入者増加と発表、TechInsigtsがHuawei Pura 80 Pro+分解、Qorvoが5-7GHzのWi-Fi 7 FEM発表 »

2025年6月30日 (月)

関数型プログラミング言語 F# (fsharp)の数値計算ライブラリ Math.NET Numericsを使う(8) 特異値分解(SVD)、主成分分析(PCA)を計算してみる。CSVファイルを読み込むのにFsharp.Dataを使うと1行で出来てシフトJISでも文字化けしない。

今回はこの例題。

Visual C# (C_sharp)の数値計算ライブラリ MathNET Numericsを使う(8) 特異値分解(SVD)、主成分分析(PCA)を計算してみる(ちょうど奥村先生が記事を出されてたので) 

Fsharp.Dataというのを使うとCSVファイルが簡単に読める。

https://fsprojects.github.io/FSharp.Data/

encodingも指定できるのでシフトJISのデータでも大丈夫。ただ読み込んだ後の処理がよくわからん…(ので関数型ぽくないコードになってる)

コードはこちら。mutableを使うのがダメダメだが、他の方法でうまくいかない…

open FSharp.Data
open MathNet.Numerics.LinearAlgebra
open Plotly.NET

let n = 47
let data = CsvProvider<"./atest2014chu.csv", Encoding="shift-jis">.GetSample()

let M = DenseMatrix.zero<float> n 4
let mutable i = 0
for s in data.Rows do
    M[i, 0] <- ((float)s.国語A)
    M[i, 1] <- ((float)s.国語B)
    M[i, 2] <- ((float)s.数学A)
    M[i, 3] <- ((float)s.数学B)
    i <- i + 1

let Mavg = DenseMatrix.init n 4 (fun i j -> M.ColumnSums().Divide(n)[j])
let Ms = M - Mavg

let factorSvd = Ms.Svd()
let u = factorSvd.U
let v = factorSvd.VT.Transpose()
let w = factorSvd.W

printfn $"{w.Diagonal() / Math.Sqrt((float)n-1.0)}"
printfn $"{v}"
printfn $"{u * w}"
そして結果。ちゃんとC#と同じになっている。
DenseVector 4-Double
4.56476
1.16157
0.688095
0.364709
DenseMatrix 4x4-Double
0.323635 -0.434744 0.503916 -0.672552
0.42969 -0.669252 -0.0466983 0.604391
0.557127 0.578939 0.522507 0.285353
0.632643 0.16712 -0.686203 -0.317741
DenseMatrix 47x4-Double
-1.49202 -0.0221606 -0.59074 -0.896337
2.5891 0.00457446 0.949666 -0.1746
-2.58017 -3.18947 0.185863 -0.426265
-0.521248 -2.05043 -0.444285 -0.346555
10.4203 -1.07246 1.12503 -0.633945
1.23918 -0.956209 0.19827 -0.171369
-3.60334 -1.61084 0.48611 -0.0785351
-1.03261 -1.82366 0.90832 0.868986
.. .. .. ..
-2.16467 -0.38371 1.28273 -0.177348
-0.0333214 1.68482 -0.197751 0.483508
-3.1677 0.621819 -0.783522 -0.330467
-15.0605 -1.00717 -0.740619 0.533235
Polyglot Notebooksの画面
Fsharpsvd1
Fsharpsvd2

« 東京油組総本店ドーチカ組で油そばW盛り、スペシャルトッピングAをいただく。油そばは初めて食べたが思ったよりあっさりしていていいな。 | トップページ | 高周波・RFニュース 2025年6月30日 QualcommがAIを用いた6Rxアンテナ解説、Next G Allianceと日本のXGMFが5G,6Gで協力、5G Americasが25Q1で5G加入者増加と発表、TechInsigtsがHuawei Pura 80 Pro+分解、Qorvoが5-7GHzのWi-Fi 7 FEM発表 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 東京油組総本店ドーチカ組で油そばW盛り、スペシャルトッピングAをいただく。油そばは初めて食べたが思ったよりあっさりしていていいな。 | トップページ | 高周波・RFニュース 2025年6月30日 QualcommがAIを用いた6Rxアンテナ解説、Next G Allianceと日本のXGMFが5G,6Gで協力、5G Americasが25Q1で5G加入者増加と発表、TechInsigtsがHuawei Pura 80 Pro+分解、Qorvoが5-7GHzのWi-Fi 7 FEM発表 »

最近の記事

2025年7月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

最近のコメント

無料ブログはココログ
フォト