#author("2022-11-27T10:00:22+09:00","default:takataka","takataka") #author("2022-11-27T10:01:37+09:00","default:takataka","takataka") *多変量解析及び演習 2022年度 おまけ課題 [#aab7e27f] **はじめに [#uf41c46f] ここにはおまけ課題があります.おまけですので,やらなくても減点はありません.やると棒茄子? それぞれの課題について,やったひとは授業時間中に takataka に見せてね. ** omake02 [#omake02] - [[ex02notebookC.ipynb>https://github.com/takatakamanbou/MVA/blob/2022/ex02notebookC.ipynb]] の末尾にあります. - 期限: 第3回の授業開始時 ** omake03 [#omake03] - [[omake03.ipynb>https://github.com/takatakamanbou/MVA/blob/2022/omake03.ipynb]] - 期限: 第4回の授業終了時 - ちょっと難しいので,他より点数大きくします ** omake04 [#omake04] A と B は独立です *** omake04A [#uc372c89] - 手計算のみ,易しい? - 期限: 第5回演習開始時 [[ex03notebookA.ipynb>https://github.com/takatakamanbou/MVA/blob/2022/ex03notebookA.ipynb]] の式(3) の1行目 #mathjax{{ \sum_{n=1}^{N} x_{n,0}\mathbf{w}\cdot\mathbf{x}_n = \sum_{n=1}^{N} x_{n,0}y_n }} が成り立つとき,次のことが言えます: > &mathjax{\mathbf{w}}; で決まる回帰式が表す平面は,説明変数と被説明変数の平均の点 &mathjax{(\bar{x}_{1}, \bar{x}_{2}, \ldots, \bar{x}_D, \bar{y})}; を通る. < これを証明しなさい. *** omake04B [#gd507ce1] - [[omake04.ipynb>https://github.com/takatakamanbou/MVA/blob/2022/omake04.ipynb]] - 期限: 第5回演習開始時 ** omake05 [#omake05] 主成分分析では,データの分散共分散行列の固有値・固有ベクトルを計算に使いますが,実は,「特異値分解」を利用すると,分散共分散行列を計算しなくても,その固有値・固有ベクトルを求めることができます. その理屈を理解して実際に計算してみましょう. - 手計算と Python + NumPy の複合 - 期限: 第6回演習終了まで *** Step1 [#q799c179] 任意の &mathjax{m \times n}; 行列 &mathjax{X}; は #mathjax{{ X = USV^{\rm T} }} と分解できます.ただし,&mathjax{\textrm{rank}(X) = r \leq \textrm{min}(m, n)}; として, - &mathjax{U}; は &mathjax{m\times r}; 列直交行列(各列のベクトルが直交し大きさが1) - &mathjax{V}; は &mathjax{n\times r}; 列直交行列 - &mathjax{S}; は &mathjax{r\times r}; 対角行列で,その対角要素 &mathjax{\sigma_1, \sigma_2, \ldots, \sigma_r}; は全て正 です.&mathjax{\sigma_1, \sigma_2, \ldots, \sigma_r}; を &mathjax{X}; の特異値といい,この行列分解を特異値分解といいます. このとき,&mathjax{X^{\rm T}X}; を &mathjax{V}; と &mathjax{S}; を用いて表しなさい. Step1 ができたらいったん takataka に見せてください.Step2 につながるお話をします. *** Step2 [#s88f8bd1] Step1 が(高橋の説明も含めて)分かると,データを表す &mathjax{N\times D}; 行列 &mathjax{X}; が与えられたとき(平均は &mathjax{\mathbf{0}}; とします), &mathjax{X}; の分散共分散行列 &mathjax{\frac{1}{N}X^{\rm T}X}; を計算してからその固有値固有ベクトルを求める必要はなく,&mathjax{X}; を特異値分解した結果からそれらが求まることが分かります. ex05notebookB の適当な箇所にセルを追加して,Vの固有値固有ベクトルをXの特異値分解(np.linalg.svd 使いましょう)を用いて計算して表示するコードを書きなさい. ** omake06 [#omake06] 画像処理してみよー - [[omake06.ipynb>https://github.com/takatakamanbou/MVA/blob/2022/omake06.ipynb]] - 期限: %%第8回演習開始時%% 第9回の時間中にいったん見せてもらえれば(未完成でも),第10回演習開始時まで延長します ** omake07 [#omake07] 自分で適当なデータを探して,Colab notebook を使って重回帰分析または主成分分析をやってみましょう. 期限は特に設けませんので,できた時点で takataka に見せてください.データの入手の仕方や前処理のやり方などなど,随時相談にのります. ** omake08 [#omake08] もっと手書き数字認識してみよー [[ex11>../ex11]] 課題C の続きとして,次のことをやってみましょう (1) 主成分分析 + 二次判別分析による識別の実験で,削減後の次元数をいろいろ変えて学習データとテストデータに対する正解率を算出し,横軸に次元数,縦軸に正解率をとったグラフを描きましょう.一つのグラフに学習・テスト両方の値を描くとよいです.次元数を減らさないときの値も含めるとよいです. (2) scikit-learn で実装されている他の手法でも実験してみましょう.おすすめは次の二つ. (2) scikit-learn で実装されている他の手法でも実験してみましょう.おすすめは次の二つ(やってみるのはどちらか一方だけでもよいです). - K-近傍法 https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html - ランダムフォレスト https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html 次元削減しないでデータをそのまま使ったらよいです.主成分分析 + 二次判別分析の場合には次元数を変えると結果が変わりました.この次元数のように,自動的には推定されず人間が設定する必要のあるパラメータを「ハイパーパラメータ」といいます.上記の二つの手法にもハイパーパラメータがあります.前者では `n_neighbors` がそれです.後者にはいろいろありますが,`n_estimators` が代表的です.これらの値を変えて結果を観察しましょう.