0

私は一意の識別子と他の機能を持つデータセットを持っています。これは次のようになりますIDに戻って予測をマップする - Python Scikit Learn DecisionTreeClassifier

ID  LenA TypeA LenB TypeB Diff Score Response 
123-456 51 M  101 L  50 0.2 0 
234-567 46 S  49 S  3 0.9 1 
345-678 87 M  70 M  17 0.7 0 

トレーニングデータとテストデータに分割しました。私はトレーニングデータを訓練したクラシファイアからテストデータを2つのクラスに分類しようとしています。私はの予測をIDにマップすることができるように、トレーニングとテストのデータセットに識別子を入れたいと思います。
Azure ML StudioやSASのようにID列または非予測変数として識別子列を割り当てる方法はありますか?

私はScikit-LearnのDecisionTreeClassifierを使用しています。これは私が分類器に持っているコードです。

from sklearn import tree 

clf = tree.DecisionTreeClassifier() 
clf = clf.fit(traindata, trainlabels) 

私はちょうどtraindataにIDが含まれている場合は、コードでエラーが発生します:

ValueError: invalid literal for float(): 123-456

+0

どのように電車/テストを分割していますか? – Grr

+0

@Grr ..今のところ、半分に分割し、CSVをtraindataとtestdataとして別々に読み込んでいます。 – Minu

答えて

1

あなたの分割が、私はちょうどID列が含まれていないことを確認することを示唆している作られたかを知ることはありませんあなたのトレーニングデータにX値に対するIDResponseでないデータフレームからの値のみを分割し、y値のためResponseを分割します

X_train, X_test, y_train, y_test = test_train_split(df.ix[:, ~df.columns.isin(['ID', 'Response'])].values, df.Response) 

:おそらくこのような何か。

でも、このデータには文字列が含まれているため、DecisionTreeClassifierを使用することはできません。カテゴリデータを持つ列、つまりTypeATypeBを数値表記に変換する必要があります。 Sklearnの私の意見でこれを行う最善の方法はLabelEncoderです。これを使用すると、カテゴリ文字列のラベル['M', 'S']がに変換されます。これはDecisionTreeClassifierで実装できます。例が必要な場合はPassing categorical data to sklearn decision treeをご覧ください。あなたのコメントパー

更新

私は今あなたが戻っIDにマッピングする必要があることを理解しています。この場合、パンダを活用することができます。 IDをデータのインデックスとして設定し、スプリットを実行すると、すべての列車とテストデータの値がIDのままになります。あなたのデータがすでにパンダのデータフレームに入っているとします。

df = df.set_index('ID') 
X_train, X_test, y_train, y_test = test_train_split(df.ix[:, ~df.columns.isin(['Response'])], df.Response) 
print(X_train) 
     LenA TypeA LenB TypeB Diff Score 
ID 
345-678 87  M 70  M 17 0.7 
234-567 46  S 49  S  3 0.9 
+0

これはどのように私がIDに予測をマップするのに役立つでしょうか?上記のコードを使用してtrian_test_split関数を使用してデータを分割すると、データセットにIDは残っていませんか? – Minu

+0

@Minu更新された回答を参照 – Grr

+0

ここで 'clf.predict(X_test)'を実行すると、私の結果はX_testと同じインデックスになりますか?もしそうなら、結果データフレームとX_testデータフレームをインデックスにマージできますか? – Minu

関連する問題