タグ

tree*に関するsh19910711のブックマーク (74)

  • Python: LightGBM の学習に使うデータ量と最適なイテレーション数の関係性について - CUBE SUGAR CONTAINER

    XGBoost は同じデータセットとパラメータを用いた場合、学習に使うデータの量 (行数) と最適なイテレーション数が線形な関係にあることが経験的に知られている 1。 今回は、それが同じ GBDT (Gradient Boosting Decision Tree) の一手法である LightGBM にも適用できる経験則なのかを実験で確認する。 使った環境は次のとおり。 $ sw_vers ProductName: macOS ProductVersion: 11.2.3 BuildVersion: 20D91 $ python -V Python 3.9.2 $ pip list | grep -i lightgbm lightgbm 3.2.0 もくじ もくじ 下準備 実験 下準備 あらかじめ、必要なパッケージをインストールしておく。 $ pip install lightgbm sci

    Python: LightGBM の学習に使うデータ量と最適なイテレーション数の関係性について - CUBE SUGAR CONTAINER
    sh19910711
    sh19910711 2025/03/01
    2021 / "LightGBM: 学習に使うデータ量と最適なイテレーション数は概ね線形な関係 + 学習にかかる時間に関しても概ね線形 + 一方で、学習に使うデータが増えても予測精度は非線形な改善 / sklearn.datasets.make_classification"
  • ベイズ決定木系モデルの理論(特にBART) - tomtom58’s blog

    はじめに 基礎理論(ベイズ統計と決定木の関係) 代表的な手法(ベイズ回帰木、ベイズ適応的パーティショニング、BARTなど) ベイズ回帰木(Bayesian CART) ベイズ適応的パーティショニング(Bayesian Adaptive Partitioning) BART(Bayesian Additive Regression Trees) 推論アルゴリズム(MCMC、スパイク&スラブ、ディリクレ過程との関係) 数学的導出(各手法の数学的導出を丁寧に) 単純な例での事後分布計算 最新の研究動向 実装(数式理解を補助するためのコード例) BART の理論的性質の概略証明 最後に はじめに データ解析において決定木は、特徴量空間を領域に区切り各領域で予測を行うシンプルで解釈しやすいモデルとして広く使われています。しかし、従来の決定木アルゴリズム(CARTなど)は貪欲法による学習のため局所解に

    ベイズ決定木系モデルの理論(特にBART) - tomtom58’s blog
    sh19910711
    sh19910711 2025/02/26
    "決定木単体では過学習しやすい傾向 / BART: ベイズ的なアンサンブル学習 + 因果推論など幅広い応用で注目 / ベイズ的手法を導入することでモデル構造に対する事前知識を組み込み"
  • Go1.20からサポートされるtree構造のerrの紹介と、treeを考慮した複数マッチができるライブラリを作った話/introduction of tree structure err added since go 1_20

    Go1.20からサポートされるtree構造のerrの紹介と、treeを考慮した複数マッチができるライブラリを作った話/introduction of tree structure err added since go 1_20

    Go1.20からサポートされるtree構造のerrの紹介と、treeを考慮した複数マッチができるライブラリを作った話/introduction of tree structure err added since go 1_20
    sh19910711
    sh19910711 2024/10/14
    "errをつくるときに複数errを合成できる + マッチ処理でもそのようなerrが考慮 / あたらしいエラー構造とハンドリングが標準パッケージでサポート" '23
  • XGBoost と LightGBM に実装されているポジションバイアス除去を試してみた

    はじめに 以前も記事にしたが、ウェブ上のユーザーの行動ログを使って推薦システムを開発している自分のようなMLエンジニアにとって、ランキング学習におけるポジションバイアスの除去は重要なテーマである。サービスのログは通常様々なバイアスに塗れており、特にリストの上位に表示されたアイテムほどクリックが集まりやすくなってしまうポジションバイアスは非常に厄介だ。アカデミアではこの手のテーマはだいぶ研究が進んでいるものの、これまでは論文や書籍で手法が紹介されるだけで、手軽にパッと使えるライブラリは存在しなかった。 しかしどうやら最近になって XGBoost や LightGBM という多くの人が使う強力なGBDTライブラリにポジションバイアスを除去する機能が実装されたらしく、これが使い物になるのであれば実務で利用するハードルがグッと下がると思い、実験して性能を検証してみた。 検証に使うデータセット ここ

    sh19910711
    sh19910711 2024/09/15
    "ポジションバイアス: リストの上位に表示されたアイテムほどクリックが集まりやすくなってしまう / 最近になって XGBoost や LightGBM という多くの人が使う強力なGBDTライブラリにポジションバイアスを除去する機能が実装"
  • 決定木の理論とフルスクラッチ実装とその解説 - tomtom58’s blog

    最初に 決定木とは 1.決定木の基構造 2.不純度 3. 情報利得 注意して欲しいこと 4. 最適分割点の選択 5. 再帰的な木の成長 6. 停止条件 7. 枝刈り(オプション) フルスクラッチ実装 最後に 最初に 決定木の理論とフルスクラッチ実装とその解説というと、既に使い古された話題の様に感じてしまいますが、今回の記事から派生して、ランダムフォレスト、GBDT、XGboost(LightGBMは扱わないつもり)、因果木、因果フォレスト、ランダムフォレスト-learnerの理論とできる部分はフルスクラッチ実装、めんどくさいものは、理論と解説に抑えて扱っていこうと考えており、そのまず初めとして、決定木自体の理論に触れないことは、できないなと思い、決定木の記事を書こうと思った次第です。(めんどくさくなって書かないパターンも全然あり得るのでご了承ください)他の記事との差別化は、数式を含めた解

    決定木の理論とフルスクラッチ実装とその解説 - tomtom58’s blog
    sh19910711
    sh19910711 2024/06/24
    "ジニ不純度: ランダムに選ばれた要素が誤って分類される確率 + 値が0に近いほどノードの純度が高い / エントロピー: データの無秩序さや不確実性を測る指標 + 最大値は log2⁡(𝑐)ですべてのクラスが均等に分布"
  • Scikit-learnの決定木からノードの分岐条件を抽出、データとして格納する - Qiita

    はじめに Scikit-learnの決定木の分岐情報は一般的にGraphVizを使用した可視化によって理解されます。 しかし、この方法だと人間が直感的に理解するには良いものの、 データとして決定パスの情報を利用できない GraphVizとの連携が少し煩雑なためサクッと可視化できない といった問題をはらんでいます。 前者は、大量の決定木の分岐条件をデータとして扱いたい場合や、最終的な分岐条件をビジネス的な理由で全てテキスト化せねばならない場合などに人力では対処できずに苦しむ結果になりますし、 後者はGraphVizがなかなか入らない初心者や、新しいソフトウェアを入れづらい厄介な分析環境を使用せねばならない場合に苦しむことになります。 そこで、できればGraphVizを使用した可視化に頼らず、直接データとして分岐情報を扱う方法を知りたいと思っていました。 そこで今回はScikit-learnの

    Scikit-learnの決定木からノードの分岐条件を抽出、データとして格納する - Qiita
    sh19910711
    sh19910711 2024/06/18
    "GraphVizを使用した可視化: 人間が直感的に理解するには良い + データとして決定パスの情報を利用できない + GraphVizとの連携が少し煩雑なためサクッと可視化できないといった問題" 2019
  • LightGBMのパラメータチューニングまとめ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 記事は、下記のハイパーパラメータチューニングに関する記事の、LightGBMにおける実装例を紹介する記事となります。 ※2022/4 early_stoppingの仕様変更について early_stoppingの指定に関して、以前はfit()メソッドのearly_stopping_round引数で指定する事ができましたが、現在はcallbacks引数にコールバック関数early_stopping()を指定する方法に変わっています。 記事も新しい仕様に合わせて修正しました。 ※2023/6 チューニング手順の改善 記事に記

    LightGBMのパラメータチューニングまとめ - Qiita
    sh19910711
    sh19910711 2024/06/18
    "callbacks引数にコールバック関数を指定する方法とScikit-learnのcross_val_score()メソッドとを組み合わせると、コールバック関数が初期化されないまま複数の学習が走って正常に処理されないバグが発生" 2021
  • LightGBMのearly_stoppingの仕様が変わったので、使用法を調べてみた - Qiita

    LightGBMearly_stopping LightGBM2022年現在、回帰問題において最も広く用いられている学習器の一つであり、機械学習を学ぶ上で避けては通れない手法と言えます。 LightGBMの一機能であるearly_stoppingは学習を効率化できる(詳細は後述)人気機能ですが、この度使用方法に大きな変更があったようなので、内容を記事にまとめたいと思います 変更の概要 early_stoppingを使用するためには、元来は学習実行メソッド(train()またはfit())にearly_stopping_rounds引数を指定していましたが、2021年の年末(こちらのissues)よりこの指定法は非推奨となり、コールバック関数lightgbm.early_stopping()で指定する方式へと変更になりました。 新たな方式であるコールバック関数によるearly_stopp

    LightGBMのearly_stoppingの仕様が変わったので、使用法を調べてみた - Qiita
    sh19910711
    sh19910711 2024/06/18
    "early_stopping: メソッドにearly_stopping_rounds引数を指定していましたが、2021年の年末よりこの指定法は非推奨となり、コールバック関数lightgbm.early_stopping()で指定する方式へと変更" 2022
  • Rubyで書く遅延セグ木 - Qiita

    自分用にRubyで非再帰版の遅延セグメント木を書いたので、そのメモと使用時の注意点です。 遅延評価セグ木や非再帰実装についての参考 AtCoder LibraryのLazy Segtreeの使い方 非再帰版の遅延評価セグメント木の実装メモ 遅延評価セグメント木をソラで書きたいあなたに 方針 ACLの lazy_segtree に必要な構造/関数 S, F, mapping, composition, op を一つのクラスにまとめ、破壊的変更メソッドとして、実装することでオブジェクト生成を抑えるというのが方針です。 ACLの遅延セグ木をもとに実装を行うとどうしてもオブジェクト生成数が多くなってRubyだとキツかったのでこの形にしました。 具体的には先に上げた必要なデータ、関数をインスタンス変数およびメソッドとして一つにまとめたクラスをNodeとし、以下のように構成します。 S : データの型

    Rubyで書く遅延セグ木 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ACLの遅延セグ木をもとに実装を行うとどうしてもオブジェクト生成数が多くなってRubyだとキツかった / 結構うまく書けてもとTLEする問題が多いし、ぎりぎりなら別の言語で書くほうがよい"
  • TinyGo×leavesでLightGBMのWASMを作る - Qiita

    概要 この記事では、LightGBMを用いた推論処理をWASMにしてブラウザ上で実行させる方法を紹介します。具体的には、軽量なビルドアセットが作成可能なTinyGoと全てGo言語で実装されているleavesを使い、軽量でランタイムやモデルファイルが内包されているWASMを作ります。 leaves leavesは純粋なGo言語だけでGBRTモデルの予測コードを実装しているライブラリで、対応モデルはLightGBM、XGBoost、scikit-learnのtree modelです。今回はLightGBMの学習済みモデルを推論で利用させるために使用します。LightGBMのモデル読み込みは、txt形式とjson形式の2種類が対応しており、自分の環境ではLightGBMのモデルファイルサイズが小さいtxtの方を利用しました。また、標準でカテゴリ特徴量がサポートされていたり、バッチ推論もできるのが

    TinyGo×leavesでLightGBMのWASMを作る - Qiita
    sh19910711
    sh19910711 2024/06/15
    "LightGBMを用いた推論処理をWASMにしてブラウザ上で実行 / leaves: LightGBMのモデル読み込みは、txt形式とjson形式の2種類が対応 / カテゴリ特徴量がサポートされていたり、バッチ推論もできる" 2023
  • XGBoostによる機械学習(Rを用いて実装) - Qiita

    P&Dアドベントカレンダー1日目!ついに始まりました! 今回は、卒業研究のために勉強したXGBoostの実装の流れについてまとめたいと思います。 はじめに 私は研究室で主に、R言語を用いて機械学習データ分析等を行なっています。 機械学習には様々な手法がありますが、その中で今回私は勾配ブースティングを用いることとなりました。 そしてその勾配ブースティングをC++で実装して高速化したXGBoostを用いることにしました。 こちらに機械学習の代表的手法が載っていますのでぜひ参考にしてみてください。 私も記事を書く上でかなり参考にさせて頂いています。 Qiita 代表的な機械学習手法一覧 XGBoostとは 複数の弱学習器を逐次的に(1つずつ順番に)構築して予測モデルを生成する手法をブースティング(Boosting)と言います。 新しい弱学習器を構築する際には、それまでの弱学習器の結果を利用して

    XGBoostによる機械学習(Rを用いて実装) - Qiita
    sh19910711
    sh19910711 2024/06/15
    "新しい弱学習器を構築する際には、それまでの弱学習器の結果を利用 / 結果が良くなかった(間違って識別された)場合、誤った学習データに対する重みを大きく / 奇数番目のデータを学習データとして学習モデルを構築" 2018
  • [決定木]ジニ不純度と戯れる - Qiita

    ZOZOテクノロジーズ新卒のむーさん(@murs313)です! ジニ不純度、知らない子なので戯れる。 決定木で同じように使われているエントロピー(情報量)と比べていきます。 名前 ジニ不純度、ジニ分散指標、ジニ多様性指標等と呼ばれている。英語ではGini’s Diversity Index。 コッラド・ジニ(Corrado Gini)が同じく考案したジニ係数とは違うもの。(ジニ係数のアイデアが基になっているそう。) 使われているところ 決定木のアルゴリズムは複数あり、CARTというアルゴリズムでジニ不純度を指標にして決定木を構築することが多いようです。 他のアルゴリズムであるID3,C4.5,C5.0は、エントロピーを指標にして決定木を構築しています。 こちらのアルゴリズムが使われているところをあまり見ないのですが、アルゴリズムが簡単なので決定木を習う際によく取り上げられるのではないでしょ

    [決定木]ジニ不純度と戯れる - Qiita
    sh19910711
    sh19910711 2024/06/15
    "コッラド・ジニ(Corrado Gini)が同じく考案したジニ係数とは違う + アイデアが基になっている / ジニ不純度、ジニ分散指標、ジニ多様性指標等と呼ばれ / CARTというアルゴリズムでジニ不純度を指標にして決定木を構築" 2018
  • XGBoostによる機械学習(R : caretパッケージを使ってみた) - Qiita

    P&Dアドベントカレンダー8日目!3回目の登場です! 今回は、XGBoostをcaretパッケージを用いて実装してみたいと思います。 前々回の記事はこちらです! [XGBoostによる機械学習(Rを用いて実装)] (https://qiita.com/drafts/ae91fde4a0fe3f3a48c2/edit) 前回の記事はこちらです! [XGBoostパラメータのまとめとランダムサーチ実装] (https://qiita.com/FJyusk56/items/0649f4362587261bd57a) caretパッケージ 前回の記事で機械学習の基的な手順として 使用する機械学習手法の決定 実装方法と環境構築 パラメータチューニング モデルを使っての予測 予測結果の評価 の5ステップがあると話しました。 そして手順3と5が機械学習において鬼門と言われる部分であるということもお話し

    XGBoostによる機械学習(R : caretパッケージを使ってみた) - Qiita
    sh19910711
    sh19910711 2024/06/15
    "予測結果の評価: 機械学習において鬼門と言われる部分 / XGBoostの他にもニューラルネットワークなら「nnet」など様々な手法 / パラメータチューニングやデータの前処理が難しいと思ったら迷わずcaretパッケージを利用" 2018
  • 【R】tydymodelsを用いてlightgbmをやってみる(その3) - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    【R】tydymodelsを用いてlightgbmをやってみる(その3) - Qiita
    sh19910711
    sh19910711 2024/06/15
    "勾配ブースティング: 歪んだデータや相関性のあるデータに対して非常に頑健であるため、必要な前処理の量は最小限 / XGBoostとは対照的に、lightgbmとcatboostはカテゴリー変数(因子)を扱うことができる" 2021
  • Rで系統樹を扱う(ape, ggtree) - Qiita

    Rで系統樹を扱うときに必要なapeやggtreeの使い方がどうしても覚えられないので軽くまとめました。 内容については随時追加予定です。 参考にしたサイト ggtree: Elegant Graphics for Phylogenetic Tree Visualization and Annotation facet_plotの記事 Data Integration, Manipulation and Visualization of Phylogenetic Trees 4, 7章あたり (そのまま4章に飛びます) Visualizing and Annotating Phylogenetic Trees with R+ggtree 系統樹データについて treeオブジェクトの中身 treeの中には、大体以下の5つのデータが格納されています。 edge:どのノードとノードが繋がっているか

    Rで系統樹を扱う(ape, ggtree) - Qiita
    sh19910711
    sh19910711 2024/06/15
    "ggtreeを使うと系統樹だけではなく、ヒートマップなどのアノテーションを付けられる / 操作の基本はggplotに沿っていますが、独特な表記もありややこしい / 関数を用いて、tipを指定し、そこだけを残したり、消したり" 2022
  • ggplot2の「+」とRのパイプの実行順序について - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    ggplot2の「+」とRのパイプの実行順序について - Qiita
    sh19910711
    sh19910711 2024/06/15
    "ggplot2のグラフをplotlyのインタラクティブなグラフにしたい + 中間変数を設定するのではなく、直接パイプでつなげたい / Rのlobstrパッケージにそのまま調べたいコードを渡せば抽象構文木を可視化" 2023
  • LightGBMのCategorical Featureによって精度が向上するか? - Qiita

    簡単に ・LightGBMのパラメータ"Categorical Feature"の効果を検証した。 ・Categorical Featureはcategorical_feature変数に列名を指定するか、pandas dataframeのcategory型の列に対して適用される。 ・Categorical Featureへ設定する変数は、対象のカテゴリ変数を0始まりの整数に変換後、int型 or category型にするのが公式の推奨。 ・Categorical Featureを設定すると、必ず精度が向上するわけではない。 ・high-cardinality or low-cardinalityなカテゴリ変数のみをCategorical Featureに設定すると精度が向上する可能性がある。 初めに SIerでデータサイエンティストをしているSinchir0です。 データ分析コンペティショ

    LightGBMのCategorical Featureによって精度が向上するか? - Qiita
    sh19910711
    sh19910711 2024/06/12
    "LightGBMに最適な形でカテゴリ変数を処理してくれる / high-cardinalityな(=要素が多い)カテゴリ変数をone-hot encodingして決定木で扱う場合には、木を深くする必要がある + それを回避する" 2019
  • セグメント木を使う

    競技プログラミングに慣れ親しんでいる方なら、セグメント木というデータ構造について、一度は聞いたことがあるでしょう。この記事は、セグメント木の構造を理解する必要はないが、使い方を知っておきたいという方のために書かれています。 この記事では、まずセグメント木について紹介し、それからセグメント木を実際に使う際の技法について紹介します。 セグメント木とは セグメント木は、固定長配列にいくつかの操作を加えたデータ構造です。セグメント木は、基的には以下の操作を時間計算量 O(\log n) ですることができます。 i 番目の要素に x を代入 i 番目の要素を取得 l 番目の要素から r 番目の要素のモノイド積[1]を計算 ここで、モノイドを知らない方もいるかもしれませんので、モノイドについて紹介します。 モノイド モノイドは、実数や複素数の足し算や掛け算、文字列の連結といった、集合とその演算をまと

    セグメント木を使う
    sh19910711
    sh19910711 2024/06/08
    "セグメント木: 固定長配列にいくつかの操作を加えたデータ構造 + 𝑙 番目の要素から 𝑟 番目の要素のモノイド積を計算 / 累積和と同様の操作が可能 + セグメント木と累積和の違いは途中で更新ができる" 2022
  • cl-random-forestでランダムフォレストの決定境界を描いてみる

    cl-random-forestでは通常のランダムフォレストに加えて、ランダムフォレストの構造を使って特徴抽出し、それを線形分類器で再学習するという手法を実装している(Global refinement of random forest)。 通常のランダムフォレストに対して、この手法がどういう分類をしているかを見るために、二次元のデータでの実際の分類結果を可視化してみる。 参考: パッケージユーザーのための機械学習(5):ランダムフォレスト このエントリではXORのデータで、綺麗に分かれている場合とかなりオーバーラップしている場合 とでランダムフォレストの決定境界を描いている。データはそれぞれのリンク先にある。 ランダムフォレストを構築 まずはXORのデータからランダムフォレストを構築する。完全なコードはここにある。 (defparameter *target* (make-array 1

    cl-random-forestでランダムフォレストの決定境界を描いてみる
    sh19910711
    sh19910711 2024/06/07
    "refinement: 通常のランダムフォレストに加えて、ランダムフォレストの構造を使って特徴抽出し、それを線形分類器で再学習する / 外れ値に強くなり、より汎化性能が増しているよう見えなくもない" 2017
  • オイラーツアーした木に対するクエリ - Qiita

    この記事に新規性はありません。maspyさんの記事、beetさんの記事がとても分かりやすいです。また、紹介しているテクニックはmaspyさんの記事で紹介されているものです。 maspyさんの記事: Euler Tour のお勉強 beetさんの記事: 2種類のEuler Tourについて オイラーツアーとは? 根付き木を根からDFSして根に戻ってくるような経路(の探索)。競技プログラミングの文脈ではこの行きと戻りの経路について以下のような情報を記録しておくきRMQやRSQを適応することで木に対するいくつかのクエリを高速に処理できる。 各頂点のinとoutの時刻 それまでに辿った辺や頂点の重さなどの情報を記録 各頂点の深さの情報 用語 行きがけ: あるノードから子に移動する 帰りがけ: 子からその親ノードに移動する 実際の例 1を根とする以下の木があるとします。 時刻0は根である1にいてDF

    オイラーツアーした木に対するクエリ - Qiita
    sh19910711
    sh19910711 2024/06/07
    "オイラーツアー: 根付き木を根からDFSして根に戻ってくるような経路 + RMQやRSQを適応することで木に対するいくつかのクエリを高速に処理できる / 各頂点のinとoutの時刻 + 辿った辺や頂点の重さ + 各頂点の深さ" 2020