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

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

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

続きを読む

iDeCoを使用する上での注意点 ~利益を最大にするために~

概要

本記事では以下の内容について述べている。自分のメモ代わりの意味合いが大きいが、興味のある方はぜひご付き合いください。

  • iDeCoの概要
  • iDeCoのデメリット
  • 会社員はどう活用すべきか

(いろいろケーススタディなども行ったがごちゃごちゃして主張が不透明になったので没にした...)

iDeCoとは

個人型年金制度で、以下のメリットがよく主張される。

  1. 所得税と住民税が安くなる
  2. 運用期間中の利益は非課税

1のメリットが特に注目される。例えば、年収700万の会社員がiDeCoを利用して月1.2万の積立を行った場合、年に4.32万の税金の節約になる(1.2×12×(所得税20%+住民税10%))。年収や積立金額が変わらずにiDeCoを38年間(22~60歳)使うとすると、合計で164.16万円の節税となる。

2については運用利益がまるまる次の投資に使えるというメリットである(通常は約20%の税金を差し引かれる)。

シミュレーションなどを細かくしたい方のために楽天証券のリンクを置いておく。

個人型確定拠出年金:iDeCo(イデコ) | 楽天証券

iDeCoのデメリット

一方デメリットについてはまとまっている情報がないように感じる。自分が調べた限りのデメリットを以下に羅列する。

  1. 60歳まで引き出せない (家計が急変したときにリスク)
  2. 受取時には税金が発生する (退職所得 or 雑所得扱い)
  3. 口座に係る手数料が高額 (最低でも年2000円以上かかる)

1のデメリットはよく紹介されている。

2のデメリットは注目され始めたが、税制が複雑なため人によってかかる税金の額が大きく異なる。シミュレーションなどの登場が待たれる(誰も作らなかったら自分が作るまである)。 特に退職所得として受け取るときに注意が必要である。

参考までに記事を紹介する

これは有料記事 イデコ税負担、周知不足 退職金で控除枠使い切る恐れ: 日本経済新聞

こっちは無料 スタートiDeCo(3)2つの受け取り方 税負担額の比較が肝心: 日本経済新聞

3のデメリットを紹介する記事はあまりで見つからなかった。 積立金額がそのまま運用されるのではなく、それなりに高い手数料(年2000円以上)を引かれるのだ(もちろん投資信託を買えば信託報酬の費用も追加でかかる)。買付手数料0円の投資信託が流行りのこのご時世には高い費用である。さらにはiDeCoで積み立てた金額を取り崩すときにも一回につき440円の手数料が発生する。月1の年金として貰う場合は年に5280円の手数料が発生することになる。(といえ相対的に手数料はやり取りする金額に対して小さな割合なので極端に損につながることは少ないとも思う。)

手数料の一覧はこれにまとまっている いくらかかる? なぜかかる? 確定拠出年金の手数料 | りそな銀行 確定拠出年金

会社員はどう活用すべきか

  • 余裕がないうちはやらない
    • まずは当分の生活資金を貯める
    • その後の余裕資金は積み立てNISAに回す
    • それでも余裕があったらiDeCo
  • 金を突っ込むなら限度ギリギリ(12000円/月)まで
    • 相対的に管理手数料が安くなるので
  • 受取時は一時金として退職控除枠ギリギリまでうけとり、残りは年金で。年金は年1回で受け取る。
    • 大手の場合、退職金で退職所得控除の枠を使い切ってしまう可能性が高い。そのときに控除の適応されない大金を受け取ってしまうと累進課税によって高額な税金が発生しがち。年金として貰う場合でも多すぎると所得税が多くなってくるので注意。
  • 節税効果を過信しすぎるな
    • お得になった税金(積立金額で得した所得/住民税+運用利益に本来かかるはずの20%分)の半額ぐらいは受取時に払うことになると見積もっておこう(めちゃくちゃ人によって差があるけど)。

追記

なんでこういうのって書いたあとに発見するんでしょうかね。 自分のよりよくまとまってました。

horrorxzombi.com

気になるのはiDeCoを用いた場合に損をする場合があるのか、という疑問点だ。損することはほぼない。ただし本記事やリンク先で述べたようなデメリットが積み重なり、思ったより得した金額が小さかったというようなことはあるだろう。損する場合だが、例えば、22歳に1年だけiDeCoを用いてその後転職し、60歳までiDeCoに積み立てられない場合は口座管理手数料が節税効果を上回るので損をする。

このような状況以外でiDeCoを使用しても損をすることは基本的にないだろう。ただし、節税効果が思ったよりも大きくないのも把握しておくべきだ。その上で60歳まで引き出せないリスクを取れるのか自分と相談しようと思う。

人生最後のキーボードを購入 Ultimate Hacking Keyboard (UHK 60 v1)

  • Ultimate Hacking Keyboard とは
  • 一週間使ってみた感想
    • 打鍵感について
    • 独自機能について
    • 静音化
  • 注文してから届くまで
    • 注文方法
    • 届くまで
  • 開封から設定まで
  • 最後に

Ultimate Hacking Keyboard とは

最近購入した最高のキーボード。もうほかのキーボードは買わないと思う。 これ。 ultimatehackingkeyboard.com

ハンガリーにある会社が製造している。

サイトに行けば商品の特徴の紹介はしてくれるが、軽く書き出すと以下である。

  • HHKBを分割キーボードにしたような感じ(分割でなくても使用可能)
  • 自作キーボードのような機能をハードウェア側でサポートしている。例えばキーの配置変更やレイヤー機能などである
  • 拡張モジュールによって、トラック(ボール|ポイント|パッド)などを追加することが可能

本記事では、"1週間使ってみた感想"、"注文してから届くまで"、"開封から設定まで"の順番について書こうと思う。

続きを読む

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

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

続きを読む