メインコンテンツへスキップ

機械学習のアルゴリズム選択フローチャート

Choosing the right estimator — scikit-learn 1.2.0 documentationを元にMermaidでまとめた。

flowchart TD
	A((Start))--> B{50サンプル以上?}
    B -->|Yes| B1{カテゴリの\n予測?}
    B -->|No| B2((データを収集))
    B1 -->|Yes| C1{正解ラベルあり?}
    C1 -->|Yes| Z3((分類)):::terminal
    C1 -->|No| Z4((クラスタリング)):::terminal
    B1 -->|No| C2{数量の予測?}
    C2 -->|Yes| Z1((回帰)):::terminal
    C2 -->|No| H((次元削除)):::terminal
    classDef terminal fill:#69F

分類
#

flowchart TD
    Z3((分類)):::terminal -->  I1{10万サンプル以下?}
	I1 -->|Yes| I11[線形SVC]
    I1 -->|No| I21[SDG Classifier]:::method
    I21 -->|うまくいかない| I22[kernel approximation\nGBDT]:::method
    I11 -->|うまくいかない| I12{テキストデータ?}
    I12 -->|Yes| I122[ネイティブベイズ]:::method
    I12 -->|No| I13[K近傍法]:::method 
    I13 -->|うまくいかない| I131[SVC\nランダムフォレスト]:::method 
    classDef terminal fill:#69F
    classDef method fill:#f9f,stroke:#333,stroke-width:4px

クラスタリング
#

flowchart TD
    Z4((クラスタリング)):::terminal --> J1{カテゴリ数は既知?}
	J1 -->|Yes| J11{<10万サンプル以下?}
    J11 -->|Yes| J12[KMeans]:::method
    J12 -->|うまくいかない| J13[スペクトラルクラスタリング\nGMM]:::method
    J11 -->|No| J21[MiniBatch\nKMeans]:::method
    J1 -->|No| J3{<10K samples}
    J3 -->|Yes| J31[MeanShift\nVGBMM]:::method 
    J3 -->|No| J34((不運))
    classDef terminal fill:#69F
    classDef method fill:#f9f,stroke:#333,stroke-width:4px

回帰
#

flowchart TD
    Z1((回帰)):::terminal --> D1{10万サンプル以下?}
    D1 -->|No| E1[SGD回帰分析]:::method
    D1 -->|Yes| E2{説明変数xの一部が重要?}
    E2 -->|Yes| F1[Lasso\nElasticNet]:::method
    E2 -->|No| F2[Ridge\n線形SVR]:::method
    F2 -->|うまくいかない| F3[SVR Kernel='rbf'\nEnsembleRegressors]:::method
    classDef terminal fill:#69F
    classDef method fill:#f9f,stroke:#333,stroke-width:4px

次元削除
#

flowchart TD
    Z((次元削除)):::terminal --> H[Randomized PCA]:::method
	H -->|うまくいかない| H11{10万サンプル以下?}
    H11 -->|Yes| H22[Isomap\nSpectral Embedding]:::method
    H11 -->|No| H3[kernel\napproximation]:::method
    H22 -->|うまくいかない| H4[LLE]:::method
    classDef terminal fill:#69F
    classDef method fill:#f9f,stroke:#333,stroke-width:4px

関連記事

中央競馬のデータ取得

スクレイピングしない場合 # [競馬AI] スクレイピングしない競馬データの取得とデータ構造について - Qiita JRA-VAN データラボ 1986年から約30年分のあらゆる公式競馬データをデータベース化 前走・近走結果の情報、リアルタイムオッズや発走1時間前の馬体重などの最新情報も即座に反映 月額 2,090円(2023年1月現在) データ取得はJRA VAN SDK(C#/C++/Delphi7 /VB2019)を介して行う必要がありWindows前提 JRA-VAN Data Lab. JVData 仕様書 JRDB データはテキストで取得可能 JRDBデータのご案内 ベーシック 月額 1,980円(2023年1月現在) アドバンス 月額 2,480円(2023年1月現在) Mac上で使用したいことと、テキスト形式でのデータ提供の方が取り回しが簡単なため、自分の用途としてはJRDBの方がマッチしているか。 スクレイピングする場合 # 機械学習で競馬予想をしてみた系のまとめ - Qiita netkeiba.comをスクレイピングしている事例が多い。 競馬の予測をガチでやってみた - stockedge.jpの技術メモ netkeiba-scraperが2019年6月現在動くかの話(Ubuntu 18.04.2 LTS) - Qiita

宝くじ・公営ギャンブルの控除率

https://www.soumu.go.jp/main_content/000084191.pdf 実行還元率 控除率 宝くじ 45.7 54.3 サッカーくじ 49.6 50.4 競馬 74.1 25.9 オートレース 74.8 25.2 競艇 74.8 25.2 競輪 75.0 25.0

2ホップリンク

