基于标签提取训练数据的子集

时间:2017-11-21 12:48:58

标签: python pandas numpy machine-learning

我在两个文本文件中给出了训练数据及其相应的标签(整数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]])

最好的办法是什么?我更愿意将它作为熊猫数据帧实际使用。

2 个答案:

答案 0 :(得分:0)

首先,我会合并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])]

答案 1 :(得分:0)

怎么样:

List list = web.Lists.GetByTitle("mydoc");