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

主に機械学習に関する覚書や情報の整理

ランダムフォレストと検定を用いた特徴量選択手法 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という手法は経験上非常に強力で、判別や回帰の性能が著しく低下したことはない。低下しても誤差の範囲内。むしろ性能が良くなることが多い。

続きを読む

AtCoderでCythonの力を開放する魔術詠唱

概要

以下のformatをPythonで提出すればいい

mycode = r'''
# distutils: language=c++
# cython: language_level=3, boundscheck=False, wraparound=False, cdivision=True
{ここにcythonのコードを書く}
'''

import sys
import os
if sys.argv[-1] == 'ONLINE_JUDGE':  # コンパイル時
    with open('mycode.pyx', 'w') as f:
        f.write(mycode)
    os.system('cythonize -i -3 -b mycode.pyx')

import mycode
  • 概要
  • AtCoderにおけるCython提出の弱点
  • 解決方法
  • 性能評価
    • Pythonの回答
    • Cythonの回答
  • まとめ
  • 参考文献
続きを読む

AtCoderでPythonが再帰に弱い問題をどうにかしたい

概要

目次

  • 概要
  • 背景
  • 解決法
  • 速度比較
    • PythonとPypyの回答
    • Cythonの回答
  • Cythonを使いやすく
  • 今回のオチ
  • まとめ



本記事の貢献

  • Python, Pypy, Cythonにおける再帰関数の速度比較
  • cythonをscript感覚で動かすコマンドの作成
  • (stackで書き換えるのが一番早かったというオチ)
続きを読む

githubやnoteでもTeXの数式を書くぜ

f:id:aotamasaki:20200809112514p:plain

  • この記事は何?
  • 使い方
  • 作成のモチベーション
  • 関連するツール
  • まとめ

この記事は何?

これを作った↓

https://tex-image-link-generator.herokuapp.com/

f:id:aotamasaki:20200809112505p:plain

これを使えば、githubのreadmeやissuesに数式を埋め込むことができる。

例えばこんなふうに。

f:id:aotamasaki:20200809112500p:plain

noteやhatenablogなどのmarkdown(HTML)が使えるサービスに転用することもできるはず。

続きを読む

自動化で\のの/ラッシュを攻略 (毎週!いちかの超BEMANIラッシュ2020)

ののラッシュとは

これ。KONAMIリズムゲームのイベント。 カードを引くだけというカードバトルをする。 本田圭佑より勝てる。

p.eagate.573.jp

カード引くのめんどくさすぎ問題

このイベントでは1日1回、特定の時間にブラウザ上で操作が必要。 いや、普通に忘れるしめんどくさいわ。

SeleniumによるWeb操作の自動化

面倒な繰り返し操作はPythonにやらせる。 やることは前回の記事と一緒。

aotamasaki.hatenablog.com

書いたプログラムがこちら。

github.com

これを実行すると、特定の時間に勝手にwindowが開き、勝手にカードバトルをしてくれる。

使い方などは上記のリンク先に書いてあるので使いたい方がいましたらご自由に。

イメージとしてはこんな感じに動作します。 (いちかじゃんけんのときの動画の使いまわし)

f:id:aotamasaki:20200630210806g:plain

こうしてほっとくだけで楽曲を解禁できるようになったのであった。

バグ報告などはgithubのissuesからお願いします。

予言

じゃんけん、カードバトル、と来たので次のイベントはコイントスでしょう。本田圭佑に負けた分を取り返したい。

Mo's algorithm のPython実装 (コピペ用)

この記事はなに?

Mo's algorithmについてPythonでの実装が検索に引っかからなかったので、(自分のメモも含めて)ここに実装をおいておく。

コンテストに向けてコピペで済むように心がけた。

Mo's algorithmとは?

このブログにたどり着いてる時点で多くを語る必要はないと思うので以下の画像一枚で。

f:id:aotamasaki:20200804225915p:plain

詳細な解説は偉大な先駆者たちのブログを参照していただきたい。

続きを読む

自動化でいちかジャンケン2020を攻略

summary

これ作った。

f:id:aotamasaki:20200630210806g:plain

いちかジャンケンとは

これ。KONAMIリズムゲームのイベント。本田圭佑より勝てる。

p.eagate.573.jp

じゃんけんするのめんどくさすぎ問題

このイベントでは一日三回、特定の時間にブラウザ上でじゃんけんすることが必要。

2020/06/29時点では毎日以下の時間帯に操作する必要がある(逃した操作は取り戻せない)。

  • 1回目:10:00~15:00
  • 2回目:15:00~20:00
  • 3回目:20:00~10:00

いや、普通に忘れるしめんどくさいわ。

SeleniumによるWeb操作の自動化

面倒な繰り返し操作はPythonにやらせる。 プログラムをガーッっと書き。

続きを読む

蟻本Python回答集 中級前編 (P127~P187)

はじめに

AtCoder青を目指しつつデータ構造など勉強するため、プログラミングコンテストチャレンジブック [第2版] (通称、蟻本)を解くことした。 せっかくなのでPythonでの解答をここに記録する。

Pythonで解答してる人のブログを漁っても初級編の途中(DPとか)で挫折してる人が多そうだったので誰かの助けになれたらと思う。

著作権保護のため本の内容をすべて公開するわけではないので、解説などは本を見てほしい。 一方、変数名の説明なしにコード例が書いてある問題もいくつかあり、そういう問題はコードのコメントに意味合いを補足した。

この本の購入に関してはmynavi booksからPDFを購入するのがおすすめだ。ノートアプリを使っていろいろ書き込むことができる。

初級編はこちら

aotamasaki.hatenablog.com

続きを読む