经过训练和预测后恢复实例的ID

时间:2018-06-28 09:00:40

标签: python numpy scikit-learn

我有一个数据集,每个样本都有一个ID列,如本例所示:

id score1 score2 score3
1  0.41   0.37   0.04
2  0.19   0.33   0.277
3  0.21   0.33   0.037
4  0.49   0.23   0.378
5  0.51   0.78   0.041

要在此数据上拟合和预测ML分类器,我必须从数据中删除ID列

X = np.array(df.drop(['id'], 1)) 
X_train, X_test = model_selection.train_test_split(X, test_size=0.2)`
clf.fit(X_train)
pred = clf.predict(X_test)

我想知道如何在预测结果中恢复ID,因此可以识别每个样本是否正确分类?因为我已经知道样品的正确标签。或者,是否有一种方法可以在训练中保留ID(可以是数字或非数字)?

我找到了this个相关的问题,但由于他们正在谈论人口普查估算器等其他问题,所以我不明白该怎么办,并且我正在使用numpy和scikit-运行一个非常简单的Python脚本-学习图书馆。

1 个答案:

答案 0 :(得分:0)

您可以使用Pandas的功能来执行此操作。我使用了虹膜数据集,下面的代码运行良好。 label列是实际标签。

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
df = pd.read_csv("ids.csv", sep=",")
clf = LogisticRegression()

X = df
y = df['label']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
X_train_data = X_train.iloc[:,1:5]
X_test_data = X_test.iloc[:,1:5]
clf.fit(X_train_data, y_train)
pred = clf.predict(X_test_data)
sub = pd.DataFrame(data=X_test)
sub['pred'] = pred
sub.head() #Shows the first few rows

结果看起来像这样

id   f1   f2   f3   f4   label  pred
144  6.8  3.2  5.9  2.3   2     2
68   5.8  2.7  4.1  1.0   1     1
10   4.9  3.1  1.5  0.1   0     0
137  6.3  3.4  5.6  2.4   2     2
46   4.8  3.0  1.4  0.3   0     0