Kaggleで人気 XGBoostの論文 「XGBoost: A Scalable Tree Boosting System」を読んだ

タイトルの通りなんですが、Kaggleでとても人気のある手法のXGBoostがどういった仕組みで動いているのかを知るために次の論文を読みました。

XGBoost: A Scalable Tree Boosting System

詳しいことは、日本語で読める分かりやすい解説記事(こことか)があるのでそちらを参照していただきたいです。この記事は個人的な備忘録です。

要するにXGBoostとは決定木をすでに作った木の情報をもとにしながら何個も作ってそれらの結果を足し合わせることで、性能を向上させるBoostingの手法を効率的に実装したものと言えます。

基本的なポイントは単純ですが、決定木を作っていくうえですべての木の中から最も良いものを調べて選択するのは計算量的に難しいため、ある種の近似を用いて精度的に問題の少ない気を作っていき高速に実行可能なアルゴリズムとなっています。また、オーバーフィッティングを防ぐために、サブサンプリングや縮退化などの仕組みも導入されており、汎化性能が良くなるようになっていることもKaggleのコンテストで人気の理由の一つだと思います。

また、論文では並列化や分散処理をした場合の速度性能の評価が行われており、高い並列性能が出ています。提供されているライブラリではキャッシュが当たりやすくなるようになどの最適化が施されているので、自分で実装せずにライブラリを使いましょう。pipで簡単に入れられるようです。

不良品予測チャレンジの解説 「Using Big Data to Enhance the Bosch Production Line Performance: A Kaggle Challenge」を読んだ

Kaggleのコンテスト(Bosch Production Line Performance Challenge)としてBoschがデータを提供しているコンテストの解説論文を読んだ。

Using Big Data to Enhance the Bosch Production Line Performance: A Kaggle Challenge

このコンテストは工場の様々なセンサーデータを用いて生産されたパーツの良・不良を判定するもの。時系列のデータとなっているが、この論文の手法だと時系列の影響は特に使っていないようだ。

とにかく特徴量が多いので、カテゴリ変数を一つの数値変数に変換する手法を使ったのち、カラム数を減らしてXGBoostを用いてモデルを構築している。

また、データ量も多くメモリに乗りきらないのでオンライン学習の手法を用いている。

モデルの良さの評価にはMatthew’s Correlation Coefficientという、頻度の低いイベントの評価指標に使えるものを用いている。

所感としては、Kaggleで人気のXGBoostはsparseで大量のデータに対して強いんだなあと感じさせられる。

「ベイズ推論による機械学習」を読んだ

最近出版された、「ベイズ推論による機械学習」を読んだ。何やら最近盛り上がってきているように見えるベイジアンの機械学習へのアプローチを学ぼうとして手に取った。しかも「入門」と書いてあるので。

本書はベイズの定理から始まって、各種確率分布の説明、ベイズ推論を用いた学習と予測、混合モデル、応用モデルの構築と推論などの内容がカバーされている。

数式が多いが、基本的に各項目でほぼ同じパターンをたどることが多く、かといって数式が省略されることもほとんどなく、難しい内容も追いやすかったと思う。

現在Murphy本を読んでいる途中だが、先に本書を読んで理解してから読み進めるべきであったと感じる。やはり日本語で解説を読んでおくと理解が進みやすいだろう。

個人的にはコラムの部分に書かれているベイジアンのアプローチの有用性についての議論が腑に落ちた。例えば、ビッグデータの時代においてはベイズ推論のアプローチをとるメリットは無くなるのでは?といった内容について、データが十分あれば解析対象を詳細にすべし、(推薦システムのように)使い始めのユーザの情報は少ないのでベイズ学習のアプローチが有効、などの議論からむしろ「多種多様の情報ソースを組み合わせて活用していくようなビッグデータの時代に適した方法論であるといえます。」と述べている。

また、ベイズ学習のこれから、と題されたコラムでは「ベイズ学習のもつ適用範囲の広さと、大量データに対する複雑なモデルの効率計算の2つが上手く組み合わされば、いままで行えなかったような大規模かつ包括的な問題解決に取り組むことが可能になるといえます。ベイズ学習は、深層学習や最適化理論で培われた効率的な計算のノウハウと組み合わさることにより、さらなるエキサイティングな応用領域を拡大していくでしょう。」と締めくくられており、今後もウォッチしていきたい分野である。

本書は基本的に数式を用いた理論的な解説をターゲットとしており、実際にコードに落とし込むには少し慣れが必要かもしれないと、素人としては感じた。以下のサポートページでは本書のサンプルコードが用意されているので、ここを見てみよう。

