田中TOMのめざせKaggleMaster #16 家具画像分類問題にチャレンジ

動画

次の参加コンペ

iMaterialist Challenge (Furniture) at FGVC5

  • 128種類の家具や生活グッズの分類
  • Train: 194,828枚
  • Validation: 6,400枚
  • Test: 12,800枚

まずは、json形式のURLから画像をローカルにダウンロードする所から始まる。(画像のデータが置いてあるホストサイトはバラバラで、いつ無くなるか分からないと公式にも書いてある)

kaggle api
これを使えばファイルのダウンロードを簡単にできます

画像ファイルをダウンロードするスクリプト

画像例
画像例1

画像例2

今週のKernel関連

  • https://twitter.com/kaggle/status/976164020410552320

ニュース

田中TOMのめざせKaggleMaster #15 半分松江、半分東京

動画

今後やること

  • kaggleのコンペを覗いたら画像解析のコンペが殆どだった
  • ゼロから始めるディープラーニングの畳み込みNNの章をやってなかった
  • 畳み込みNNの勉強をしてから取り組んでいきたい

Kernels Awards

EagerFMNIST | Kaggle
– データは Fashion MNIST
– TensorFlow の Eager Execution を利用している
Tensorflow 1.5のEager Executionを触ってみた - Qiita

Julia now

【お知らせ】たのは島根の松江に引っ越しました。
– せっかくなので普段仕事でも使ってるRubyと趣味で使っているJuliaで何かしたい。
データサイエンスにおけるRubyの現在の位置づけと可能性 | しまねソフト研究開発センター
– 記事著者の村田 賢太さんはRubyでPythonが呼べるpycall.rbも作ってる人
– 記事ではJuliaについても触れていてRubyでJuliaが呼べるruby-juliaも作ってるけどメンテはされていない
– Matsue.rb とか勉強会でここらへんの技術を触っていく予定

今週のニュース

田中TOMのめざせKaggleMaster #14 TOMは めのまえが まっくらに なった!

動画

Kaggle

いろいろやってみたけど順位は上がらなかった

これまでのやり方

・特徴量選択(10)
・XGBoost

スコア:0.13660

試行1

・特徴量選択をする(10)
・主成分分析を行う(5)
・XGBoost

生の特徴量使ったほうが良かった

試行2

・特徴量選択をする(10)
・XGBoostとSVMで学習する
・スタッキング

SVMが足を引っ張る

試行3

・特徴量選択をする(10)
・主成分分析(5)からのXGBoost
・主成分分析(5)からのSVM
・スタッキング

SVMが足を引っ張る

今週のKernels award

毎週優秀なKernelが選ばれるのでそれを取りあげてモダンな解析方法を学んでいく
KB-->MB-->GB-->TB-->?B (BigQuery)

Julia

今週のニュース

Julia DataFrames.jl で数字で始まるカラム名を取得する場合の工夫

以前の記事 で紹介した

DataFrame(load("./input/train.csv"))

だと、どうやら数字が先頭のカラム名をそのまま扱ってしまう。

Julia DataFrame columns starting with number? - Stack Overflow

によると、 :2aa という表記は Julia 上シンボルではなく 1:2aa というレンジの扱いになってしまうため、"1st"というカラムが存在しているからといって、df[:1st] と書いても想定しているカラムを取得できない。

DataFrame.readtable だと、いい感じにカラム名の先頭を "1st" => "x1st" のように x を入れてくれていた(これも、実際データ触る時邪魔な気もするけど)

解決方法

ちゃんとシンボルだと指定してあげればいいので、

df[Symbol("1st")]

としてあげれば取得できる。少し不格好だが嫌いじゃない。

Julia の DataFrames.readtable が deprecated になって CSV.read 推奨になったけど使いづらいので別の方法を探してみた

DataFramesでreadtableを実行しようとすると、deprecated warningが出る。

DataFrames.readtable

DataFrames.readtable("./input/train.csv")
=>
WARNING: readtable is deprecated, use CSV.read from the CSV package instead

CSV.read

これに対応しようとして CSV の read メソッドを呼ぼうとするが、現状このメソッドでやろうとするとNull値を許可したり、Unionで型を指定してあげないといけなかったりする。

CSV.read("./input/train.csv")
=>
CSV.ParsingException("error parsing a `Int64` value on column 27, row 235; encountered 'N'")

CSVFiles.jl

他に良さそうなライブラリがないか探してみたら、CSVFiles.jl: FileIO.jl integration for CSV filesが使いやすそうだった。そういえば、提出用ファイルで出力する時にheaderのカラムにダブルクォーテーションを使いたくないときにもこのライブラリで対応できた。スター数は全然付いていないがメンテもされているし使い勝手が良い。作者のdavidanthoffさんがjuliaの質問サイトとかで自分のライブラリを紹介して広めているのも健気で好感が持てる。Read file with CSV.read - Usage / First steps - Julia discourse

使い方としては

DataFrame(load("./input/train.csv"))

DataFrames.readtable と同じように扱うことができる。

