import catboost
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from catboost import CatBoostRegressor
from sklearn.ensemble import GradientBoostingRegressor
x = [[1,2],[2,2],[3,2],[4,2],[5,2],[6,2],[7,2],[8,2],[9,2]]
y = [2,4,6,8,10,12,14,16,18]
print('-------- 1 DecisionTree')
tree = DecisionTreeRegressor().fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],tree.predict([ix])[0]))
print('-------- RandomForest 10 Tree')
regr = RandomForestRegressor(bootstrap=True).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],regr.predict([ix])[0]))
print('-------- CatBoost 10 Tree')
cat = CatBoostRegressor(iterations=100, learning_rate=0.1, depth=2, verbose=False).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],cat.predict([ix])[0]))
print('-------- Gboost 100 Trees')
gboost = GradientBoostingRegressor(n_estimators=100, verbose = False).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],gboost.predict([ix])[0]))
-------- 1 DecisionTree
1.00*2.00=2.002.00*2.00=4.003.00*2.00=6.004.00*2.00=8.005.00*2.00=10.006.00*2.00=12.007.00*2.00=14.008.00*2.00=16.009.00*2.00=18.00
-------- RandomForest 10 Tree
1.00*2.00=3.602.00*2.00=4.403.00*2.00=6.004.00*2.00=8.005.00*2.00=9.206.00*2.00=11.807.00*2.00=13.208.00*2.00=15.609.00*2.00=17.40
-------- CatBoost 10 Tree
1.00*2.00=2.972.00*2.00=2.973.00*2.00=5.784.00*2.00=8.745.00*2.00=10.166.00*2.00=12.887.00*2.00=14.678.00*2.00=15.779.00*2.00=15.77
-------- Gboost 100 Trees
1.00*2.00=2.002.00*2.00=4.003.00*2.00=6.004.00*2.00=8.005.00*2.00=10.006.00*2.00=12.007.00*2.00=14.008.00*2.00=16.009.00*2.00=18.00
import catboost
import lightgbm as gbm
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from catboost import CatBoostRegressor
from sklearn.ensemble import GradientBoostingRegressor
x = [[1,2],[2,2],[3,2],[4,2],[5,2],[6,2],[7,2],[8,2],[9,2]]
y = [2,4,6,8,10,12,14,16,18]
print('-------- 1 DecisionTree')
tree = DecisionTreeRegressor().fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],tree.predict([ix])[0]))
print('-------- RandomForest 10 Tree')
regr = RandomForestRegressor(bootstrap=True, n_estimators=100).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],regr.predict([ix])[0]))
print('-------- CatBoost 10 Tree')
cat = CatBoostRegressor(iterations=100, learning_rate=0.1, depth=2, verbose=False).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],cat.predict([ix])[0]))
print('-------- Gboost 100 Trees')
gboost = GradientBoostingRegressor(n_estimators=100, verbose = False).fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],gboost.predict([ix])[0]))
print('-------- LGBM 100 Trees')
gbbm = gbm.LGBMRegressor(n_estimators=100,boosting_type='dart').fit(x,y)
for ix in x: print(' {:2.2f}*{:2.2f}={:2.2f} '.format(ix[0],ix[1],gbbm.predict([ix])[0]))
-------- 1 DecisionTree
1.00*2.00=2.002.00*2.00=4.003.00*2.00=6.004.00*2.00=8.005.00*2.00=10.006.00*2.00=12.007.00*2.00=14.008.00*2.00=16.009.00*2.00=18.00
-------- RandomForest 10 Tree
1.00*2.00=2.842.00*2.00=3.743.00*2.00=5.464.00*2.00=7.705.00*2.00=9.666.00*2.00=11.447.00*2.00=13.788.00*2.00=15.469.00*2.00=16.98
-------- CatBoost 10 Tree
1.00*2.00=2.972.00*2.00=2.973.00*2.00=5.784.00*2.00=8.745.00*2.00=10.166.00*2.00=12.887.00*2.00=14.678.00*2.00=15.779.00*2.00=15.77
-------- Gboost 100 Trees
1.00*2.00=2.002.00*2.00=4.003.00*2.00=6.004.00*2.00=8.005.00*2.00=10.006.00*2.00=12.007.00*2.00=14.008.00*2.00=16.009.00*2.00=18.00
-------- LGBM 100 Trees
1.00*2.00=10.002.00*2.00=10.003.00*2.00=10.004.00*2.00=10.005.00*2.00=10.006.00*2.00=10.007.00*2.00=10.008.00*2.00=10.009.00*2.00=10.00
Googleも使えない?:)
https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb?hl=ru
翻訳者が働いている。ページ全体を翻訳するか、翻訳機にコピーペーストしてください。
しかし、単語や段落は全く機能しない。
設定項目が多いから、何本もないとわからない...。:) ツリー状のものは主に大型のものを想定しているので、サンプルが小さいのかもしれません、何か手を加える必要があります。
もちろん、微調整は可能です。デフォルトではサンプリングの割合が減ってしまいますが、2×2が指標になると思います。)
Google翻訳プラグイン(クローム)を使って、1語ずつ翻訳してください。英語ができないとできない。1-2文字でも読み進めれば、全体として意味が理解できる。私自身、言葉を忘れたときに使っています。単語をクリックするだけです。ターン/センテンスで割り当てができます。
もちろん、一度に全文を訳すのはバカバカしいので、単語は覚えられないし、文章の意味も理解できない。
自分で仮説を立てるよりも生産的かもしれませんが、私は語学に弱いので...。
決定木の分岐や葉を手動で編集する意味がわかりません。確かにすべての分岐を自動的に論理演算子に変換していますが、正直、自分で修正した覚えはないのです。
だって、予測確率が50~60%以下の葉っぱを使う意味ってあるんでしょうか?推測で反応するよりも、状況に応じて全く反応しない方が良いモデルです。
そして、それはCatBoostのコードを掘り下げる価値があるのか、どうなのか。
例えば、私は上記のようなニューラルネットワークをpythonでテストし、乗算表×2で学習させました。
明らかにCatBoostに有利な結果ではありません。)
確かに、何千本も撮れば結果は良くなりますね。ニューラルネットワークより木の方がいいかというとそうでもないのですが、木は作るためのリソースが少なくて済みますからね。例えば今、私は約400の予測因子を持っていますが、400の入力ニューロンと(何層あるのか)ネットワークを数えるには時間がかかりすぎます。
サンプルを投下することができます。どちらの方法が良いかを確認するために使うことができるかもしれません。
でも、設定には意味があるんです。今、それを掘り下げて考えているところです。
決定木の分岐や葉を手動で編集する必要があるのか理解できません。確かにすべての分岐を自動的に論理演算子に変換していますが、正直なところ、自分で修正した覚えはないのです。
そして一般的にはCatBoostのコードを掘る価値があるのですが、どうすれば確実にわかるのでしょうか。
例えば、私は上記のように乗算表で学習するニューラルネットワークをpythonでテストし、それを木や森(DecisionTree, RandomForest, CatBoost)のテストに使っています。
2×2が0.5であるように、CatBoostに有利でないことがおわかりいただけると思います:)
たしかに、何千本も撮れば結果はよくなりますね。を少し調整し、グラデーションのブーストを 追加しました。
あとはもちろんムダなもの...。
しかし、単語や段落は......まったくダメ。
https://www.mql5.com/ru/forum/86386/page1180#comment_9543249
そこで、CatBoostを iterations=10ではなく100本にして、GBMの美しさを表現:)
だって、予測確率が50~60%以下のシートを使う意味ってあるんですか?ランダムですからね。当てずっぽうで反応するよりも、まったく反応しない方がモデルにとってはいいんです。
木がニューラルネットワークより優れているとは思えませんが、木は構築するためのリソースが少なくて済みますね。例えば今、私は約400の予測因子を持っていますが、400の入力ニューロンと(何層あるのか)ネットワークを数えるには時間がかかりすぎます。
サンプルを投下することができます。どちらの方法が良いかを確認するために使うことができるかもしれません。
そして、設定もそうですねー、納得です。今、掘り下げて、その本質を理解しようとしているところです。
ぜひとも初期段階のうちに、できる限り掘り下げて慎重に選びましょう。
2-2の理解不足の他に、各起動時に、CatBoostによる 一時ディレクトリの作成が邪魔で、保護された環境ではそれから追い出されるように、切断しようとします。
そして、一般的に、これらの不具合は、彼は何とか非常にプロフェッショナルではないので、あなたがそれらを打つことができない場合は、個人的に私の意見では、無料よりも安い - 一度に放棄するこの製品から:)に見えます。