「機械学習スタートアップシリーズ ベイズ推論による機械学習入門」のサンプルコード

また、著者のブログ「作って遊ぶ機械学習」ではさまざまな問題に対してコードや数式と共に解説が用意されているようなので、次はそのあたりで勉強してみようと思う。

「Machine Learning – A Probabilistic Perspective」第7章を読んだ

前回の続き。第7章は線形回帰について。このあたりでようやく1/4までたどり着いた。先は長い。

目次は以下の通り。

  • 7 Linear regression
    • 7.1 Introduction
    • 7.2 Model specification
    • 7.3 Maximum likelihood estimation (least squares)
      • 7.3.1 Derivation of the MLE 219
      • 7.3.2 Geometric interpretation
      • 7.3.3 Convexity
    • 7.4 Robust linear regression *
    • 7.5 Ridge regression
      • 7.5.1 Basic idea
      • 7.5.2 Numerically stable computation *
      • 7.5.3 Connection with PCA *
      • 7.5.4 Regularization effects of big data
    • 7.6 Bayesian linear regression
      • 7.6.1 Computing the posterior
      • 7.6.2 Computing the posterior predictive
      • 7.6.3 Bayesian inference when σ2 is unknown *
      • 7.6.4 EB for linear regression (evidence procedure)

線形回帰のMaximum likelihood estimationから始まり、outlierに強い線形回帰の方法やリッジ回帰、PCA、Regularizationなどが説明され、最後にベイズ統計による線形回帰の話が述べられている。

リッジ回帰はペナルティ項が加わった線形回帰。overfitする可能性を減らすことが出来る。数値計算する際にも良い性質があるとのこと。

最後のベイズ推定の部分は、リッジ回帰でpointを推定できるけど、完全なwやσ^2の事後分布を知りたいことがあるのでベイズ推定を使うと良いということらしい。

無料で読めるオライリー公式のデータサイエンス・ビッグデータ e-books

Free Data Ebook Archiveというサイトを見つけた。オライリーが出しているデータサイエンスやビッグデータ関係の電子書籍が無料で読むことが出来る。名前とメールアドレスを入れるとePub, mobi, pdf形式でダウンロードすることが出来る。

ざっと見た感触としては、オライリーの動物が表紙になっている本よりかは短めの内容が多く、技術的なものもあるが理論よりも実運用を意識した内容のものが多いと感じた。

ちょっと気になったのは以下のタイトル。短めの本が多いようなので、機械学習関係の現状を把握したりシステムアーキテクチャの概要を掴んだりするのに良いかと思います。

・The Path to Predictive Analytics and Machine Learning
・Practical Artificial Intelligence in the Cloud(クラウド上でのAIアプリケーションの運用例など)
・Fast Data Architectures for Streaming Applications (ストリーミングデータに対するアプリケーションのアーキテクチャ構成例が挙げられている)

「Machine Learning – A Probabilistic Perspective」第6章を読んだ

前回の続き。難しくなってきたが細々と読み続けている。これを読み切ったら大抵の機械学習本は読めるようになるのではという感覚がある。

第6章は、Frequentist statistics 頻度統計について。この章は比較的知っている内容が多いので読みやすかったと思う。

目次は以下の通り。

  • 6 Frequentist statistics
    • 6.1 Introduction
    • 6.2 Sampling distribution of an estimator
      • 6.2.1 Bootstrap
      • 6.2.2 Large sample theory for the MLE *
    • 6.3 Frequentist decision theory
      • 6.3.1 Bayes risk
      • 6.3.2 Minimax risk
      • 6.3.3 Admissible estimators
    • 6.4 Desirable properties of estimators
      • 6.4.1 Consistent estimators
      • 6.4.2 Unbiased estimators
      • 6.4.3 Minimum variance estimators
      • 6.4.4 The bias-variance tradeoff
    • 6.5 Empirical risk minimization
      • 6.5.1 Regularized risk minimization
      • 6.5.2 Structural risk minimization
      • 6.5.3 Estimating the risk using cross validation
      • 6.5.4 Upper bounding the risk using statistical learning theory *
      • 6.5.5 Surrogate loss functions
    • 6.6 Pathologies of frequentist statistics *
      • 6.6.1 Counter-intuitive behavior of confidence intervals
      • 6.6.2 p-values considered harmful
      • 6.6.3 The likelihood principle
      • 6.6.4 Why isn’t everyone a Bayesian?

