2023年末のElixirが出来ること⑥AI・LLM後編【Scholar／Explorer／Evison／EXGBoost】（最新Elixirのキャッチアップや、アドカレのネタ探しに読んでください）

この記事は、[Elixir Advent Calendar 2023 シリーズ9](https://qiita.com/advent-calendar/2023/elixir) の15日目です

昨日は、 私で [「2023年末のElixirが出来ること⑤AI・ML前編【Nx／Bumblebee】」](https://qiita.com/piacerex/items/f6a73a8252a3f6093b1a) でした

---

[piacere](https://twitter.com/piacere_ex) です、ご覧いただいてありがとございます :bow:

2023年末の時点で、Elixirにいったい何が出来るのかを紐解いていくシリーズで、[前回は「⑤ AI・LLM前編【Nx／Bumblebee】」](https://qiita.com/piacerex/items/40ec656513be75a996c0)でしたが、今回は「⑥ AI・LLM後編【Scholar／Explorer／Evison／EXGBoost】」です

なお、本コラムで紹介した内容は、あなたのスキルからBright（輝き）とRight（正しさ）を引き出すプロダクト「Bright」の「AI・MLエンジニア Elixir」スキルパネルに反映された上でアンロックされるので、お楽しみに :wink: 

https://bright-fun.org
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/f6d76f4e-08dd-f832-239a-20ae2f170f2a.png)

本シリーズの全体像は、下記になります

:::note warn
[①2023年の新たなライブラリ／FW編](https://qiita.com/piacerex/items/774dd91c67184bec6df1)
[②2023年に更新されたライブラリ／FW編](https://qiita.com/piacerex/items/0c6ffb235e1146c38302)
[③Elixir本体／Phoenix／LiveView編](https://qiita.com/piacerex/items/8cd483159c93d0f05bd7)
[④Web／スマホ開発ライブラリ編](https://qiita.com/piacerex/items/40ec656513be75a996c0)
[⑤AI・LLM前編【Nx／Bumblebee】](https://qiita.com/piacerex/items/f6a73a8252a3f6093b1a)
[⑥AI・LLM後編【Scholar／Explorer／Evison／EXGBoost】](https://qiita.com/piacerex/items/fd19820bc0befe52b156)
[⑦Livebook＋プラグイン編](https://qiita.com/piacerex/items/bcdcb7bc6c998335a406)
[⑧クラウドライブラリ編](https://qiita.com/piacerex/items/0ce1f05990a502a26ed7)
[⑨マイクロサービスライブラリ編](https://qiita.com/piacerex/items/7e4b15e4dd9a94e58b3b)
[⑩データ操作ライブラリ編](https://qiita.com/piacerex/items/2e19fd1df6ef2d7cf150)
[⑪2023年末までのElixirができることを振り返る](https://qiita.com/piacerex/items/4ef28623d898450c0dcf)
:::

あと、このコラムが、面白かったり、役に立ったら、![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/907a8695-4d83-1b5c-8052-d0ce52de5f66.png) をお願いします :bow:

# Scholar／Scidata

Scholarは、今年3月が初出ですが、レポジトリ自体はもっと早くアップされていて、でも中身が空の状態が半年近く続き、けっこうヤキモキしましたが、線形モデルから徐々に増えていきました

その後、ハイパーパラメータチューニングや前処理などのモデル以外のモジュールがなかなか入らず、再度モヤモヤしましたが、今はちゃんと継続的なアップデートが走って一安心です

高機能を誇るScikit-learnと比べてしまうと不足感は否めませんが、Nx／Bumblebeeではフォローされない領域（これは丁度、TensorFlowやPyTorchがScikit-learnが無いと不便な前処理だったり、ディープラーニングを使うまでも無いライトな機械学習部分に相当）がScholarによって埋め合わされ始めています

https://github.com/elixir-nx/scholar

Scidataは、2021年4月が初出で、こちらはScikit-learnで言う `sklearn.datasets` に相当します

https://github.com/elixir-nx/scidata

## 出来ること

- Scikit-learnに近い機械学習や前処理、メトリクスなどは揃っている
  - ただし実装範囲はScikit-learnの半分程度で、モデル種類も限られたものだけ

| 大分類 | 中分類 | 小分類 | 機能 |
|-|-|-|- |
| 教師あり学習 | 分類　　　　　 | 線形　　　　　 | 線形回帰
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | ロジスティック回帰
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | 多項式回帰
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | リッジ回帰
| 　　　　　　 | 　　　　　　　 | ナイーブベイズ | コンプリメント
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | ガウス分布
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | 多項分布
| 　　　　　　 | 　　　　　　　 | 近傍法　　　　 | kNN
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | rNN
| 　　　　　　 | 回帰　　　　　 | 近傍法　　　　 | kNN
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | rNN
| 教師なし学習 | クラスタリング | －　　　　　　 | DBSCAN
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | 混合ガウス
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | K-means
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | アフィニティ伝播
| 　　　　　　 | 次元削減　　　 | －　　　　　　 | PCA（主成分分析）
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | t-SNE
| 統計　　　　 | －　　　　　　 | －　　　　　　 | 数値積分
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | 尖度／歪度／モーメント
| 　　　　　　 | 補完　　　　　 | －　　　　　　 | 線形
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | ベジェ・スプライン
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | キュービック・スプライン
| メトリクス　 | 分類　　　　　 | －　　　　　　 | 正答率／適合率／再現率／F値等
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | 混合行列
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | ROC曲線／AUC／カッパ係数等
| 　　　　　　 | 回帰　　　　　 | －　　　　　　 | R2スコア／MAE／MSE等
| 　　　　　　 | クラスタリング | －　　　　　　 | シルエットスコア
| 　　　　　　 | 統計的距離　　 | －　　　　　　 | ハミング／マンハッタン距離等
| 　　　　　　 | 類似度　　　　 | －　　　　　　 | ジャッカード／ダイス係数等
| 前処理　　　 | －　　　　　　 | －　　　　　　 | 正規化
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | 標準化
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | ワンホットエンコーディング
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | オーディナルエンコーディング
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | インピュータ
| データ分割　 | －　　　　　　 | －　　　　　　 | 交差検証
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | k-Fold
| ハイパー<br>パラメータ<br>チューニング | － | － | グリッドサーチ

全量は下記にあります

https://hexdocs.pm/scholar/

https://github.com/elixir-nx/scholar/blob/main/CHANGELOG.md

https://hexdocs.pm/scidata/

比較元のScikit-learnリファレンスは下記にあります

https://scikit-learn.org/stable/modules/classes.html

## Scikit-learnにあってScholarに無いこと

その大半は、単純にScholarが新しいOSSだから実装できていないものが多いですが、一部は、後発であるElixirはPython経緯と同じ道を辿る必要が無かったり、Python言語仕様に無いが故にScikit-learn実装されている機能もElixirでは割愛されるかも知れません

- Python経緯と同じ道を辿る必要が無い対象
  - 勾配ブースティング／AdaBoost … 後述するEXGBoostで充分なため
  - ランダムフォレスト … 後述するEvisionに存在するため
  - サポートベクターマシン … 後述するEvisionに存在するため
  - SGD … Axonに存在するため
  - パーセプトロン … Axonに存在するため
  - 多層パーセプトロン … Axonに存在するため
- Python言語仕様に無くてScikit-learn実装されている対象
  - パイプラインは、Elixirのパイプ演算子で済むかも知れない 

Scikit-learnにあってScholarに無いことは、下記の通りです

特に、多数決投票器（VotingClassifier）が無いため、Kaggleなどで複数学習器によるアンサンブル攻略が出来ないのが辛いです

| 大分類 | 中分類 | 小分類 | 機能 |
|-|-|-|- |
| 教師あり学習 | －　　　　　　 | 線形　　　　　　　　　 | SGD
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | パーセプトロン
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | PA（Passive Aggressive）
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | ラッソ回帰
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | エラスティックネット
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | LARS
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | 直交マッチング追跡
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | ポアソン分布
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | ツイーディ分布
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | ガンマ分布
| 　　　　　　 | 　　　　　　　 | ベイズ推定　　　　　　 | ARDR
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | ベイズリッジ回帰
| 　　　　　　 | 　　　　　　　 | アンサンブル　　　　　 | ランダムフォレスト
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | 分離フォレスト
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | ランダムツリー
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | エクストラツリー
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | サポートベクターマシン
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | 勾配ブースティング
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | AdaBoost
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | バギング
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | スタッキング
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | 多数決投票器
| 　　　　　　 | 　　　　　　　 | ニューラル<br>ネットワーク | 多層パーセプトロン
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | ベルヌーイ制約つき<br>ボルツマンマシン
| 　　　　　　 | 　　　　　　　 | その他　　　　　　　　 | カーネル近似
| 教師なし学習 | －　　　　　　 | －　　　　　　　　　　 | ガウス過程
| 　　　　　　 | 次元削減　　　 | －　　　　　　　　　　 | Isomap
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | LLE
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | MDS
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | SpectralEmbedding
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | SMACOF
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | PTT
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | ランダム投影
| メトリクス　 | ペアワイズ　　 | －　　　　　　　　　　 | （各種）
| 推定器　　　 | －　　　　　　 | －　　　　　　　　　　 | コンポジット
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | 共分散
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | 交差分解
| 　　　　　　 | 　　　　　　　 | 　　　　　　　　　　　 | 行列分解
| 特徴量操作　 | 抽出　　　　　 | －　　　　　　　　　　 | （各種）
| 　　　　　　 | 選択　　　　　 | －　　　　　　　　　　 | （各種）
| パイプライン | －　　　　　　 | －　　　　　　　　　　 | （各種）
| キャリブ<br>レーション | －　　　　　　 | －　　　　　　　　　　 | （各種）
| データ分割　 | －　　　　　　 | －　　　　　　 | シャッフル分割
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | 時系列分割
| ハイパー<br>パラメータ<br>チューニング | － | － | ランダムサーチ
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | HGS
| 　　　　　　 | 　　　　　　　 | 　　　　　　　 | HRS

# EXGBoost

EXGBoostは、今年5月が初出です

ようやくElixirでも、Kaggle上位入賞にトライする土壌が出来上がり、とても嬉しく思います

https://github.com/acalejos/exgboost

## 出来ること

- Python EXGBoostと同じアルゴリズムが使える
  - C言語で実装されたXGBoostラッパー
- ただし、以下は未実装の模様
  - ストリーミングデータ型
  - CUDAサポート

全量は下記にあります

https://hexdocs.pm/exgboost/

# Explorer

Explorerは、2022年4月が初出です

Python Pandasのような高度なデータ加工／抽出／集計が可能で、Rustへのオフロード、もしくはGPU／TPU利用を伴う高速処理ができることが特徴です

2022年11月に、Nxとのシームレスな変換と、`Query` による強力で直感的なデータ操作が入ったことで、可読性が格段に上がり、かなり便利になりました

https://github.com/elixir-explorer/explorer

## 出来ること

- Python PandasやR Tidyverseと似たデータ加工／抽出／集計ができる

全量は下記にあります

https://hexdocs.pm/explorer/

https://github.com/elixir-explorer/explorer/blob/main/CHANGELOG.md

Elixirデータサイエンティスト @RyoWakabayashi さんが、数多くのExplorerコラムを書いてくれているので、ご参考にご覧ください

https://qiita.com/RyoWakabayashi

# Evision／Image

Evisionは、2022年7月が初出です

OpenCVができる様々な画像加工を、Elixirでも再現できます

https://github.com/cocoa-xu/evision

Imageは、2022年5月が初出です

こちらはpyvips同様の画像加工をElixirにもたらします

https://github.com/elixir-image/image

## 出来ること

- Python cv2やpyvipsと同じ画像加工／操作が一通りできる

全量は下記にあります

https://hexdocs.pm/evision/

https://github.com/cocoa-xu/evision/blob/main/CHANGELOG.md

https://hexdocs.pm/image/

https://github.com/elixir-image/image/blob/main/CHANGELOG.md

こちらも @RyoWakabayashi さんが、沢山コラム化してくれています

https://qiita.com/RyoWakabayashi

# 終わりに

Elixir AI・ML開発の中核となるNx／Bumblebee以外の機械学習やデータ処理、画像処理についても、Pythonと遜色無い開発がじょじょに可能となっている様が伝わったでしょうか？

今年1年、非常に賑わった生成AI／LLM界隈ですが、その端っこにElixirも早くも手をかけようとしている様がイメージできたら幸いです

次回は、[「⑦ Livebook＋プラグイン編」](https://qiita.com/piacerex/items/bcdcb7bc6c998335a406)をお送りします

---

明日は、 @RyoWakabayashi さんで [「闘魂Elixir ── Advent of code 2023 Day 4 Part 1 を Livebook で楽しむ」](https://qiita.com/RyoWakabayashi/items/3f96fa2d7967ac2d0b7b) です

# p.s.このコラムが、面白かったり、役に立ったら…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/907a8695-4d83-1b5c-8052-d0ce52de5f66.png) にて、どうぞ応援よろしくお願いします :bow: