予測モデル作成における大まかな流れ

  1. 目的変数の選定
  2. 開発データとテストデータに分別(以下、開発データに対して)
  3. 目的変数と説明変数の関係整理
  4. 説明変数同士の関係整理(非線形モデルのみを扱う場合はすっ飛ばしてOK)
  5. 欠損値の補完、除去(リストワイズは使わない、特に連続変数を熟考する、離散はカテゴリー化で欠損を扱えばOK)
  6. 損失関数の計算方法を考える(家賃などは値段に幅があるのでmseをとると、大きい値段に引っ張られる。そーいう時は比率でカバー)
  7. ハイパーパラメータチューニング(10フォールドを使用)
  8. 評価方法考える。
  9. 妥当なら完成

賃貸物件の価格予測における気付き

  • 全物件を一つのモデルで回すのは上手くいかない。
  • 家賃がデータセットに対して中央値よりも高くなると予測値が下側にぶれる
  • 家賃が中央値よりも低いと上側にぶれる
  • 家賃を幾つかの価格帯で分けてモデルを作った方が精度が高くなる気がする
  • 重回帰分析をする際、Kerasを用いて行うと、9万件のデータセットを用いると5000epoch(4時間)回しても損失関数が収束しない。
  • 重回帰分析はsklearnを使うべき
  • keras とsklearnの違いは、バッチマイに最適化させるか、一遍に全部やるかの違い。
  • 画像を用いる場合は、50epoch(4時間)でうまいこと終わる。
  • 予測値と真値の誤差は1万5千円くらい
  • VGG16の5ブロック目はpopしても問題なし。
  • 恐らく、5block目で分類学習をしてるっぽい。

NNメモ

  • dict を返り値として使うときreturnの前に変数を置けばいい。
  • VGGとtextを使うと誤差5000円
  • textのみ2万
  • 画像のみ5万
  • 試したモデル、text=6->3次元、adamで学習率0.01でおけ
  • fineチューニングならadamよりsgdの方がいい
  • VGGはconv5から分類学習になってるっぽい。
  • lossで語るより予測結果が重要
  • 参考文献:暗黙飲食店、、、(NAIST)、Victor Gun(map minning)

 

NN メモ

  • メモリを超えるデータを学習する際はfit.generaterをつかって、バッチマイにデータを読み込むようなプログラムにする。
  • 250×250の画像入るをRGBで40万枚読み込み、学習させたところ1エポックに4時間かかった。
  • GPUの使用率の見方は、「$ nvidia-smi -l」でみる。
  • メモリの計算方法:255*255*3*(64bit/8bite)/1024/1024*400000=600MB
  • continue でスキップができる。
  • if文はture or falseを返す形をとるものであればそのまま使える。(os.existなど)
  • rakeはコマンドラインの入力をまとめるもの。(Ruby:今のところ使う旨味はなし)

 

 

python3メモ

  • $ scp user@remoteHost:/home/user/test.txt /local/pathで:の後に半角スペースを付けると挙動が変わる。
  • VGG16では、pop()を使って、レイヤーを除いた後に、変更レイヤーをlist保存しないと使えない。
  • pandasのdataFrameで抽出した1列はlistとしてそのまま使える(for k in df[23]:みたいなことができる)
  • kerasのfit関数ないで、validation_data_split="0.2"を使うのが楽。
  • validationを使う際、なぜか、callback関数内に、重みの保存をするプログラムを書くとエラーになる。(eras.callbacks.ModelCheckpoint(filepath="Weight/"+W+".h5",monitor="val_loss",save_best_only=True)])これは使えない。
  • 上の場合、compile,fitした後にsaveコマンドで書けば問題なし。
  • サーバ上で、matploptでグラフを保存するときは,import matplotlib matplotlib.use('Agg') を書かないとエラーになる。
  • 適当にコードを書いて、最終的にdefとif __name__ == '__main__':、argsを使うとかっこいい見栄えが良い。あと、エラー箇所が分かりやすい。
  • Githubにおいて、ローカルとリモートで余りに、整合性がないと、途中で整理できなくなる。(強制 push)でとうにかなった。
  • 大量ファイルや時間のかかる計算をさせる場合はScreenコマンドを使うと便利。