FortLearnerについて
FortLearnerはFortranでMachine Learningのアルゴリズムを(簡単だとおもったものから)実装しているライブラリです。PythonにはScikit-Learnがあるように、ほかの言語でもそれに相当するライブラリがすぐに見つかるかと思います。Fortranにはそれに類するものが見つからないので、作ってみようと思い立ちました。というのは後付けで、最初は新卒で就職してからあまりにも勉強していないことに(帰宅してからも気力が尽きていたこともありますが)愕然としたからです。とはいえ、完全に仕事に関係していないことを勉強するのはモチベーションがわかないと思い、機械学習の実装をすれば仕事でScikit-Learnを使うときに挙動がわかったり、お客様に説明するのもやりやすいかと思ったからです。
アルゴリズムの選択
これは上記の通り簡単だと思ったものからやっています。また、なるべく網羅的にやりたいと今は思っているので、基本的なアルゴリズムともう1,2個実装をすませたら次の種類のものという感じに選んでいます。
実装方針
とりあえず速ければいい、でもせめて自分が拡張するときにあんまりやりづらくないように、という程度の方針でやっています。なので、可読性、保守性という観点はほぼありません。速度の基準は何度も出してしまいますが、Scikit-Learnです。統一されたインターフェースを維持しつつ、圧倒的多数のアルゴリズムを実装しているので、せめて速度くらいは勝ってみたいという気持ちです。正直このような公式ライブラリは絶対に勝てないだろうなくらいに思っていたのですが、いろいろ捨ててしまえば(捨てるといろいろダメな気がしますが)速度くらいは勝てるんだなというのはすごくうれしかったです。
実装済みアルゴリズム
実装済みアルゴリズムは以下です(アルファベット順)。記事にはしていますが、実装できていなアルゴリズムもいくつかあります(間に合わなかったともいいます)。DecisionTree系が妙に多いのは最初に実装したものがDecisionTreeであったことと、最初に考えていたライブラリの名前が関係しています。レポジトリにはファイルだけあって、まったく実装されていないものが残っています...
- boosting_trees
- adaboost
- gradient_boosting_with_clouds
- gradient_boosting_with_extra_tree
- gradient_boosting_with_lawu
- gradient_boosting_with_decision_tree
- clustering
- breathing_kmeans
- dbscan
- kmeans
- minibatch_kmeans
- decision_tree
- clouds
- decision_tree
- extra_tree
- isolation_tree
- lawu
- oblivious_tree
- random_rotation_tree
- sadt
- sliq
- decomposition
- nipals
- pca
- forest
- deep_forest
- extra_trees
- isolation_forest
- random_forest
- linear_regression
- linear_regression(lasso, ridge)
- logistic_regression
- logistic_regression
- multi_layer_perceptron
- multi_layer_perceptron
- nearest_neighbor
- balltree
- brute_force
- kdtree
- lsh
- product_quantization
- sgd_estimator
- sgd_estimator
記事内で書くこと
アルゴリズムの簡単な解説をします(思った以上に時間がかかってしまいました。できればpythonで実装したものも入れたかったのですが)。また、実装していて困ったところや工夫した点などを書きたいと思います。
以上