ホップ数 # flowchart LR B1 & B2 --> A G --> O1 H --> O1 A --> O1 & O2 O2 --> E F --> O2 B1:::hop1 B2:::hop1 O1:::hop1 O2:::hop1 F:::hop2 G:::hop2 H:::hop2 style A fill:#f9f,stroke:#333,stroke-width:4px classDef hop1 fill:#a9a classDef hop2 fill:#f96 ホップ数とは自身から任意のページまでたどり着くまでのリンクの数である。 このようなリンク関係がある場合、ページAから見て、B1 B2 O1 O2は1ホップリンクと呼ばれる。 2ホップリンクの意味 # このため、上記のリンク関係で言えば、ページAから見たG H E Fは2ホップリンクとなる。 Scrapboxでは2ホップリンクの内、アウトゴーイングリンクのページへリンクしているページ、つまり、 AからリンクしているO1へリンクしている Gと H AからリンクしているO2へリンクしている F を関連リンクとして表示している。これは、 A→C, B→Cというリンクが存在するとき、AとBの間にはなんらかの関連があると考えてよい。 「和歌山」→「みかん」、「愛媛県」→「みかん」 ならば「和歌山県」と「愛媛県」はみかんつながりになっているわけだし、 「増井」→「Rubyプログラミング」、「高林」→「Rubyプログラミング」 ならば「増井」⇔「高林」は意味がある。 出典: 2ホップリンクの考察 - 増井俊之 上記の考え方に基づく仕様であり、本サイトでもQuartzを拡張し同様の2ホップリンクを表示している(各ページ配下の「関連リンク」) QuartzにScrapbox的な2ホップリンクを追加する Obsidiaのリンク表示 参考情報 # 2ホップリンクの考察 - 増井俊之

Hugo

オープンソースの静的サイトジェネレーター。go言語で記述されておりページ生成の速度が速くカスタマイズ性が高い。 The world’s fastest framework for building websites | Hugo Hugo関連のノート # Hugoメモ Hugoのショートコードをうまく使い回す方法 Hugoのローカルサーバでページが表示されない場合 Hugoで本文の先頭画像をアイキャッチとして使用する Hugoでローカルサーバのみ実行する処理を書く方法 Hugoで楽譜を描画する(abcjs) Hugoのレンダーフックを使ったMermaidの利用 Hugoのショートコード入力を支援するChrome拡張 Hugoでイメージギャラリーを表示するhugo-shortcode-gallery Hugoで写真をリサイズしExif情報を表示する

Hugoのレンダーフックを使ったMermaidの利用

独自構文のテキストから、各種のダイアグラムを生成できるMermaidという便利なライブラリがありますが、現時点ではHugoでサポートされていません。 このため通常、 独自のショートコードを作成する 言語としてmermaidを指定したコードブロックを使用し、mermaidでlanguage-mermaidクラスの要素を変換対象として指定する などの実装が多かったと思うのですが、公式サイトを調べていたところv0.93.0からサポートされたcodeブロックに対するレンダーフックを用いた例が載っており、よりスマートに実装できそうでした。 ここでは公式サイトのレンダーフックを用いたMermaidの組み込み方法を説明します。 レンダーフックの追加 # codeブロックに対するレンダーフックを定義するには、 layouts/_default/_markup/render-codeblock-言語名.html というファイルを作成します。今回ファイル名を、 layouts/_default/_markup/render-codeblock-mermaid.html とすることで、 ```mermaid flowchart LR Start --> Stop ``` というような、言語にmermaidを指定したコードブロックに対してレンダーフックが起動します。レンダーフックの内容は以下の通りです。 <div class="mermaid"> {{- .Inner | safeHTML }} </div> {{ .Page.Store.Set "hasMermaid" true }} <div class="mermaid">でコードブロックの内容を囲む Mermaidの記述があることを表すhasMermaidフラグをtrueにする テンプレートの修正 # テンプレートについては、 layouts/_default/baseof.html layouts/_default/single.html など、Mermaidのコンテンツを表示したいテンプレートへ以下の内容を追加します。私の場合、通常エントリでのみ表記できれば良いためsingle.htmlへ追加しました。 {{ if .Page.Store.Get "hasMermaid" }} <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script> <script> mermaid.initialize({ startOnLoad: true }); </script> {{ end }} このコードはhasMermaidフラグがtrueの場合のみ、MermaidのJavascscript読み込みと初期化を行います。これにより、Mermaidの記述がないページではコードが展開されずムダな処理を抑止できるわけです。 上記処理をテンプレートへ追記する場合の注意点としては、.Contentが出現する箇所より下へ書く必要があるということです。Hugoでは.Contentが実行(評価)されるまではレンダーフックは処理されないためです。 参考サイト # mermaid.js で Markdown 中に UML 図を埋め込む - まくまくHugoノート Markdown Render Hooks mermaid - Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.