学習する天然ニューラルネット

主に機械学習に関する覚書や情報の整理。競プロ水色→Kaggle Master→?

ランダムフォレストと検定を用いた特徴量選択手法 Boruta

  • 特徴量選択とは
  • Borutaとは
  • とりあえず使ってみる
    • ベースラインの判別
    • Borutaの判別
  • Borutaのアイデアの概要
  • Borutaのアルゴリズム
    • 1. 判別に寄与しないはずの偽の特徴量を作る。
    • 2. 偽の特徴量と一緒にランダムフォレストを訓練。
    • 3. 各特徴量の重要度と偽の特徴量の特徴量を比較。
    • 4. 複数回比較し検定を行うことで、本当に重要な特徴量のみを選択。
  • 検定について
    • 1. 棄却したい帰無仮説と受容したい対立仮説を用意する。
    • 2. 観測値から検定統計量Tを定める。
    • 3. 帰無仮説が正しいとしてTの分布を求める。
    • 4. 十分小さい有意水準αを定め、帰無仮説が正しいときにとなる領域を棄却域とする。
    • 5. 観測されたTがに入っていたら対立仮説を受容し、入っていなければ帰無仮説を受容する。
  • まとめ
  • 補足
  • 使う際のTips等 2019/01/06追記
  • 参考

特徴量選択とは

特徴量選択(Feature Selection, 変数選択とも)はデータサイエンスにおいて非常に重要である。 Kaggle等のコンペティションではひたすら判別の精度を重要視するが、実務上どうしてそのような判別をしたのかという理由のほうが大事である(回帰問題も同様)。 例えば、なにかの製造工程をイメージしてみよう。 当然欠陥品は生じるだろうが、この欠陥品を見分けるシステムよりも欠陥品を減らせる改良のほうが良いだろう(もちろん見分けるのも大事だが)。 そこで、判別においてどのような特徴量が重要だったか選ぶことができれば、改良への糸口が見えてくるだろう。

また、特徴量選択した結果、モデルの学習や推論が高速化されたり、過学習しづらくなったり、結果判別の精度が良くなったりする。

Borutaとは

ランダムフォレストと検定を用いた特徴量選択の方法の一つである。 Witold R. Rudnicki, Miron B. Kursaらが考案。

R実装 CRAN - Package Boruta

Python実装 (バグあり。まとめ後に補足します。)(アップデートされてました pip install Borutaしましょう)

github.com

(名前の由来はスラヴ神話の森の神の名前らしいです。こんな見た目してます。)

f:id:aotamasaki:20190105193106p:plain

このBorutaという手法は経験上非常に強力で、判別や回帰の性能が著しく低下したことはない。低下しても誤差の範囲内。むしろ性能が良くなることが多い。

続きを読む

pickleより楽にpythonオブジェクトを保存する方法

この記事で言いたいこと

import pickleしてwith openをいちいち書くのめんどくさくない?。pandas.to_pickleやpandas.read_pickleを使えば楽。DataFrame以外のものも保存できる。

  • この記事で言いたいこと
  • はじめに
  • データの用意
  • pickleをimportしてwith openで書き込んだり読み込んだりするやり方
  • pandasを使ったやりかた
  • まとめ
続きを読む

時系列データで予測区間付き回帰を行う keras

概要

  • 時系列のデータについて、1時刻先を推定する回帰問題を扱った。
  • 点推定ではなく正規分布を仮定した分布を推定した。
  • 区間を予測区間とした。
  • 電力使用量のデータを用いて実験した。
  • 概要
  • 問題意識
  • イデアの概要
  • データの説明
  • モデルの説明
  • 結果
  • まとめ


2019/03/01追記

もっとちゃんとやりました。

aotamasaki.hatenablog.com

続きを読む

脳波を可視化してみた

f:id:aotamasaki:20181027180635p:plain

概要

  • 脳波を色を使って可視化してみた。
  • 脳波を採取するのには、Mindwaveを用いた

amzn.asia

  • 可視化には、Nanoleaf Auroraを用いた

amzn.asia

具体的には行動によって変わる時系列としての脳波を、光の系列で表現した。

  • 概要
  • 脳波と表現の説明
    • 脳波とは
  • 結果
  • 難しかった点
    • Python環境の不一致
    • 測るたびに変わる脳波
  • ソースコード
続きを読む

Hyper+xonshで超モダンな環境づくり

はじめに

ばんくしさんをフォローしたらすっかりxonshに洗脳された。 また、巷でうわさのHyperなるターミナルアプリを試してみたら使いやすかったので、組み合わせて使ったら最強では?と安直な発想で記事を書きはじめた。

適当に操作してみたのがこちら。

f:id:aotamasaki:20180929141545g:plain

候補がフローティングウィンドウに出ていたり、補完がゴリゴリに効いていることがわかるだろう。また、動画内ではpythonの仮想環境を切り替えてもいる。

本記事では以下のことを書く

  • はじめに
    • Hyperとは
    • xonshとは
  • Hyperの導入
    • 起動するshellの選択
    • 文字化けの問題
  • xonshの導入
    • お手軽に使ってみる
    • メインに使うには
    • xonshでPythonの仮想環境の構築

記事の対象者

  • .bashrc、.zshrcなどと言われて何かわかる方
  • Homebrewがある
続きを読む

時系列データでVariational AutoEncoder keras

はじめに

前回の記事で時系列入力に対するオートエンコーダーを組んだ。

aotamasaki.hatenablog.com

今回は潜在変数を正規分布に押し込むというVariational AutoEncoderを組んでみた。CNNとVAEを組み合わせる記事は割と見つかるのに、RNNとなったとたん見つからないものである。

データはMNISTであるが後述するように、時系列だと見なして入力した。

まずはモデルとデータの概要を説明する。そのあと、結果で再構成された数字と生成された数字の例を示す。最後に、潜在変数Zが正規分布になっているのか確かめる。

  • はじめに
  • モデルの概要
  • データの概要
  • 結果
  • Zは本当に正規分布をしているのか?
  • まとめ
  • 参考文献

モデルの概要

f:id:aotamasaki:20180923120834p:plain

続きを読む

時系列データを使ってオートエンコーダー keras

はじめに

時系列でオートエンコーダーを組む練習。ネットで漁っても見当たらなくて(kerasの日本語記事)、kerasのblogでも放置されていた。

Building Autoencoders in Keras

""We won't be demonstrating that one on any specific dataset. ""

→自分でやるしかねぇ

続きを読む