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

主に機械学習に関する覚書や情報の整理。競プロ水色→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という手法は経験上非常に強力で、判別や回帰の性能が著しく低下したことはない。低下しても誤差の範囲内。むしろ性能が良くなることが多い。

続きを読む

AIメロディー生成コンテスト 弁財天第二幕 参加記録

概要

2023年10月28日、「弁財天」というAIメロディー生成コンテストにチームメンバーのCapchii(X, Youtube) と一緒に出場した。 コンテストは、運営から伴奏のデータが提供され、それに対して各チームは制限時間内に自身のメロディー生成システムを実行し、生成されたメロディーが聴講者の投票によって評価されるものとなっている。結果として、我々のチームは2位(7チーム中)を獲得。 私たちが心がけていたポイントは、王道なメロディーの作成やメロディーの選定、そして後処理を施すことだった。 本ブログでは、このイベントについての振り返りを行う。実際に生成したメロディーや出場しての感想等を提供する。

  • 概要
  • 対象の読者
  • 大会の仕組み
  • 各対戦の結果と生成したメロディー
    • 初戦
    • 準決勝
    • 決勝
  • 解法と敗因
    • 解法LT
    • 我々の思う良いメロディーとは
    • 敗因(と推測されること)
  • 感想
  • 2023-10-30追記
続きを読む

【それを言ってはいけない!を言う】「データ分析失敗事例集」 を読んで

はじめに

2023/08/03発売の「データ分析失敗事例集 ―失敗から学び、成功を手にする―」を知り合いのご厚意により頂いたので、読んでみたところ非常に面白かったので、感想をブログにまとめようと思います。

www.kyoritsu-pub.co.jp

全編通していい意味で社会性フィルターが外れていて、これを出版することは非常な苦労があったと察します。著者に敬意を評して、本ブログでも特に配慮などはせずに感想を書いていこうと思います。(何か問題があったらコメント欄で教えてください。コメントは公開前に自分にメールが来るようになってます。)

本書の概要

  • 本書ではデータ分析の失敗談を短編小説のように楽しむことができる。
  • 技術的な話はあまりないが、一部の専門用語については基本的な理解があると読みやすい。
    • 例えば、BERT, 傾向スコア, Redshift, Tydyverseと聞いて、どういうものでどういう使われ方をするのか知っているとより良い。
  • 著者は社会性フィルターを外し、物事をオブラートに包まずに記述している。この点が本書の価値でもあると感じた。
    • 本書の冒頭に「ビジネス側を非難するような内容が含まれる」と書いてある。
    • 全体を通じてビジネス側だけでなく、分析側の問題点も明確に指摘している。
  • データ分析の具体的な手法の詳細やシステムの構成・実装の方法については言及されていない。
  • 大体十数時間で読める分量である。ただし自分は読むのが遅い方なので、人によっては10時間もかからないかもしれない。

読むべき対象者

  • データ分析の失敗あるあるを把握しておきたい学生
  • 失敗を予め知り、自分の分析に活かしたい人
  • 短編小説のような形でデータ分析の失敗談を楽しみたい人

本書の内容と特徴

本書は失敗談の短編集で、合計25個の事例が紹介されている。1事例は8から10ページで説明されていて、テンポよく読むことができる。 各事例の冒頭では、登場人物の立場や所属会社がイラストで整理されているため、各事例の背景がわかりやすい。 各事例では内容をオブラートに包まずに、失敗の原因を明確に指摘しているので痛快な文章である。一部を抜粋すると、以下のような内容である。

  • 「調整役ばかりでものづくりをリードする人物がいない」
  • 「そのような理由ではBERTをやめられるわけがなかった。このプロジェクトはY氏による『BERTを使ってなにかできないか』プロジェクトだからである。」
  • 「半年後には想定以上の値を示すことができた。しかし一旦ダウンした査定が回復することはなく担当データサイエンティストは退職した。」
  • 「効果検証分析の真の目的はすでに決定済みの社内意志の統一化であり、新たな意思決定に寄与することではなかった。」(意訳)

データ分析の失敗事例だけでなく、データサイエンティストの人事事情などもコラムとして紹介されていて興味深かった。「コラム データサイエンティストの人事事情」は皆様も気になるところではないだろうか?

印象に残った事例

