ろむめも

気になったこととか、調べたことをゆるくまとめます。主にプログラミング関連の話題が多いです。

身の程知らずの初心者がUdacityで機械学習を勉強した話 ②教師あり学習

以下に学習時のメモをまとめていきます。

Lesson1 導入

はじめに

教師あり学習はラベル付けされた例をモデルに与えます。ラベルを正しく予想できるかというのがこの方法のコアの部分です。ニューラルネットワークや、アンサンブルラーニング、回帰分析、クラス分類は教師あり学習のアプローチ方法の一つです。これらのどれをどういうデータに当てはめて、それをどう評価するかというのがこのコースのゴールです。

教師あり学習の例

教師あり学習は例えば、顔認識や、レコメンデーションシステムの中で利用されます。口座情報から詐欺かどうか調べたり、顧客情報をクラスタリングするのは教師なし学習です。

Lesson2 Regression(回帰)

線形回帰

線形回帰ではデータのすべての点にふさわしい多項式の線を引いて、その線からの距離が近くなるようにします。一次の多項式の場合は各点の平均を通る直線となります。
次数を上げていくと、与えられたデータに対しては良い結果を得られているように見えますが、その間の点にとってみるとふさわしくない直線となってしまいます。例えばデータの傾向とは異なる性質を示してしまうことになります。そういったことは避けるべきです。

多項式回帰

与えられたデータをxとしたときの係数を求めるのが多項式回帰です。計算には行列を使って、Xをデータの行列、wを係数のベクトル、yをラベルデータのように表します。

エラー

機械学習を使う場合に気にしなければいけない誤差は多岐にわたります。それは測定値自体のノイズ、悪いデータ、転記ミス、その他の影響など様々です。これらの誤差を除いた検知したいシグナルに対してモデルを当てはめる必要があります。

Cross Validation

モデルを複雑にするとあるところで当てはまらないデータが出てきてしまいます。機械学習に当てはめるデータは独立同一分布で取得されたものであるという仮説に基づいています。これが破れた場合、当てはめることはできません。交差検定ではデータをいくつかのFoldに分割して、そのFoldのうちいくつかを訓練データ、残りを試験データとします。この組み合わせを変えることで、モデルが過学習していないか確認します。即ち、いくつかの複雑度の違うモデルを用意して、それぞれのモデルを学習させて交差検定を行います。交差検定の結果、データのエラーが試験データで大きくなったとするとそれは過学習です。このように交差検定はモデルが過学習していないか検知するのに利用することが出来ます。

入力

入力はベクトルであっても良い。即ち、複数のスカラー量を入力としてモデルを構築し、その値を複合的に考慮して結果を出力することもできる。例えば、住宅価格を予想するときにその敷地面積だけでなく、駅からの距離も考慮して予測精度を高めることが出来る。

Lesson3 その他の回帰

Parametric regression

多項式によって近似するモデルであり、各次数のデータに対して係数を持っている。その係数を調整する。

K nearest neighbor

ある値を与えられたときに、そこから予測値算出方法を考えます。予測値はある値の付近の実際のデータのうち、k個のものを考え、そしてそれらの値の平均値を予測値にすることにします。これがKNNです。

Parametric or non

パラメトリックアプローチは学習は遅いが、モデルが出来てしまえば予測値の算出は早い。逆にノンパラメトリックアプローチは学習は速く、例えば新しいデータに対して学習するのは早いが、モデルが出来た後に予測値の算出は比較的遅い。

Lesson 4 Regression in sklearn

Continuous Supervised Learning

出力がYes/NoのようにBinaryであり離散的な値(Discrete)ではなく、連続的な値を取り扱う場合、Continuousという概念が重要。ContinuousはOrderdである場合が多く、DiscreteはNo Orderedである場合が多い。

Coding

1.1. Generalized Linear Models — scikit-learn 0.19.0 documentation

linear regressionを使うには以下のようにします。

from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit(X_train, y_train)
reg.predict(X_test)

reg.coef_ ## slope
reg.intercept_ ## coefficient

reg.score(X_test, y_test) ## R^2

テストデータとトレーニングデータでscoreを出して、モデルが過学習していないか確認することもできる。scoreはR^2を算出する。

Linear Regression Errors

Error = actual - predictedで表される。データ全体のエラーを出すには符号の影響を抑えるために絶対値を取るか、二乗して、その和を取る。このエラーを最小化することがデータに対する最適な回帰モデルとなる。アルゴリズムとしては、Ordinary Least Squares(OLS)やGradient Descent等があり、SklearnではOLSがLinear Regressionに使われている。

Sum of Squared Error

SSEを最小化することが全てのデータ点からの距離が最適な位置に回帰直線を引くことが出来る。また、それは計算が容易なので好まれている。ただ、SSEは完璧ではなく、例えばデータが広範囲に分布しているものと、狭い範囲で分布しているものでモデルを作ったときに、どちらも同じような回帰直線が得られたする。広範囲のデータから学習したモデルではその直線はどの入力値においても比較的妥当な値を返すことができるが、狭い範囲のデータしか与えられなかったモデルではもし与えられたデータ以外の領域のデータが与えられた場合に、その振る舞いが正しくモデル化できていない可能性がある。そういう意味でSSEは完璧ではないといえる。また、データの数が増えれば増えるほどエラーの値が増えることになるので、データの数が違う場合に、そのSSEの値で単純に比較することが出来ない。

R squared

R二乗は0.0 < R^2 < 1.0の範囲にあり、1に近づくほどデータの特徴を捉えている回帰直線が作れたといえる。

Visualizing

データと回帰直線を重ねて表示するとわかりやすい。

Compare Classification and Regression

項目 | Classification | Regression
出力の種類 | descrete(class labels) | Continuous(number)
何を見つけたいか | decision boundary | best fit line
モデルの評価値 | accuracy | SSE

Multi-Variate Regression

入力の変数が複数あって、それらから出力値を予測するもの。y=ax1 + bx2 + cのような形。

Lesson 5 Decision Trees

*

ClassificationはTrueとFalseに分けたり、写真を分類したりする。Regressionは連続な値をとる関数。実際の点から関数を学び、新しい点に対応するようなもの。



続く。。。