4

scikit-learn のランダム フォレスト分類器の特徴ベクトルを生成しています。特徴ベクトルは、9 つ​​のタンパク質アミノ酸残基の名前を表します。可能な残基名は 20 あります。したがって、1 つの残基名を表すために 20 個のダミー変数を使用します。9 個の残基の場合、180 個のダミー変数があります。

たとえば、スライディング ウィンドウ内の 9 つの残基が ARNDCQEGH (すべての文字がタンパク質残基の名前を表す) である場合、私の特徴ベクトルは次のようになります。

"True\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\n" 

また、 (1,0) を使用して (True,False) を置き換えようとしました

Scikit のランダム フォレスト分類子モデルをトレーニングしてテストした後、完全に機能しないことがわかりました。しかし、Scikit のランダム フォレストは、他の数値データでも機能します。

Scikit のランダム フォレストは、カテゴリ変数またはダミー変数を処理できますか? もしそうなら、それがどのように機能するかを示す例を提供できますか.

ランダムフォレストの設定方法は次のとおりです。

clf=RandomForestClassifier (n_estimators=800, criterion='gini', n_jobs=12, max_depth=None, compute_importances=True, max_features='auto', min_samples_split=1,  random_state=None)

よろしくお願いします!

4

2 に答える 2

3

0 および 1 としてエンコードされたブール機能を使用すると機能するはずです。フォレスト内に多数の決定木があっても予測精度が悪い場合は、データにノイズが多すぎて、学習アルゴリズムが興味深い考えを拾わない可能性があります。

このデータのベースラインとして線形モデル (ロジスティック回帰など) を当てはめようとしましたか?

編集: 実際には、カテゴリ変数に整数コーディングを使用すると、多くのランダム化された決定木モデル (scikit-learn の RandomForest や ExtraTrees など) で非常にうまく機能する傾向があります。

于 2013-04-05T12:11:39.797 に答える
2

Scikits のランダム フォレスト分類器は、ダミー化された変数を使用できますが、カテゴリ変数を直接使用することもできます。これが推奨されるアプローチです。文字列を整数にマップするだけです。特徴ベクトルが ['a' ,'b', 'b', 'c'] であると仮定します

vals = ['a','b','b','c']
#create a map from your variable names to unique integers:
intmap = dict([(val, i) for i, val in enumerate(set(vals))]) 
#make the new array hold corresponding integers instead of strings:
new_vals = [intmap[val] for val in vals]

new_vals は値 [0, 2, 2, 1] を保持するようになり、ダミー化を行わずに RF に直接渡すことができます

于 2013-04-05T07:48:31.983 に答える