以下の事例が特に印象的であった。

  • CASE9 そんな目的変数で大丈夫か?
  • CASE15 プロダクトアウトでもドメイン知識は大事
  • CASE21 頑張って予測していたのは...
  • コラム 絶対失敗しないデータ分析
  • CASE10 成功した報告しか聞きたくない

上4つに関しては、個人的に学びが多いという点で印象に残った。ネタバレは避けるが「そんなところに分析上の罠が...」といった感想だ。特に「コラム 絶対失敗しないデータ分析」は本書の最終章であるが、今までとは異なり非常に真面目な文章で(いやずっと真面目だったろ)、データ分析にかける思いがアツく書かれている。

最後の一つCASE10に関しては、あまりにもデータサイエンティストが不遇で読んでてお腹が痛くなる感じがした。そういう意味で印象に残った。

おすすめです

全体として、本書はデータ分析の「失敗談」に焦点を当てた短編集という特異なアプローチで、データ分析の現場で起きる様々な問題をリアルに描き出している。読者がデータ分析の現場で犯しやすい間違いや誤解を理解し、それらを避けるための手がかりを得ることができる点で非常に価値がある。 この本を読むことで、データ分析の現場での課題や困難がどのようなものかを理解し、それを避けるための知識を身につけることができるだろう。それにより、より高品質な分析結果を生み出すことができるようになるに違いない。

www.kyoritsu-pub.co.jp

【Streamlitよりいいかも?】機械学習系のデモアプリ作成に最適!Gradio解説

  • はじめに
  • Streamlit vs Gradio
  • Gradioの設計思想
  • Interface
  • 中級者への第一歩、デモを作る際に知っておきたい処理
    • Gradioが担当する前処理について
    • プログレスバー
    • もろもろの出力結果を保存するには?
    • 認証認可(というか認可)
    • その他、解説しないが需要の有りそうなもの
  • まとめ

追記 : 動画になりました。

はじめに

機械学習系のデモアプリを作成することがしばしばありStreamlitを使用していたが、パラメーターなどをいじるたびに処理が最初から走るなどといった挙動に悩まされていた。 同僚がGradioというのを使っていたのでサーベイがてらメモしていたらブログが出来上がってしまった。

本ブログでは、GradioのQuickstart以上の内容に踏み込み、実際に実装するときに検索するだろうことをまとめた。 これを読めばGradio中級者と自称できるぐらいにはなるのではないかと思う。

対象読者は以下を想定している。

  • Pythonの基本的な文法(代入や関数宣言、コンテクストマネージャー(with句)など)を知っている方。
  • GradioのQuickstart(チュートリアル)以上に詳しくなり、実際にでもアプリを作るときに発生しがちな疑問点を事前に解消しておきたい方。
  • Streamlitを使ったことのある方だとより楽しめる内容である。

Streamlit vs Gradio

Streamlit使用者に向けて、StreamlitとGradioを比較した所感を共有する。Streamlitを使ったことのない方は読み飛ばしていただいても構わない。

まずStreamlitの良い点を上げると以下の点である。

Streamlit Gradio
文献の多さ 比較的多い 比較的少ない
デザイン 美しい (主観) デフォルトのデザインがダサい (主観)
UIコンポーネント 豊富 機械学習に最適化されたUIコンポーネント

次にGradioの良い点は以下の点だと感じた。

続きを読む

AI画像加工ツールClipdropの全機能を検証 (有料機能含む)

Clipdropとは?

https://clipdrop.co/ で提供されるAI画像加工サービス。

昨今職業驚き屋さんが驚き始めたのを感じるので今日はその実態に迫っていく。 検証に際しては有料登録もして比較するので参考になればと思う。

追記 : 動画にしていただきました!

  • Clipdropとは?
  • Clipdropでできる9つのこと
  • 有料版と無料版の違い
  • 各機能の調査
    • 機能1: Cleanup
    • 機能2: Text Remover
    • 機能3: Remove Backgrounds
    • 機能4: Replace Background
    • 機能5: Relight
    • 機能6: Upscale Image
    • 機能7: Generate Image (Stable Diffusion)
    • 機能8: Reimagine XL
    • 機能9: Uncrop
  • まとめ

ちなみに驚き屋さんのツイートには以下のようなものがあった。敵を作りたくないので特定が不可能な程度にChatGPTに変換させてあります。

