KDD2021論文読み会 での発表資料です。 元論文 Cont…
はじめに Federated Learningに興味があり色々確認していたのですが、決定木ベースのモデルはないのかと思うようになりました。 探してみると以下の論文が出てきたので、読みました。 メモとしてここで簡単にまとめます。 arxiv.org はじめに 概要 イントロ 事前知識 GBDT Federated learning Secure aggregation Differential privacy 設定 環境の設定 FLの設定 Vertical FederBoost 学習 バスケット化 差分プライバシーノイズ付加 学習の全体像 推論 プライバシー保護について Horizontal FederBoost 分散バケット構築 学習 プライバシー保護について 実装と実験 有用性の検証 効率性の確認 LAN設定の場合の結果 WAN設定の場合の結果 概要 Federated Learning
はじめに 以前も記事にしたが、ウェブ上のユーザーの行動ログを使って推薦システムを開発している自分のようなMLエンジニアにとって、ランキング学習におけるポジションバイアスの除去は重要なテーマである。サービスのログは通常様々なバイアスに塗れており、特にリストの上位に表示されたアイテムほどクリックが集まりやすくなってしまうポジションバイアスは非常に厄介だ。アカデミアではこの手のテーマはだいぶ研究が進んでいるものの、これまでは論文や書籍で手法が紹介されるだけで、手軽にパッと使えるライブラリは存在しなかった。 しかしどうやら最近になって XGBoost や LightGBM という多くの人が使う強力なGBDTライブラリにポジションバイアスを除去する機能が実装されたらしく、これが使い物になるのであれば実務で利用するハードルがグッと下がると思い、実験して性能を検証してみた。 検証に使うデータセット ここ
競技プログラミングに慣れ親しんでいる方なら、セグメント木というデータ構造について、一度は聞いたことがあるでしょう。この記事は、セグメント木の構造を理解する必要はないが、使い方を知っておきたいという方のために書かれています。 この記事では、まずセグメント木について紹介し、それからセグメント木を実際に使う際の技法について紹介します。 セグメント木とは セグメント木は、固定長配列にいくつかの操作を加えたデータ構造です。セグメント木は、基本的には以下の操作を時間計算量 O(\log n) ですることができます。 i 番目の要素に x を代入 i 番目の要素を取得 l 番目の要素から r 番目の要素のモノイド積[1]を計算 ここで、モノイドを知らない方もいるかもしれませんので、モノイドについて紹介します。 モノイド モノイドは、実数や複素数の足し算や掛け算、文字列の連結といった、集合とその演算をまと
この記事に新規性はありません。maspyさんの記事、beetさんの記事がとても分かりやすいです。また、紹介しているテクニックはmaspyさんの記事で紹介されているものです。 maspyさんの記事: Euler Tour のお勉強 beetさんの記事: 2種類のEuler Tourについて オイラーツアーとは? 根付き木を根からDFSして根に戻ってくるような経路(の探索)。競技プログラミングの文脈ではこの行きと戻りの経路について以下のような情報を記録しておくきRMQやRSQを適応することで木に対するいくつかのクエリを高速に処理できる。 各頂点のinとoutの時刻 それまでに辿った辺や頂点の重さなどの情報を記録 各頂点の深さの情報 用語 行きがけ: あるノードから子に移動する 帰りがけ: 子からその親ノードに移動する 実際の例 1を根とする以下の木があるとします。 時刻0は根である1にいてDF
AHC020でシュタイナー木を作るような問題がでました。そこでプリム法ベースのシュタイナー木を作ることがあったのでその方法を説明します。 シュタイナー木とは グラフとターミナルと呼ばれる頂点集合が与えられたとき、ターミナルを全てつなぐ木のことをシュタイナー木といいます。 頂点A,B,Cがターミナル シュタイナー木の例 ターミナルでない頂点はつないでもつながなくても構いません。 シュタイナー木のうちコストが最小のものを最小シュタイナー木といい、これを求めるアルゴリズムとしてDreyfus-Wagner法というものがあるらしいです。しかしこの方法はとても計算量が多いです。 今回紹介するプリム法ベースのシュタイナー木は、計算量は少なくて済みますがコストが最小になるとは限りません。ヒューリスティックコンテストにおける焼きなましの最中など、厳密さより速度が優先されるようなケースでの使用を想定していま
さて今回は、最近テーブルデータの予測においてKaggleでもよく使われているTabNetの解説をしたいと思います。 このサイトでは自然言語処理分野がメインで画像認識分野を少しという感じでしたが、テーブルデータについても面白い発展があるようですね。 以下は簡単にまとめたTabNetの特徴です。 ディープラーニングをベースとしたモデル。特徴量の選択や加工などの前処理が不要で、end-to-endで学習することができる。アテンション・メカニズムを使い、各決定ステップ(decision step)において使用する特徴量を選択する。 アテンション・メカニズムにより解釈性が向上し、重要な特徴量をうまく学習することができる。全サンプル共通ではなくサンプルごとに重要な特徴量を選択する。いくつかの特徴量をマスクし、それを予測するという事前学習を行う。 特徴量の選択が不要で、自動的に、しかも全体ではなくサンプ
製造業出身のデータサイエンティストがお送りする記事 今回はFacebook のオープンソース最適化ライブラリAx を使ってXGBoost のハイパーパラメータをチューニングしてみました。 はじめに 勾配ブースティング木に関しては、過去に記事を書いておりますのでそちらを参照して頂けますと幸いです。 勾配ブースティング決定木(XGBoost, LightGBM, CatBoost)を実装してみた Optuna を使ったハイパラチューニングに関しても、過去に記事を書いておりますのでそちらを参照して頂けますと幸いです。 勾配ブースティング決定木(XGBoost, LightGBM, CatBoost)でOptunaを使ってみた Ax とは Ax は、Facebook のオープンソース最適化ライブラリです(公式のGitHubページ)。 Ax は、ベイズ最適化(GP-EI)を使ってハイパーパラメータを
概要 feature-engineがきっかけで最近チェックしているPyDATA この動画を見ながらKaggleの株価予測をsktimeで試してみるか、ってモチベが上がって(よくある)久しぶりのsktimeを触っていたらtsfreshをラップしたapiに気づいたので、先にtsfreshの素性を調べてみるか、と回りくどい流れ。 時系列初心者にはマストな内容の講演動画で超オススメ。ハッ!と思わせるやり取りが質疑応答にあってとても良かった。 今回はおもにtsfreshを使って説明変数を増やすことが目的で、XGBoostは精度確認しSHAPでimportanceを可視化する程度のおまけ。 Daskのように独自の馴染めない世界観がありDocumentsの例もわかりにくく、少し手間取ったので残す。 実施期間: 2022年12月 環境:Colab パケージ:tsfresh, XGBoost, SHAP,
前回の記事「AutoML v.s. Catboost」に出てくるCatboostは、XGBoostやLightGBMと比べて30-60倍も推論が速いという特徴があります。 推論時間は、kaggleなどのコンペでは推論に時間をかけられるのであまり気にしませんが、実サービスとなると重要ですよね。 推論時間の比較 以下のグラフは、3大GBDTライブラリでの推論時間比較です。Catboostがずば抜けて速いことがやかります。 そして学習時間の速さに定評があるLightGBMは、なんと最遅です。 この推論時間の速さは、CatboostがGBDTのベースとなる決定木に symmetric tree と呼ばれる、特殊な形の木を使っているからです。 ここで、symmetric treeとは以下の図の右側のような木です。左側は普通の決定木です。 なぜsymmetric treeは速いか 「同一の深さではすべ
おそらくちゃんと機能している kd木 仕組み とても説明しづらいがざっくりと説明したい 自分の説明はわかりづらいので以下のpdfを見ることをお勧めする。 Kd-treeと最近傍探索 https://hope.c.fun.ac.jp/mod/resource/view.php?id=15284 今回説明するkd木はあくまで自分が採用した方法であり、他にも微妙に違ったkd木の作り方とかあるらしい。 二次元データを例として使う [出典] https://medium.com/@schmidt.jerome/k-d-trees-and-nearest-neighbors-81b583860144 kd木のデータ構造は、データの軸をずらしながら、それぞれの軸の中央値を取ることで作ることができる 中央値といっても厳密な意味ではなくデータ数が偶数の時は中央らしき二つの点のうち大きい方になる 具体的には上
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに kaggleでは2020年ぐらいから当たり前のように使われるようになってきたTabNetですが使ったこともないですし、どんなアーキテクチャなのかも知りませんでした。今回は実装というよりもTabNetについて理解が深められたらと思います。 参考: TabNetとは一体何者なのか? :TabNetの概要についてわかりやすく解説している記事です。 TabNetを使えるようになりたい【追記①lgbmとstacking(ちょっと上がる)】 :atmacup #10のディスカッションで上がっていたものです。恐らくコンペ参加しないと(後から
はじめに こんにちは。株式会社アイデミーデータサイエンティストの中沢(@shnakazawa_ja)です。 本記事ではAdversarial Random Forestsを使ったテーブルデータの生成について、RおよびPythonでの実装を紹介します。 Adversarial Random Forests (ARF) とは ARFは2023年にProceedings of The 26th International Conference on Artificial Intelligence and Statisticsに採択された論文で提案された、テーブルデータに対して密度推定と生成モデリングを行う高速な手法です[1]。 その名の通りGAN[2]とRandom Forestを組み合わせた手法で、生成と識別を交互に繰り返すことで元データの特性を学習し、元のテーブルデータと類似したデータを生成
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに テンソルネットワークは、量子多体系などの高次元なデータを効率的に扱うための手法として利用される技術ですが、近年、テンソルネットワークを機械学習に応用する研究が様々行われています。 今回は、文献[1]を参考に、Tree Tensor Network (TTN)を用いて、画像の分類を行うモデルをPyTorchで実装し、MNISTとFashion-MNISTに対して、その性能を確認してみます。 概要 今回用いるTree Tensor Network (TTN)は、その名の通り、木構造のテンソルネットワークです。 今回取り上げるTTN
非Deepな機械学習手法としてランダムフォレスト (Random Forest) を選択する場面は多々ありますが、基本的にライブラリ任せになってあまり中身を意識することがありません。ので、今回はランダムフォレストの内部的な仕組みを確認しつつ、それを踏まえてPythonでスクラッチ実装していこうと思います。 ランダムフォレストについて ランダムフォレストの仕組みに関する分かりやすい記事は探せばいくらでもあるので、ここでは以降が読みやすくなるよう実装の視点から少し解説をつけておきます。 ランダムフォレストはたくさんの決定木から構成され、決定木はノードから構成されます。イメージとしては以下のようになります。 なので、実装の手順としては、 ノード : Node 決定木 : DecisionTree ランダムフォレスト : RandomForest の3つのクラスを実装していきます。 1. ノード
(↑from scikit-learn User Guide Gradient Boosting Out-of-Bag estimates — scikit-learn 0.24.1 documentation) 当記事では勾配ブースティング(Gradient Boosting)について簡単に確認を行います。 勾配ブースティングについては少々フォーマルな記載が多く理解が大変なのですが、上記の「scikit-learnとTensorFlowによる実践機械学習」の記述が比較的わかりやすいので、こちらを元に簡単に確認したのちにWikipediaの記載を簡単に確認します。 以下、今回の目次になります。 1. 概要の把握 2. Wikipediaの確認 3. まとめ 1. 概要の把握 1節では「scikit-learnとTensorFlowによる実践機械学習」の記述を主に参考にしながら簡単な確認を行
本日は12/24です。何の日か、みなさんお分かりですよね?🎅 そう、みんな大好き有馬記念の日です。🐎 ボートレースファンからはグランプリの優勝戦の日だろ!という主張もありそうですが、今回は数年ぶりに競馬予想ネタを書きたいと思います。 私自身、過去に2回、競馬予想をテーマにした記事を掲載してきました。 機械学習の初心者がpythonで競馬予測モデルを作ってみた 機械学習の初心者がpythonで有馬記念を予想してみた レースは相対評価で予想したい 過去記事では、ロジスティック回帰やランダムフォレスト等を使用してましたが、実は違和感を少々感じていました。それは、データセット全体から絶対評価で、購入対象馬を予測しているからになります。 ちょっと分かりにくいかもしれませんが、例として、以下のデータセットの場合、レース番号に関係なく、賞金の高い馬が購入対象になりやすいという傾向があります。 レース
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く