Dicision Tree Classifier from scratch -決定木分類モデルのfortran化について-
▼以下決定木分類(Dicision Tree Classifier)のfortran90コードです。いわゆるfrom scratchというもののひとつに当たるかと思います。自由に用いて構いません。ただし、コード自体の積極的な使用はすすめません。これを使用・改変した結果を外に出す場合は、その旨を記載して下さると有難いです。
必要なもの:
・csvファイル"iris-dataset.csv
-いわゆるiris-dataset。1行目はラベル名。2行目以降に変数150データ 。
-最終列は目的変数を整数で書く。(0,1,2に書き換えておく)
・fortranプログラム実行に必要なもの。
個人的な興味から2、3日くらいで原型を作り、いろいろ遊んでいたものです
が、消えていくのも寂しいかと思い、ここに置くことにしました。
このプログラムは、処理量が~2^(木の深さ)で増えていくものになっており、木の深さ15程度を超えると使い物になりません。他にも、いろいろと危ない箇所があると思いますので、上にも書きましたが積極的な使用はすすめません。決定木にはsklearnを使うのが良いと思います。
目的関数や二分木のロジックそのものをいじるとか、そんな変な使い方を望むならば見る価値があるのかもしれません。
いちおう、有名な機械学習の分類問題"iris-dataset"において、
pythonのライブラリscikit-learnのDecisionTreeClassifier(ただしハイパーパラメータは以下)と同じ結果を返すことを確認しています。
model = DecisionTreeClassifier(
criterion='entropy',
splitter='best',
max_depth=10,
min_samples_split=2,
min_samples_leaf=1,
max_features=None,
max_leaf_nodes=None,
min_impurity_decrease=0.0
)