「Clipdropと名付けられたこのサービスを試すと、全体的にその優れた性能に感動する!不必要な要素を除去する、主体を抽出する、さらには照明を調節することも可能。高解像度の画像をダウンロードするには料金が発生するが、1024x1024pxまでなら無料で使えるので、ウェブにて使用する際には無料範囲でも差し支えないと思われる。」

「【一切の費用なし・申し込み不必要・ウェブ対応】Clipdropが劇的に進化したところを皆様に紹介したいと思います。信じられないことに、無料かつ登録不要で利用できるジェネレーティブな塗りつぶしのような新機能が追加されていました!提供者であるhttp://Stability.aiさんは信頼できる有名企業なのでご安心ください。この新機能について、リプ欄で詳しく説明します😊」

「#ClipDrop を使ってみると驚愕した。Midjourneyで制作したクマと少女をさらにジェネレートしてみるとこのように変わった。クマの下部から別の足と思われるものが覗いている。」

Clipdropでできる9つのこと

続きを読む

Kaggle Masterになった日記

  • Kaggle Masterになった
  • "Feedback Prize - English Language Learning" で金メダル
  • 今後はどうしようか

Kaggle Masterになった

"Feedback Prize - English Language Learning" (以下FB3) で金メダルを取得した結果、メダルの条件を満たし、Kaggle Competitions Masterになることができた。FB3については後で思い出を語ることにしよう。

Kaggle Competitions Masterになるための条件とは金メダル1つと銀メダル以上2つである。実は過去に金メダルを取得したことがあったので、FB3では銀メダルでもMasterになることはできたのだが、2枚目の金メダルでmasterになることができて非常に嬉しい。実力を示せてよかったと感じた。どうやらKaggle Masterはアクティブユーザーの上位1%に入る実力らしい?

金メダルが2枚あるとちょっとプロフィールが強く見えないですか?そうでもない?

お気づきの方もいらっしゃるかもしれないが、今まで参加したコンペは3つとも自然言語処理に関するコンペである。 結果的にということもあるが、自然言語コンペに絞って出場することで素早くKaggle Masterになることができたと思う。

続きを読む

チームメイトに恵まれKaggle Competitions Expertになった日記

  • はじめに
  • Expertになるまでの戦歴
  • NBMEコンペの思い出
  • PPPMコンペの思い出
  • Masterは目指そうかな

はじめに

日記です。Kaggleを初めて2つのコンペに参加し無事Expertになったので、つれづれなるままにPCに向かひて、心にうつりゆくよしなしごとをそこはかとなく書くことにしました。 技術的に有用な情報はありません。運が強く味方してくれたため再現性はありません。

Expertになるまでの戦歴

kaggle戦歴。NBME 27位 で 銀メダル、PPPM 8位 で 金メダル。

NBME27位で銀メダル、PPPM8位で金メダルを取得したことにより、銅メダル以上2つというExpertの基準をクリアした。

これだけ見るとKaggle上手すぎぃ!次でMaster昇格か?という感じ。しかし後述するようにめちゃくちゃチームメイトに恵まれて運も良かったのが理由である。ソロだと銅メダルもかなり怪しい:pien:。

続きを読む

kaggle notebookで`pandas.read_pickle`ができない原因と対策法

  • 背景
  • 原因は二重にある
    • Pythonのversionの問題
    • Pandasのversionの問題
  • 手っ取り早い対処法
    • 自分の作業環境側
    • kaggle notebook側
  • サンプルコード
    • 自分の作業環境側
    • kaggle notebook側
  • 根本的な対処法
  • まとめ

背景

最近kaggleを始めて、困ったことに遭遇した。しかも調べても対策法を見つけられなかったため、自分の対策方法を記録に残すことにした。

遭遇した問題は以下のような状況で発生する。

  1. kaggle notebook以外の環境でpandas.DataFrameto_pickleで保存する。

  2. kaggle notebookにてpandas.read_pickleをしようとすると、以下のエラーが出て読み込めない。

    • ValueError: unsupported pickle protocol: 5
    • AttributeError: Can't get attribute 'new_block' on <module'pandas.core.internals.blocks'

本ブログでは原因を解説したあとに手っ取り早い対処方法を紹介する。

解決策だけ知りたい方は、以下の手っ取り早い対処法までスキップして頂いて問題ない。

続きを読む