Catboostのカテゴリ機能の処理オプション(CTR設定)?


11

連続的なターゲット変数(つまり、回帰)を予測する多数のカテゴリ特徴(> 80%)を持つデータセットを使用しています。カテゴリ機能を処理する方法についてかなり読んでいます。そして、私が過去に使用したワンホットエンコーディングは、特に多くのレベルを持つ多くのカテゴリ機能に関しては、非常に悪い考えであることを学びました(これらの投稿これを読んでください)。

カテゴリベースの機能のターゲットベースのエンコード(スムージング)などの方法に出くわしましたが、多くの場合、Kaggleのこの投稿/カーネルの各機能のターゲット値の平均に基づいています。それでも、CandBoostがYandexグループによって昨年リリースされた意思決定ツリーに対するオープンソースのグラディエントブースティングを見つけるまで、より具体的な方法を見つけるのに苦労しています。これらは、カテゴリ機能に対して追加の統計カウントオプションを提供しているようで、単純なワンホットエンコーディングやスムージングよりもはるかに効率的です。

問題は、ドキュメントがCTR設定の設定方法に役立たないことです。別の方法を試しましたが、うまくいきません。このドキュメントでは、CTR設定simple_ctrであり、(CTR設定セクション)として指定されています。

['CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
 'CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
  ...]

これは非常に単純な例です。データは次のようになります。

import pandas as pd
import catboost
data = [{'profit': '342','country': 'holland','account': 'Jones LLC', 'saving': 150, 'debt': -60, 'age': 28},
         {'profit': '875','country': 'germany','account': 'Alpha Co',  'saving': 200, 'debt': -10, 'age': 42},
         {'profit': '127','country': 'italy','account': 'Blue Inc',  'saving': 50,  'debt': -300,  'age': 38 }]
df = pd.DataFrame(data)

簡単なCatboostリグレッサは次のとおりです。

X_train = df.drop(['profit'],axis=1)
Y_train = df['profit']
categorical_features_indices = [0,2]

train_pool = catboost.Pool(X_train, Y_train, cat_features=categorical_features_indices)

model = catboost.CatBoostRegressor(
    depth=3,
    iterations=5,
    eval_metric='RMSE',
    simple_ctr=None)

model.fit(train_pool);

simple_ctr、CTR設定のいずれかが、問題です!パッケージがさまざまなメソッドを提供しているように見えるので残念ですが、今のところそれらにアクセスする方法はありません。

2018年8月9日更新:数日前、私はこの問題をCatboost開発者に提起しました。こちらを参照してください。彼らはチュートリアルを提供するためにチケットをオープンしました。


ここでは、カテゴリvaiable上catboostについての説明は次のとおりです。tech.yandex.com/catboost/doc/dg/concepts/...
DiveIntoML

はい、リンクを知っています。詳細な理論的説明を提供します。しかし、それを使用する方法については十分な説明がされていません。実用的な使い方の説明です。数か月前に試してみましたが、簡単ではありませんでした。
TwinPenguins

1
私は現在、one_hot_max_sizeパラメータのみを使用しています。私の理解では、1つのホットエンコードされていないものはすべて、ターゲット平均エキスパンドエンコーディングを使用してエンコードされます。追加の公式ドキュメントで、ctr設定をよりよく理解し、どのように操作できるかを楽しみにしています。
Garima Jain

回答:


2

ctrパラメータとすべてのコンポーネントを設定するには、文字列のリストを渡す必要があることがわかりました。各文字列には、ctrTypeおよびそのコンポーネントの1つが含まれている必要があります。

  • 文字列の最初の単語があるべきctrType例えばBorders:(クリックここで catboostパラメータのため)
  • 次に、の1つのコンポーネントがctrType続きます。例えばTargetBorderType=5
  • すべて一緒に'Borders:TargetBorderType=5'
  • 手順を繰り返して他のコンポーネントを設定し、新しい文字列をリストに追加します。

2つのコンポーネントを設定した例:

simple_ctr = ['Borders:TargetBorderType=Uniform', 'Borders:TargetBorderCount=50']

説明に感謝します、そして、それを再確認するために長い時間をかけて申し訳ありませんでしたが、私の心をすり抜けました。
TwinPenguins

1

以下のようなフォーマットを使用してみましたか?

['CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]'

['BinarizedTargetMeanValue[:TargetBorderCount=1][:TargetBorderType=Uniform][:CtrBorderCount=5][:CtrBorderType=Uniform][:Prior=1]']

これは答えですか?質問/コメントのように感じます。
スティーブンラウフ

@Interested_Programmer:機能しません。先ほど提供した例で試してみてください。あなたはそれをテストしましたか、それとも単にドキュメントでそれを見つけましたか?
TwinPenguins 2018

@StephenRauchに謝罪します。ノートブックを実行できませんでしたが、他の関数でフォーマットに従って使用できることがわかりました。後から考えれば、コメントとして追加するべきだった。また、クリエイターの皆さんが新しいチュートリアルを公開するのを待っています。
Interest_Programmer

1
これも機能します。simple_ctr = ['BinarizedTargetMeanValue'])
Interest_Programmer

1
ありがとう。しかし、あなたが示したように、それはsimple_ctr = ['BinarizedTargetMeanValue'])としてのみ機能します![:TargetBorderCount = BorderCount]など、その他のオプションはフィードできません。CtrTypeとともに他のオプションをフィードする方法を知っている場合は、お知らせください。
TwinPenguins 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.