不知道你是如何分开的,我建议你确保ID
列不包含在您的训练数据中。也许是这样的:
X_train, X_test, y_train, y_test = test_train_split(df.ix[:, ~df.columns.isin(['ID', 'Response'])].values, df.Response)
这将仅拆分 DataFrame 中的值,而不是ID
or Response
为了X
值,并拆分Response
为了y
values.
但您仍然无法使用DecisionTreeClassifier
使用此数据,因为它包含字符串。您将需要转换任何具有分类数据的列,即TypeA
and TypeB
到数字表示。我认为对于 sklearn 来说最好的方法是使用LabelEncoder http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html。使用它将转换分类字符串标签['M', 'S']
into [1, 2]
可以通过以下方式实现DecisionTreeClassifier
。如果您需要一个示例,请查看将分类数据传递给 sklearn 决策树 https://stackoverflow.com/questions/38108832/passing-categorical-data-to-sklearn-decision-tree.
Update
根据您的评论,我现在明白您需要映射回ID
。在这种情况下,你可以利用 pandas 来发挥你的优势。放ID
作为数据的索引,然后进行拆分,这样您将保留ID
所有训练和测试数据的价值。假设您的数据已经在 pandas 数据框中。
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