#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` が代表的です.これらの値を変えて結果を観察しましょう.

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS