20210627ラビットチャレンジ機械学習レポート

機械学習とモデリングプロセス
・モデリングプロセスは６段階。問題せって、データ選定、データ前処理、機械学習モデルの選定、モデル学習パラメータ推定、モデル評価の６段階。データの選定、前処理が最も重要。
・学習種類は教師あり学習、教師なし学習に大きく分かれる。予測するものは教師あり学習ではクラス分類、予測の回帰がある。教師なしではクラスタリングや次元削減を目的とした、Kmeansや主成分分析がある。線形回帰のパラメータは最小二乗法、尤度最大化で調整、クラス分類のロジスティック回帰は尤度最大法、SVMではマージン最大化などが上げられる。モデルの評価では、一部分けてテストデータとするホールドアウト法や、分割して行う交差検証法がある。教師なし学習ではモデル選択評価の指標はなし。

線形回帰
講義18:01
・線形とはざっくり比例、y=1x+b, z=ax+by+cなどn次元空間における超平面で表現できる方程式。x0=1として、∑i=0からn-1,ai*xi、x0=1とすればシンプルに表現できる。さらに行ベクトルと列ベクトルでaとxを表現し、内積で表現ができる。29:28
・回帰問題、直線で予測が線形回帰、曲線で予測が非線形回帰
・回帰データで扱うデータ　入力はm次元ベクトルで表現した特徴量で、出力はスカラー値。
・線形回帰モデルは教師あり学習の一つ、ｎ個のペアデータを用いて、入力とm次元パラメータの線形結合を出力するモデル。予測値にはyハットでハットをつける。各特徴量にかける係数であるwは未知であり、これを求める。パラメータｗは最小二乗法によって求める。
・多数の特徴量と従属変数の集合をベクトルや行列で表示していく。かけられるように行と列のサイズはチェック。59:40
・特徴量の数がm=1でも、ｍ個あっても、同様に行列として表現していく。1:08:09
・データの分割および汎化性能特定。与えられたデータ全てで学習せずに、学習と検証を行うように分割して、パラメータを決めたりその精度を評価するのに用いる。未知のデータに対して予測する必要があるため。
・平均2乗誤差。(残差平方和)データとモデル出力値の二条誤差の和。パラメータに依存するので、平均2乗誤差が最小となるパラメータを求め、その傾きが0となるようなwを求める。1:21:10
・2乗損失は一般に外れ値に弱いので注意する。その場合は、Huber損失やTukey損失など他の損失関数を用いる。
・Mean Squared Error MSE=1/n(train)∑i=1から全て(yhut-y)^2　この関数の中にwの2時間数として表記されているので、この頂点が傾き0となり、最も誤差が小さくなるwを求めることができる。
・なので、MSEをwで微分して、その勾配が0となるwを求める。1:39:10
線形回帰ハンズオン　2:12:25
https://github.com/MasahitoKatsuki/RabbitChallenge/blob/main/handson_regression.ipynb
課題の回答
https://github.com/MasahitoKatsuki/RabbitChallenge/blob/main/20210627%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5%B8%B0%E8%AA%B2%E9%A1%8C.ipynb

非線形回帰
講義
・非線形回帰：回帰関数として、基底関数と呼ばれる既知の非線形関数とパラメータベクトルとの線形結合を用いる。
・線形回帰におけるｘの代わりに、なにか関数Φ(x)を用いて関数を代入している状態となる。それだけであり、あくまでパラメータwは線形のままである。(Linear-in-parameter)
・規定展開法；非線形関数とパラメータベクトルの線形結合。未知パラメータは最小２情報や最尤法で決定する。
・１－９時次の多項式で表示したり、ガウス型基底がある。
・overfitting 手元のデータに当てはまりすぎている。under fitting学習のモデルにすらfitしない。しかし、over fittingが大きすぎると汎化性能が落ちる。 33:43
・学習のデータを増やす、不要な基底関数を削除して特徴量を削ったり、次元を削減する。正則化法を用いて表現力を抑止する。
・正則化項(罰則化項)
・最小二乗和を小さくすることに加えてover fittingを防ぐために罰則項を追加する。L2ノルム：Ridge推定量、縮小推定、パラメータを0に近づけるように推定。L1ノルム：Lasso推定量、スパース推定、パラメータを0になるように推定。
・モデルの表現力を抑止するには、基底関数の個数、位置、バンド巾そして正則化パラメータが関係する。正則化パラメータγはハイパーパラメータである。
・適切なモデルを作成するには汎化性能を落とさないようにしなくてはならない。Over fittingするとテストデータへの正答率が下がる。
・テストデータの分割方法。ホールドアウト法では一部のデータをテスト用として分割する。手元にデータが少ない場合は問題になり、特に外れ値に対して影響を受けやすい。
・クロスバリデーション（交差検証法）。5-foldならば5分割をして、イテレーション自体を5回行い、複数のモデルのパラメータCV値を出して最も良いものを採用する。CVのほうが汎化性能は高い。　
・精度検証は必ず検証データで行うこと。Trainデータで評価しちゃいけない。1:11:21
・グリッドサーチ すべてのチューニングパラメータの組み合わせで評価値を算出。最も良い評価とを持つパラメータを最も良いハイパーパラメータとして採用する。しかし、計算コストも大きいのでベイジアン最適化など別の方法が最近は多い。1:17:52
非線形回帰ハンズオン　
https://github.com/MasahitoKatsuki/RabbitChallenge/blob/main/hsndson_nonlinear_regression.ipynb
非線形回帰課題なし

ロジスティック回帰
講義　1:19:58
・ある入力からクラス分類。出力が基本は2値分類。
・線形結合の結果をそのままsigmoid関数に投入する。回帰で実数全体を表現するのを、0-1の2値の間に収めるため。
・aを増加させる事により、曲線の勾配が増加し、ステップ関数に近づく。
・sigmoid関数を微分すると、σ(1-σ)となるので、sigmoid関数のみで表現することができる。最適化でMSEを求めたり、尤度関数を最大にする点を求めるのに、微分が必要であり、そのときに表記が容易になる。1:43:09
・カットオフ値は0.5に限らず、自由に決めることはできる。
・最尤推定について1:47:54
・ロジスティック回帰モデルではベルヌーイ分布を利用し、実際のデータからベルヌーイ分布(確率p)を推定するということを行っている。もともとの分布はわからない。
・そのｐを手元のデータのyから求める尤度関数を最大化するようなパラメータを選ぶ推定方法を、最尤推定という。
・尤度関数を最大にするパラメータを探索する。尤度関数はパラメータwににおみ依存する関数である。
・尤度関数は単調増加の関数なので、尤度関数に対数を取り、尤度関数にマイナスをかけたものを最小化し、最小2乗法の最小化と合わせる。対数を取ることで計算は簡単になる。1:56:11
・勾配降下法：反復学習によりパラメータを逐次的に更新する。
・線形回帰モデルではMean Squared Errorを最小にするようなMSQ'=0となるようなwをもとめた。ロジスティック回帰の最尤法では、対数尤度関数をwで微分して-になる値を求めれば良いのだが、解析的に求めることは不可能である。そのために、勾配降下法を用いる。最小二乗法のように1発では求まらない。
・確率的勾配降下法(SGD)：1回の更新のたびに全部のデータを用いるとメモリに載せられない。ミニバッチ1での更新という形を取る。2:12:00
・モデルの評価指標について
・混同行列で表現し、accuracy, recall, precison, F valueを用いて評価。
・Recall はfalse negativeを避けて、広いこぼしを防ぐ。多少のfalse positiveが増えても仕方ない。癌検診など。
・Precisonはfalse negativeが多くてもより正確な予測がしたいときに用いる。多少のfalse negativeで陰性のものを拾ってもよい。スパムメールでもしスパムを拾ってもいいから、重要なメールを排除されるより、確実にスパムであるものを排除する、ための指標。
・F valueはRecallとPrecisonの調和平均。トレード・オフの関係のため総計算するしかない。
ロジスティック回帰ハンズオン 2:14:30
https://github.com/MasahitoKatsuki/RabbitChallenge/blob/main/handson_logistic_regression.ipynb
課題　年齢が30歳　男性　の乗客は生き残れるのか。
https://github.com/MasahitoKatsuki/RabbitChallenge/blob/main/20210627%E3%83%AD%E3%82%B8%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E5%9B%9E%E5%B8%B0%E8%AA%B2%E9%A1%8C.ipynb

主成分分析
講義　2:20:05
・二次元に広がっているデータを１次元に圧縮する。
・相関係数が大きいものに対して、分布に沿って分散が最大となるような１次元をとり、変換する。
・線形変換をしたあとの分散は、分散共分散行列と、aに関する二次形式で表現できる。aは係数ベクトル。
・ラグランジュ関数を微分して０になる点を導出し、ラグランジュ関数を最大にする係数ベクトルを見つけることで、制約付き最適化問題が解ける。
・このときのaは元のデータの分散共分散行列の固有ベクトルである。
・寄与率：第k成分の分散の全文さんに対する割合(第ｋ主成分がもつ情報量の割合)
・累積寄与率：第１主成分から第ｋ主成分までの圧縮した際の情報量の、全情報量に対する割合。全体に対する情報損失量の割合ともいえる。
主成分分析ハンズオンおよび課題
https://github.com/MasahitoKatsuki/RabbitChallenge/blob/main/handson%E3%81%8A%E3%82%88%E3%81%B3%E8%AA%B2%E9%A1%8C_pca.ipynb

アルゴリズム：k-meansとknn
講義2:22:59
・ｋ近傍法kNN
・最近帽のデータをk個撮ってきて、それらがもっとも多く所属するクラスに識別する。
・ｋを変化させれば結果も変わり、kを大きくすればするほど決定境界はなめらかになる。
kNNハンズオン
https://github.com/MasahitoKatsuki/RabbitChallenge/blob/main/handson_knn.ipynb

・k-meansは教師なし学習、各クラスタの中心をまず初期値としてランダムにおき、各クラスタとの距離を計算し、最も距離が近いクラスタを割り当てる。
・クラスタの再割り当てを行い、重心が収束するまでクラスタリングを行う。
・初期値が近いと、うまくクラスタリングができない。
Kmeansハンズオン
https://github.com/MasahitoKatsuki/RabbitChallenge/blob/main/handson_kmeans.ipynb

サポートベクターマシーン
・2クラス分類のための機械学習手法。
・線形モデルで2つにクラスを分類する。その線を作成し、その領域より正負にて評価する。
・判別する線形関数と、最も近いデータ点(サポートベクター)との距離をマージンといい、最も大きくなるような線形判別関数を求める。
・サンプルを線形分離できないような場合、誤差を許由氏、誤差に対してペナルティを与えることである程度の分類をできるようにしたものを、ソフトマージンSVMという。
SVMハンズオン
https://github.com/MasahitoKatsuki/RabbitChallenge/blob/main/handson_svm.ipynb