Min*_*inu 3 python classification decision-tree scikit-learn valueerror
我有一个具有唯一标识符和其他功能的数据集。看起来像这样
Run Code Online (Sandbox Code Playgroud)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
我把它分成训练和测试数据。我试图从训练数据训练的分类器中将测试数据分为两类。我想要训练和测试数据集中的标识符,以便我可以将预测映射回 IDs。
有没有一种方法可以像我们在 Azure ML Studio 或 SAS 中所做的那样,将标识符列分配为 ID 或非预测变量?
我正在使用DecisionTreeClassifier来自 Scikit-Learn 的。这是我的分类器代码。
from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf = clf.fit(traindata, trainlabels)
Run Code Online (Sandbox Code Playgroud)
如果我只是将 ID 包含到 中traindata,则代码会引发错误:
ValueError: invalid literal for float(): 123-456
不知道您是如何进行拆分的,我建议您确保该ID列不包含在您的训练数据中。可能是这样的:
X_train, X_test, y_train, y_test = test_train_split(df.ix[:, ~df.columns.isin(['ID', 'Response'])].values, df.Response)
Run Code Online (Sandbox Code Playgroud)
这将仅拆分来自 DataFrame的值,而不是在值中ID或值中,并为值拆分。ResponseXResponsey
但是您仍然无法将 用于DecisionTreeClassifier此数据,因为它包含字符串。您需要将具有分类数据的任何列(即TypeA和 )TypeB转换为数字表示形式。在我看来,对 sklearn 执行此操作的最佳方法是使用LabelEncoder. 使用它会将分类字符串标签['M', 'S']转换[1, 2]为可以使用DecisionTreeClassifier. 如果您需要示例,请查看将分类数据传递给 sklearn 决策树。
更新
根据您的评论,我现在明白您需要映射回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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4698 次 |
| 最近记录: |