田中TOMのめざせKaggleMaster #12 回帰木と分類木

動画

回帰木と分類木

今更だけど、分類木と回帰木の説明
決定木、分類木、回帰木の意味と具体例

今回は回帰の問題なので回帰木を用いる。

最適深度と木の数を決定する

GridSearch()関数が最適な深度、木の数等を決定してくれる

なぜ正規分布?

RF系における特徴量重要度測定

OOBを使うらしい
【機械学習】OOB (Out-Of-Bag) とその比率

今週のニュース

田中TOMのめざせKaggleMaster #11 主成分分析を使う

YouTube

House Prices

Kaggleの練習問題(Regression)を解いてKagglerになる - Qiita

Metabase

  • Heroku x BigQueryで動かしてみた

主成分分析

機械学習と主成分分析
– 機械学習では特徴ベクトルの次元(特徴変数の数)が増えるとパターンも増えてしまい、必要なデータも膨大になる
– 特徴ベクトルの次元数は少ない方が良い。
– 主成分分析PCAは次元の数を削減して「次元圧縮」や重回帰分析の前処理として特徴量同士を無相関にすることができる
– 元のデータの特徴の情報量をどれだけ持っているかを寄与率で表現して、累積率を見て上位を選択することで、次元を減らす

主成分分析の作業手順

  1. 外れ値を除去する
  2. 元データから教師ラベルを取り除く
  3. 主成分分析を行う
  4. 累積寄与率を吟味して、第何主成分まで利用するかを決める
  5. 教師ラベルを戻し教師データを作成する
  6. 学習
  7. 学習に用いなかった教師データを用いて学習成果を評価
  8. 新たに得られた未知データを識別・予測する

Julia でやってみた

PCA RandomForest 2018/01/13 2625/2949位

今週のニュース

田中TOMのめざせKaggleMaster #10 回帰問題へ挑戦

動画URL

田中TOMのめざせKaggleMaster #10 回帰問題へ挑戦 - YouTube

Next Competition

House Prices: Advanced Regression Techniques | Kaggle

  • 米国アイオワ州のエイムズという都市の物件価格を予測する問題
  • データは、”築年数”、”設備”、”広さ”、”エリア”、”ガレージに入る車の数”など79個の変数および物件価格による1460戸の学習データが与えられる
  • データをもとにモデルを作成し、1459戸の家の価格を予測する

参考記事

今週のニュース

田中TOMのめざせKaggleMaster #9 2017年に扱った機械学習の技術を振り返ろう #LetsRewind

動画 URL

田中TOMのめざせKaggleMaster #9 2017年に扱った機械学習の技術を振り返ろう #LetsRewind - YouTube

  • 今年の頭から機械学習スタート
    • ゼロから作るディープラーニング
      • 全10回
    • Keras
      • 全4回
      • keras使いやすい
    • RandomForest
      • 全4回
      • 分類問題で頼りになる
    • Kaggleマスター
      • 継続中
      • マスターになれるのか!!?

Julia now

Kaggle の Kernel が動いている Julia Docker を最新版にしていく - Qiita

今週のニュース

田中TOMのめざせKaggleMaster #8 初コンペの結果発表

田中TOMのめざせKaggleMaster #8 初コンペの結果発表 - YouTube

Kaggle kkbox 挑戦

kaggle アドベントカレンダー 2017 データサイエンティストを目指すための Kaggle チュートリアル

  • まずは愚直に数字を出してみる
  • そこから数値が良くなるにはを考える

データ処理でやったこと

  • Date系はとりあえず年だけにしてみた
  • 日付情報が入ると数値に直した時に飛び飛びの値になってしまう気がする
  • trainデータのmsno(id)にTransactions Logs Members が全て対応しているわけではない
  • test データに対応する場合は 「transactions logs members」と「transactions members」 と 「transactions」の3種類で学習を行いそれぞれ、予測をしていった
  • データ処理を行ったものはcsvで再び保存しておいて次回から使えるようにしておく

今後の課題

  • ローカルで重めのファイルを動かしながらだとPCが作業できなくなるのでAWS上でメインにしていきたい
  • AWS上で作業するならデータをs3に入れてデータマウントするみたいな仕組みが必要そう。
  • XGBoost と MXNet 使いこなせるようになりたい
  • グラフ化するのが上手くできないところもあり、どこで区切ったりすれば良い結果になるのか判別できない
  • 自分でカラムを作っていく必要がありそう
  • 提出回数制限に無駄に引っかからないために、trainデータを更にtrainとtestに分割してやって手元でテストするのが良さそう

xgboost

1ヶ月ぐらい前から、julia 0.6 に対応し出した。
最近 Xgboost や MXNet をメンテナンスしている dmlc というグループが julia のメンテも積極的にしてくれてるようになってる。特に MXNet は活発に開発が進んでくる Gluon が julia で使えるようになる日も近いかもしれない。

xgboost の クロスバリデーション

News

Amazon Comprehend – 継続的に学習される自然言語処理