2017-11-21 1 views
0

두 개의 텍스트 파일에 교육 데이터와 해당 레이블 (정수 1,2, ..., 9)이 제공됩니다. 두 텍스트 파일 모두 일련의 숫자입니다.레이블을 기반으로 한 학습 데이터의 하위 집합 추출

트레이닝 세트에서 첫 번째 500 개 번호 I 라벨 2를 훈련 포인트의 서브 세트를 추출하고자, 제 500 개 숫자 등 제 2 데이터 포인트

대응 첫 번째 데이터 포인트에 해당 label 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]]) 

이 작업을 수행하는 더 좋은 방법은 무엇입니까? 실제로 팬더 데이터 프레임으로 사용하는 것을 선호합니다.

+0

당신은 무엇을 (그리고 왜)하는지 설명 할 수 있습니까? 'Xtrain [i * 700 : (i + 1) * 700]'에 삽입 하시겠습니까? – MaxU

+0

아, 그건 Xtrain보다는 Xtrain_old 여야합니다. 내가 뭘 하려는지 : 2 또는 3 각 레이블에 해당 테스트 데이터 (즉, 해당 500 번호)에 액세스하려는 @MaxU – denmarksucks

+0

레이블을 추가 할 수 있습니다, 당신은 간단한 groupby 즉' ndf = pd.concat ([Xtrain_old, ytrain_old], 1)'다음''train = ndf.groupby ('y_train_column_header'). ([2,3])] 나중에 그들을 y_train과 x_train으로 나눌 수 있습니다. – Dark

답변

0

무엇 약 :

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

우선 모두 xtrain과 ytrain을 병합합니다.

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) 

을 우리가 신경 레이블 모든 행을 선택합니다이를 위해 우리는 당신의 X 프레임을 선회 할 필요가

df_selected = df.loc[df['label'].isin([2,3])] 
관련 문제