5

次のようなデータセットがあるとします。

5.9;0.645;0.12;2;0.075;32;44;0.99547;3.57;0.71;10.2;5
6;0.31;0.47;3.6;0.067;18;42;0.99549;3.39;0.66;11;6

ここで、最初の11列は特徴(酸性度、塩化物など)を示し、最後の列はアイテムに与えられた評価(5または6など)を示します。

データセットは次のようにトレーニングされます。

target = [x[11] for x in dataset]
train = [x[0:11] for x in dataset]

rf = RandomForestClassifier(n_estimators=120, n_jobs=-1)
rf.fit(train, target)

predictions = rf.predict_proba(testdataset)
print predictions[0] 

次のようなものを印刷します

[ 0.          0.01666667  0.98333333  0.          0.          0.        ]

さて、なぜそれは単一の分類、例えば5または6の評価を出力しないのですか?

ドキュメントには、「入力サンプルの予測クラス確率は、森の木の平均予測クラス確率として計算されます」と書かれていますが、私は理解するのに苦労しています。

使用する場合

print rf.predict(testdataset[-1])
[ 6.  6.  6.  6.  6.  6.  6.  6.  6.  6.  6.]

それはあなたが期待するようなものを印刷します-少なくともそれは評価のように見えます-しかし私はまだすべての機能を考慮した単一の予測ではなく機能ごとの予測がある理由を理解していませんか?

4

2 に答える 2

9

ディエゴの答えに加えて:

RandomForestClassifierは、クラスラベル間で順序付けせずに、離散数のクラスのクラス割り当てを予測するための分類子です。

連続的な浮動小数点評価を出力する場合は、RandomForestRegressor代わりになどの回帰モデルを使用してみてください。

たとえば、モデルが予測を出力しないという保証がないため、出力を[0、6]の範囲にクランプする必要がある場合があり6.2ます。

2番目のポイントに答えるために編集predictします。このメソッドは、サンプルのリストを想定しています。したがって、あなたの場合、1つのサンプルのリストを提供する必要があります。試す:

print rf.predict([testdataset[-1]])

または代わりに:

print rf.predict(testdataset[-1:])

その場合、なぜエラーが発生しないのでしょうか。

編集:出力は実際には意味がありません:データセットの形状は何ですか?

>>> print np.asarray(train).shape

>>> print np.asarray(target).shape

>>> print np.asarray(testdataset).shape
于 2013-01-08T10:07:22.833 に答える
3

ドキュメントから、次をpredict_proba返します。

p:形状の配列= [n_samples、n_classes]、またはn_outputs> 1の場合は、そのような配列のn_outputsのリスト。入力サンプルのクラス確率。クラスは算術順序で並べられています。

ここで重要なのは、最後のフレーズ「クラスは算術順序で並べ替えられている」です。私の推測では、トレーニングサンプルの一部のクラスは5未満でpredict_proba、確率はゼロですが、クラス5と6の確率はそれぞれ0.01666667と0.98333333ですが、別の3つのクラス(すべて> 6)の確率もゼロです。

于 2013-01-08T02:51:04.877 に答える