【Coursera機械学習】week6の課題のまとめと勉強したことのメモ

スポンサーリンク
coursera
スポンサーリンク

第6週目の課題では正則化回帰モデル(regularized linear regression)を実装します。

スポンサーリンク

課題の内容

貯水池の水位を変更(X)したときの、ダムから流れ出す水の量(y)を求めます。

データは以下の三つに分かれています。

  1. training set:学習に用いるデータ(12データ)
  2. cross validation set:正則化項のパラメータを決定するデータ
  3. test set:モデルを評価するデータ

今回の課題では、線形回帰(linear regression)と多項式回帰(polynomial regression)の二つの回帰モデルを実装します。

課題1:linearRegCostFunction

線形回帰モデルのコスト関数は以下の式で表されます。

\( J(\theta) = \frac{1}{2m}(\sum_{i=1}^m(h_\theta(x^{(i)}) – y^{(i)})^2) + \frac{\lambda}{2m}(\sum_{j=1}^n\theta_j^2) \)

また、以下の式で線形回帰モデルの勾配を求めます。

\( \frac{\partial J(\theta)}{\partial \theta_j} = (\frac{1}{m}(\sum_{i=1}^m(h_\theta(x^{(i)}) – y^{(i)})x^{(i)}_j) + \frac{\lambda}{m}\theta_j \)

この二つの式をOctaveで書くと以下のようになります。

各変数の次元

  • X:12×2
  • y:12×1
  • theta:2×1

課題2:learningCurve

課題2では学習曲線を描きます。学習データとバリデーションデータそれぞれのエラーを、課題1で作成したlinearRegCostFunctionで求めれば良いようです。

ここで、linearRegCostFunctionの引数であるthetaはtrainLinearRegで求めます。

学習データとバリデーションデータのエラーを計算する際は、λを0にします。

課題3:polyFeatures

課題2の学習曲線を出力させると以下のようになります。データ数を増やしても、学習データに対するエラー、バリデーションデータに対するエラーがともに高いことから、モデルはアンダーフィット(high bias)していることが分かります。

そこで、課題3からは以下のような多項式回帰にすることで、より正確な予測ができるようにします。

\( h_\theta(x) = \theta_0 + \theta_1 * (waterLevel) + \theta_2 * (waterLevel)^2 + … + \theta_p * (waterLevel)^p \)

つまり、

となるように X_polyに値を入れます。

課題4:validationCurve

課題4では、正則化項のパラメータλを0から10まで変化させて、最適なλを探します。

タイトルとURLをコピーしました