Julia言語 LightGBMで多クラス分類
(解決済み)
非深層学習系の提案手法を実装するならJulia一択だと思うのですが,既存の比較手法をすぐに試せないとpython民に戻りたくなりますね..LightGBMで多クラス分類をしようとして,ちょっと詰まったので,二度と再び本件で躓かないためのマイメモです.
LightGBMはここにあるgithubのものを落としてきました.
まぁ普通に]add LightGBM
でインストールできるのですが,提供されているデモは二値分類用.多クラス分類のためにはいろいろ変えないといけない.
using LightGBM using DelimitedFiles function LGBM(x_train, y_train, x_test, y_test, num_class) y_test = convert(Vector, Int.(y_test)) y_train = convert(Vector, Int.(y_train)) y_test .-= 1 # labelは0からスタートっぽいので, y_train .-= 1 # Load LightGBM's binary classification example. # Create an estimator with the desired parameters—leave other parameters at the default values. estimator = LGBMClassification( objective = "multiclass", num_iterations = 100, learning_rate = .1, early_stopping_round = 5, feature_fraction = .8, bagging_fraction = .9, bagging_freq = 1, num_leaves = 1000, num_class = num_class, metric = ["auc_mu", "multi_logloss"] ) LightGBM.fit!(estimator, x_train, y_train) predicted = LightGBM.predict(estimator, x_test) end
はまりポイント①
なぜかfit!
やpredict
が定義されてない,って怒られるので,LightGBM.fit!
とかLightGBM.predict
とする.
はまりポイント②
metric
のauc
はニクラス分類用.多クラス分類をするときは,auc_mu
としよう.同様に,コスト関数にはmulti_logloss
を使いましょう.
はまりポイント③
ラべルy
の各要素はInt
にしておこう.ラベルの始点は0
なので,y_test
, y_train
が1
からはじまるようにロードしているなら,.-1
しましょう.
とりあえずこれで動いた!! predictedは[テストサンプル数,クラス数]の二次元配列になっていて,各サンプルがどのクラスにいるのかの確率をあらわしてるっぽい.