学生の備忘録なブログ

日々のことを忘れないためのブログです。一日一成果物も目標。

主成分分析PCA

主成分分析と固有値問題の関係

主成分分析PCAは固有値問題を用いる。どんな関係があるのだろうと疑問に思った。

主成分分析PCAとは

データ分析において面倒な変数が多い状況を解消するために、情報量を減らさずに次元圧縮(変数の削除)をする手法。

固有値問題とは

線形代数でよくある、行列の固有値固有値ベクトルを求めよ系の問題のこと。

関係は?

共分散

次元圧縮において、情報量を減らしたくない。よって、次元圧縮した結果、変数は減っていてなおかつ共分散を取って一番バラけている状態が理想である。

https://blog.aidemy.net/wp-content/uploads/2017/10/20171019201416.png

(引用)

分散を計算するのに、行列計算が便利だから行列を使う。

固有値問題

データを共分散行列で表し、それに対し分散が最大となる方向を求める式が途中で固有方程式になるためである。 (ラグランジュの未定乗数法は制約条件がある固有値問題の解法の一つ。)

固有方程式が現れて、それを解く固有値問題に落とし込むことができるのは、固有値ベクトルの性質として固有値ベクトル同士直交することと、単位ベクトルがノルムである条件からだと思うが、よくわからない。

この問題においては、固有値はすなわち分散である。 結果として、固有値問題を解くだけ分散の最大が得られる。

主成分分析PCAの主なアルゴリズム

  1. 分散の最大値が大きいベクトルを見つけ、第一成分とラベル付けする
  2. 第一成分と直交する方角のうち、最大の分散があるベクトルを見つけるこれを第二成分とする

この方向を見つけるという行為が固有値ベクトルを求めるということと同義である。

参考文献

主成分分析と固有値問題 | Aidemy Blog

固有値と固有ベクトルの計算/求め方と意味をイラストで解説!

主成分分析PCA

主成分分析と固有値問題の関係

主成分分析PCAは固有値問題を用いる。どんな関係があるのだろうと疑問に思った。

主成分分析PCAとは

データ分析において面倒な変数が多い状況を解消するために、情報量を減らさずに次元圧縮(変数の削除)をする手法。

固有値問題とは

線形代数でよくある、行列の固有値固有値ベクトルを求めよ系の問題のこと。

関係は?

共分散

次元圧縮において、情報量を減らしたくない。よって、次元圧縮した結果、変数は減っていてなおかつ共分散を取って一番バラけている状態が理想である。

https://blog.aidemy.net/wp-content/uploads/2017/10/20171019201416.png

(引用)

分散を計算するのに、行列計算が便利だから行列を使う。

固有値問題

結論から言うと、共分散行列に対し固有値問題を解くと固有値固有値ベクトルが得られ、その固有値はすなわち分散である。 よって、固有値問題を解くだけ分散の最大が得られる。

ラグランジュの未定乗数法は制約条件がある固有値問題の解法の一つ。

主成分分析PCAの主なアルゴリズム

  1. 分散の最大値が大きいベクトルを見つけ、第一成分とラベル付けする
  2. 第一成分と直交する方角のうち、最大の分散があるベクトルを見つけるこれを第二成分とする

参考文献

主成分分析と固有値問題 | Aidemy Blog

固有値と固有ベクトルの計算/求め方と意味をイラストで解説!

paizaでAランクを取った。

経緯

就活のために先輩がやっていた競技プログラミングサークルへ参加し、atcoderでいろはを学んだ。

しかし、atcoderが思うように伸びなかったので気分転換にpaizaをやっていたら、以外にも苦労なくAランクまで行った。

道筋

  1. qiitaでatcoder虎の巻みたいなものをまとめてくれている有志の記事があるのでそれを眺める。

  2. 自分の言語(自分の場合python)で絞り込んだ。

  3. atcoderの優しい問題を解き、入出力の方法の王道を知る。

  4. 難しいアルゴリズムの勉強は少しずつでいいので精神がやまない程度に。

  5. 手を付けて解けなかった問題は、atcoderで他の人の解答を見まくって、真似る。

(変態みたいな解き方を真似しないように、複数人の解き方を見る)

結論

Atcoder をqiitaを見ながら解く。

paizaはランクが上がるのが直ぐだからやる気が出て良い。

併用するべし。

slackの@hereってなに

だれに通知するか選択できる

@here

アクティブなメンバー全員に通知を送る。

非アクティブのメンバーには送らない。

@channel

すべてのメンバーに通知を送る。

メンバーがアクティブかどうかは関係ない。

なので @here より強力。

pythonで競技プログラミングする際

再帰で書いたが、、、

再帰でpaizaのコードを解いた。

しかし、テストケースでコケる。自前ではその入力を知れないから理由がわからない。

原因 再帰の限界が初期設定10000

python再帰の限界が決まっている!

再帰限界 Pythonでは再帰限界が1000回まで決められているので、再帰を使う際はこの限界を上げてあげる必要があります。 具体的には以下のようなものを冒頭に書きます。

import sys
sys.setrecursionlimit(4100000)

結論

勉強になります。

引用元

[https://juppy.hatenablog.com/entry/2019/06/14/Python競技プログラミング高速化tips%28PythonでAtcoderをやる際に個:title]

paizaを始めた

paizaを始めた

B055:タクシー料金を解き、Bランクとなった。

ITエンジニア専門の転職サイト【paiza転職】

Sになるのが目標である。

解くのが遅いと感じた。

問題を見たとき、それほど難しく感じなかった。事実難しくなかった。

しかし解き終わってみると、55分かかっていた。

これはどうしたことだろう。

結論

こなれていない。圧倒的に。

標準入力をちょうどよい形で持つコードを数行書くまでに時間がかかりすぎているのだと思う。

それ以外にも省略できる時間があるはずだが、今は思いつかない。

paizaに期待すること

正直就活したくない、あるいは就活でのアピールになったらいいかな。

でも自分がBランクであるというのが悔しくて早く上に行きたくてもどかしい。これは楽しんでいるということなんだと思う。