著者はベイジアンなアプローチを取った方が一回限りのイベントなどから上手くモデルを構築出来ると述べられているが、頻度主義の統計に慣れしたんでおくことは機械学習の分野で広く使われているため有用であると述べている。

頻度主義とベイズ統計の違いは、頻度主義がデータはランダムでありパラメータが固定されていると考えるのに対して、ベイズ統計ではデータが固定されており、得られたデータから最尤推定によりランダムなパラメータを確定させる、ということです。

最後の6.6節では、頻度統計の望ましくない振る舞いであるpathologyが述べられている。信頼区間やp値に関する問題点などが挙げられる。最後になぜ皆がベイジアンではないのか?という話が書かれており、その中で20世紀はノンベイジアンの時代であったが、21世紀はベイジアンの時代になると述べられている。これが正しかったかは時間が証明するだろう、と締めくくられており、少しカッコいい。

600種類ものオンライン授業リスト

オンラインで大学の講義を受けることが出来るMOOC( Massive Open Online Course)のリストを見つけた。それぞれのリンクはClass Centralというサイトへリンクされており、授業の概要や評価を見ることが出来る。

200 universities just launched 600 free online courses. Here’s the full list.

200の大学による、600種類もの講座がわずかなお金で受講することができる。

オンラインに抵抗が少ない人が多いためか、コンピュータサイエンスやプログラミングの授業が今の段階では多い。それでも、人文科学や医学、芸術、デザイン、ビジネスなどの分野でも講座が増えているようだ。

問題はこれだけ授業が増えてくると、どの授業が評判が良くて、自分に合っているかを探すのが難しいということだと思う。やはりCourseraなどの、MOOCプラットフォームにて授業の評価やRecommendationを受けるのが、授業を探すうえで良い方法なのだろうか。

ハードウェア開発を勉強するためのWebサイト集

Hacker Newsに「ハードウェア開発の勉強を始めるのに良いサイトは無いか?」という質問があったので、メモ代わりに書いておく。

What are hardware development learning web tutorials?

1.エレクトロニクスデザイン

https://contextualelectronics.com/

2.教科書系

The Art of Electronics という教科書がおすすめされている。

他にも組み込み開発全般としては、Making Embedded Systemsというオライリーから出ている本が紹介されている。値段も手ごろなのでここから始めるのが良いかも。

 

3.初心者向け/その他

https://www.allaboutcircuits.com/

自然言語処理 画像キャプションのデータセット Cornell NLVR

Hacker Newsで取り上げられていた自然言語処理のデータセット Cornell NLVRの紹介です。

公式ページ:http://lic.nlp.cornell.edu/nlvr/

データセット:https://github.com/clic-lab/nlvr

論文:http://alanesuhr.com/suhr2017.pdf

これは、色の付いた図形が複数描かれた画像とキャプションのセットが与えられて、そのキャプションが正しく図を説明しているかを true/ falseで判定するタスクのためのデータセットです。データ数は92,244個でクラウドソーシングでデータを集めたそうです。

例えば、以下の画像のキャプションとして「There is exactly one black triangle not touching any edge」(他のエッジに触れていない黒い三角形がただ一つある)が与えられており、この正解ラベルは「true」となっています。

他にも、例えば次の画像のキャプションとして「There is a box with multiple items and only one item has a different color」(複数アイテムとともに一つ箱があり、ただ一つのアイテムが異なった色を持つ)が与えられ、この正解ラベルは「false」といったようになっています。

 

現在の、トップのテスト精度は公開データに対して約67%程度であり、ランダムに答えた場合よりも少し良いといった程度でしょうか。まだまだ、発展させる余地があるテストデータのようです。

Rustで書かれたNeural Network実装:Jaggernaut

Rust言語で書かれたJaggernautというNeural Networkの実装を見つけた。WebAssemblyに変換されて、ブラウザ上で動作させることが出来る。

Juggernaut: Neural Networks in a web browser

デモページでは3種類のデータセットに対して、学習率とエポック数を設定して、データが分類されていく過程が見れる。デモの実装にはReactとD3.jsを使っているが、Neural Networkの学習部分にはJavaScriptは一切使っておらずRustのみで書かれているとのこと。

まだ機能的にはフィードフォワードネットワークのみ対応しているようだが、数種類の活性化関数やコスト関数を用意しているとのこと。

こういったアプリケーションが増えて、将来的にRustは果たしてC/C++を置き換える言語に成りえるのか見守っていきたい。