【问题标题】:Extracting subset of training data based on label基于标签提取训练数据的子集
【发布时间】:2017-11-21 12:48:57
【问题描述】:

我在两个文本文件中获得了训练数据及其对应的标签(整数 1,2,...,9)。两个文本文件都是数字序列。

训练集中的前500个数字对应第一个数据点,后500个数字对应第二个数据点,以此类推

我想提取具有标签 2 或标签 3 的训练点子集。我的实现非常慢:

import numpy as np

ytrain_old = np.genfromtxt('TrainLabels.txt')
Xtrain_old = np.genfromtxt('Train.txt')

Xtrain = []
ytrain = []

for i in range(10000):
    if (ytrain_old[i]==2) or (ytrain_old[i]==3):
        ytrain.append(ytrain_old[i])
        Xtrain.append([Xtrain_old[i*500:(i+1)*500]])

有什么更好的方法来做到这一点?实际上,我更愿意将其作为 pandas 数据框。

【问题讨论】:

  • 你能解释一下你在Xtrain[i*700:(i+1)*700]做什么(以及为什么)吗?
  • 哦,那应该是 Xtrain_old 而不是 Xtrain。我想要做的是:对于每个 2 或 3 的标签,我想访问相应的测试数据(即相应的 500 个数字)@MaxU
  • 你能添加标签吗,你可以使用简单的 groupby 来做到这一点,即ndf = pd.concat([Xtrain_old,ytrain_old],1) 然后train = ndf.groupby('y_train_column_header').head(500) 然后一个布尔索引train = train[train['y_train_column_header'].isin([2,3])] 稍后你可以将它们拆分为 y_train 和 x_train。
  • 谢谢@Bharath。我必须如何加载 .txt 文件才能使串联工作?使用 np.genfromtxt 不起作用。
  • 你可以使用pd.read_csv() 会好很多。这可能会帮助stackoverflow.com/questions/21546739/…

标签: python pandas numpy machine-learning


【解决方案1】:

怎么样:

sel = np.logical_or(ytrain_old == 2, ytrain_old == 3)
Xtrain = Xtrain_old.reshape((-1,500))[sel]
ytrain = ytrain_old[sel]

【讨论】:

    【解决方案2】:

    首先,我会合并 xtrain 和 ytrain。为此,我们需要旋转您的 x 框架:

    xtrain_old = pd.Series(np.random.random(10000)).to_frame()
    ytrain_old = pd.Series(np.random.randint(5, size=20))
    
    xtrain_old['column_names'] = 'feature_'+ (xtrain_old.index%500).astype(str)
    xtrain_old.index = np.floor(xtrain_old.index/500).astype(int)
    xtrain_old = xtrain_old.pivot(columns='column_names')
    xtrain_old.columns = xtrain_old.columns.droplevel()
    

    现在我们可以合并标签了:

    ytrain_old = ytrain_old.rename('label')
    df = pd.concat([xtrain_old, ytrain_old], axis=1)
    

    并选择所有带有我们关心的标签的行:

    df_selected = df.loc[df['label'].isin([2,3])]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2020-03-09
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      相关资源
      最近更新 更多