【问题标题】:Recovering instances' IDs after training and prediction在训练和预测后恢复实例的 ID
【发布时间】:2018-07-06 01:06:01
【问题描述】:

我有一个数据集,每个样本都有一个 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 相关问题,但我不明白该怎么做,因为他们在谈论人口普查估算器等其他东西,我正在运行一个非常简单的 Python 脚本,其中包含 numpy 和 scikit-learn 库.

【问题讨论】:

    标签: python numpy scikit-learn


    【解决方案1】:

    您可以使用 Pandas 的功能来执行此操作。我使用了 iris 数据集,下面的代码运行良好。 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
    

    【讨论】:

    • 太棒了!非常感谢你;),我试图接受你的回答,但我没有足够的声誉。
    • 太棒了。那就请点赞吧。并在获得足够的声誉后接受。谢谢。 :)
    • 我什至无法投票 -_- 下次当我获得一些声誉时,我会回到这里,我会投票并接受它:D
    • 我看到他再也没有回来接受...但这是另一个赞成票。
    • 狂野的骑行,但他最终还是接受了:+1,这是一个赞成票
    猜你喜欢
    • 2019-07-15
    • 2017-11-06
    • 2021-02-22
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2017-01-15
    • 2020-12-29
    相关资源
    最近更新 更多