2

私は ML を学んでおりscikit-learn、基本的な決定木分類を行うために使用しています。

機能の値はカテゴリであるためDictVectorizer、元の機能値を変換するために使用しました。これが私のコードです:

training_set # list of dict representing the traing set
labels # corresponding labels of the training set
vec = DictVectorizer()
vectorized = vec.fit_transform(training_set)
clf = tree.DecisionTreeClassifier()
clf.fit(vectorized.toarray(), labels)

with open("output.dot", "w") as output_file:
    tree.export_graphviz(clf, out_file=output_file)

しかし、出力グラフがわかりません。各ノードがマークされたツリーX[1] <= 0.5000などがあります。私が期待したのは、 でマークされたノードFEATURE_1 == VALUE_1un-vectorized情報がツリーに表示されることでした。

出来ますか?

アップデート:

たとえば、 には 、 、のFEATURE_13 つの可能な値Aがあり、これらはそれぞれ、にベクトル化されます。私がグラフに望むのは、代わりにBC0,00,11,0FEATURE_1 == AX[1] <= 0.5

ここに画像の説明を入力

4

4 に答える 4

9

機能名をツリー エクスポータ メソッドに渡すことができます。

with open("output.dot", "w") as output_file:
    tree.export_graphviz(clf, feature_names=vec.get_feature_names(),
                         out_file=output_file)

分類器自体はデータの「意味」を認識せず、連続した数値を処理するだけです。そのため、ベクトライザーを使用してカテゴリ変数をバイナリ変数としてワンホット エンコードする必要があります。[0, 1]すべての実際の値が 0 または 1 であり、その間に何もない範囲。

DictVectorizerがワンホット エンコーディングを行う方法を理解するには、ドキュメントのサンプル スニペットをご覧ください。

于 2013-09-12T08:30:33.033 に答える