SVDによるMNISTの分類
SVDによるMNISTの分類 やりたかったこと SVDを用いてmnistの分類をする ※ mnist: 手書き数字のデータセット.1枚の画像のサイズは28x28 ※ 参考文献: Eldén, Lars. Matrix methods in data mining and pattern recognition. Vol. 4. SIAM, 2007. アルゴリズム 0だけが書かれた画像を M M M 枚集める. 画像をベクトルにして並べて A ∈ R 2 8 2 × M A\in\mathbb{R}^{28^2\times M} A ∈ R 2 8 2 × M を作る A A A を SVDして左特異ベクトルを m m m 本抜いてくる(今回の実装では m = 3 m=3 m = 3 ) 1~9についても同様にして左特異ベクトルを抜いてくる テストデータと m m m 本の基底の線形結合で最小二乗法を解いて,残差を求める 残差が小さい基底のセットが予測値 結果 90%で識別できた import numpy as np import numpy . linalg as nl import pandas as pd from matplotlib import pyplot as plt # データの前処理 # データは"mnist csv"でググってダウンロードしてくる # mnistの読み込み mnist = pd . read_csv ( "mnist_train.csv" ) # ラベルを作った # ",".join(["label"]+[str(i) for i in range(784)]) # "label"キーでソート mnist = mnist . sort_values ( by = "label" ) # csvとして保存 mnist . to_csv ( "mnist_train_sorted.csv" , index = False ) ## ソート済みのトレーニングデータ...