フリーランチ食べたい

No Free Lunch in ML and Life. Pythonや機械学習のことを書きます。

人間のためのイケてるPython WebFramework「responder」、そして作者のKenneth Reitzについて

この記事は Python その2 Advent Calendar 2018 - Qiita の1日目です。

responderとは

GitHub - kennethreitz/responder: a familiar HTTP Service Framework for Python

f:id:mergyi:20181201121349p:plain

f:id:mergyi:20181201180257p:plain
Starの遷移

  • この記事では、responderが他のWeb Frameworkと比べて何が素晴らしいのか ということと、responderから見えてくる Kenneth Reitzというエンジニア について書きたいと思います。
続きを読む

つくばPythonもくもく会 No.2 開催レポート&No.3開催のお知らせ

つくばPythonもくもく会 No.2 を開催しました& No.3 を12/15(土) に開催します。

  • 先週の日曜(11/18)にNo.2を開催しました tskubapy.connpass.com
  • No.1 から参加者が大幅に増え合計13人の方に参加いただきました 🙏 ありがとうございます!
  • 早速ですが、No.3のイベントを作成しました。connpassからお気軽にご参加ください。 tskubapy.connpass.com
続きを読む

Pythonに関するオススメの書籍/サイト/サービス/Podcast/イベントの情報

Pythonをこれから勉強したい or 最新情報のキャッチアップがわからない、という方に

tskubapy.connpass.com

  • つくばPythonもくもく会 No.2を開催しました!
    • 参加者の方の中にはこれからPythonを始めたい、という方もいらっしゃったので、今まで自分が勉強してきた中で役に立ったものをリストアップして、LTしました。
    • 自分は機械学習系のエンジニアをしていて、そっちの方向で学んでいることも多いので、「言語について」と「機械学習/データ解析」という分け方をして紹介したいと思います。
  • 「機械学習/データ解析」に関してはPythonに関係するものだけに絞っています。
  • 書籍に関してはたくさん挙げられても迷ってしまうと思ったので、本当は他にもたくさん素晴らしい書籍があるのは理解しつつ、「あえて選ぶなら」を載せています。
続きを読む

scikit-learnのRandomForest.feature_importances_のコードを追う

feature_importances_をちゃんと理解する

  • feature_importances_ とは sklearn.ensemble.RandomForestClassifiersklearn.ensemble.RandomForestRegressor (など)で特徴量の重要度を出力するメソッドです。
  • とても便利で、EDAやモデルの精度向上のためのアイディアを得るためによく使用しますが、「この重要度って何を表しているの?」と聞かれたときにパッと説明できなかったので調べてみました。
  • ちなみにドキュメントには↓の1行だけ説明があります。

    The importance of a feature is computed as the (normalized) total reduction of the criterion brought by that feature. It is also known as the Gini importance.

開発者が回答しているStackOverflow

もう少し細かい説明としてはscikit-learnの開発者 Gilles Louppe がstackoverflowで↓のように質問に回答しています。

stackoverflow.com

There are indeed several ways to get feature "importances". As often, there is no strict consensus about what this word means.

In scikit-learn, we implement the importance as described in [1] (often cited, but unfortunately rarely read...). It is sometimes called "gini importance" or "mean decrease impurity" and is defined as the total decrease in node impurity (weighted by the probability of reaching that node (which is approximated by the proportion of samples reaching that node)) averaged over all trees of the ensemble.

記載されている通り、gini importance あるいは mean decrease impurity と呼ばれ、ノードの不純度(impurity)をアンサンブル木で平均したものになります。 これが簡潔で正しい回答なのですが、一応コードベースでも見てみたいと思います。

続きを読む

機械学習関係の主要人物20人を調査

先日のイベントで調べよう!と思うきっかけがありました

  • 下のTweetのように先週は「MachineLearning15Minitues」というイベントに参加してきました。
  • 株式会社バクフーの柏野さんの発表が個人的にとても好きな内容で是非皆さんにも見てもらいたいのですが、本筋の内容以外で一点気になる内容がありました。

  • それは下のスライド群で、実は柏野さんは「この辺りの方々は皆さんご存知だと思います。今回はなしません」と仰っていたのですが、恥ずかしながら半分くらいしかわかりませんでした。。

f:id:mergyi:20181104012727p:plain

  • そこで自分の勉強の兼ねてそれぞれの方々を調べてみることにしました!
  • ちなみに調べていて自分が追加した方がいいかなと思った方を一部追加しています。
続きを読む

%macro/%store を組み合わせてJupyterでのライブラリ読み込みを劇的に効率化する

Jupyterで読み込むライブラリを毎回書いてませんか?

  • 機械学習やデータ解析をJupyterで行うときに読み込むライブラリって大体決まっていますよね。
  • 毎回1、2つ目のセルにライブラリ読み込み処理をズラッと書いてないですか?
  • 人によってはスニペットアプリなどで管理している方もいるかもしれませんが、Jupyterの %macro%store を使うことでもっと短く、シンプルに、効率的にライブラリの読み込みを行うことができるので紹介したいと思います。
続きを読む

アンサンブル手法のStackingを実装と図で理解する

Stackingとは何か

  • 機械学習モデルの精度を向上させる手法の1つで、モデルを積み重ねる(Stackする)ことで精度を高めます。
  • ポピュラーかつ、強力な手法なKaggleのKernelで見ることも多いですね。
  • アンサンブル学習の一種で、他のアンサンブル学習にはAveraging/Bagging/Boostingがあります。
  • Stackingは他のアンサンブル学習の手法と比べると文章だけ読んでも理解し辛いので、直感的に理解できるように図と簡単な実装で説明してみたいと思います。

注意: この記事で書かないこと

今回は概念の理解にフォーカスしたいので、バリデーションの手法については触れません。特にSecondLevelでのバリデーションについてはいくつか選択肢があり、データの性質によって使い分けが必要なので次回以降書きたいと思います。

続きを読む