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

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

RNNを用いた正規分布の回帰 keras実装

概要

  • 時系列の1時刻後の分布を推定した
  • パラメーターが時間に依存する正規分布を仮定した
  • ニューラルネット正規分布のパラメーターを学習できるように適切な損失関数を導入した
  • 概要
  • 問題意識
  • データと今回の目的
    • データ
    • 目的
  • 仮定
  • モデル
  • 損失関数
  • 結果
  • 損失関数の導出
  • まとめ
  • あとがき
続きを読む

特徴量選択の今とこれから

  • 特徴量選択とは
    • 特徴量選択の難しさ
    • 特徴量選択の手法の大別
  • 教師ありの特徴量選択
    • filter method
      • 単変量とクラスラベルの関連性を上げる
      • 関係性を上げて冗長性を下げる
      • 関係性を上げて多様性を上げる
    • wrapper method
    • embedding method
  • 特徴量選択のこれから
    • 超高次元データと特徴量選択のアンサンブル
    • 不均衡データにおける特徴量
    • オンライン特徴量選択
    • 深層学習を用いた特徴量選択
  • 最後に

特徴量選択とは

特徴量選択(Feature Selection, 変数選択とも)はデータサイエンスにおいて非常に重要である。

例えば、製造業において欠陥品を判別するタスクを考えてみよう。 このタスクは本当に欠陥品を判別するだけがゴールなのだろうか。 本当に知りたいのは欠陥品がどうして生じるか、という点だろう。 例えば、欠陥品と関係のあるセンサーや工程と提示できたら専門家たちはそこを改良し欠陥品をそもそも生み出さずに済むことができる。 これが本当のゴールである。

ここで重要なのが特徴量選択である。

また、良い特徴量選択は以下の恩恵が期待できる。

  • 学習時間を減らせる
  • モデルの解釈性が向上する
  • モデルの精度が向上する
  • 過学習を減らせる

以前に当ブログでも特徴量選択のまとめのような記事を書いた。

aotamasaki.hatenablog.com

これはかなり初心者向けの内容になってしまったが今回は、もっと踏み込んだ内容にしようと思う。 具体的には、特徴量選択の手法の全体像を紹介してから、需要が大きいとされる教師ありの特徴量選択について代表的な手法とライブラリをいくつか紹介する。 また、最後に最新の特徴量選択の動向も紹介する。

今回紹介する半分以上の内容は、こちらのサーベイ論文にあるので興味がある方はどうぞ。

https://www.researchgate.net/publication/323661651_Feature_selection_in_machine_learning_A_new_perspective

本記事の想定読者は大学学部レベルの機械学習、確率統計、情報理論をかじったことのある方であるが、初学者にも伝わる部分があるように努力した。

特徴量選択の難しさ

例えば、100特徴量から最適な特徴量の部分集合を見つけろ、という問題は、2^{100 } - 1通り試すことになる。 1通りあたり1秒で学習が終わるとしても、全通り試すには宇宙誕生から今までをあと2^{41} (2200億)回繰り返さなければいけない計算になる(宇宙の年齢を2^{59}秒ほどとした)。 最適な特徴量の部分集合を選ぶというのは実質不可能に近い。 この状況の中で、いかに最適な組み合わせに近いものを選択できるか、というのが特徴量選択の難しさである。

続きを読む

QRNN ニューラルネットを用いた分位点回帰

概要

  • 条件付き分布p(y|x)の分位点を推定するNeural Networkを紹介する
  • そのアイデアは既存のNeuralNetに対して損失関数を変えるというシンプルなもの
  • 人工データを用いてちゃんと推定できていそうか確認した

目次

  • 概要
  • 目次
  • 分布推定の重要性
    • 点推定の問題
    • 点推定から分布推定へ
  • 分位点とは
  • QRNN:Quantile Regression Neural Network
  • 人工データ実験
    • 実験設定
    • 実験結果
  • 今回の損失関数で分位点を推定できる証明的な
  • まとめ
  • 参考
続きを読む

ランダムフォレストと検定を用いた特徴量選択手法 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環境の不一致
    • 測るたびに変わる脳波
  • ソースコード
続きを読む