2017-03-23 4 views
0

나는 numpy를 매우 유용하다. 데이터 집합을 가져 와서 테스트 집합과 그 집합을 작성해야합니다. 데이터 세트가 150 행 4 열 (마지막 열이 레이블) 인 num30 배열 인 경우 데이터 세트가 다를 수 있으므로 올바른은 데이터 집합의 값으로 학습 및 테스트 배열을 채우는 방법은 무엇입니까? - 즉, 테스트 및 트레이닝 세트의 모양을 수동으로 쓰고 싶지는 않습니까?다른 배열의 값으로 2 개의 numpy 배열을 채우는 방법

내가 원하는 것은 분할 값이 제공되면 데이터 집합을 가져 와서 해당 값에 따라 분할 된 데이터 집합 행으로 테스트 및 교육 집합을 채울 것입니다.

는 그래서 같은 방법을 쓸 필요가 :

def split(dataset, value, training, test): 
training = np.array #this is what I am confused about how to define 
test = np.array 
if random.random() < value: 
#this is where I am confused about how to populate the arrays 
    append rows to training 
else: 
    append rows to test 
+0

"분할 가치"란 무엇을 의미합니까? –

답변

1

데이터를 수동으로 분할하려는 경우, 기존 솔루션을 사용하는 것이 좋습니다. 그런 식으로 올바른지 확신 할 수 있습니다 *. 임의 기차 및 테스트 집합에

분할 배열이나 행렬

예를 들어, 데이터를 분할 : Scikit-learncross-validation하거나 분할 훈련의 데이터와 train_test_split 설정 테스트를 수행 할 수있는 다양한 기능을 가지고 기능이 제대로 실현 될 적어도

from sklearn.model_selection import train_test_split 

x = np.random.randn(100, 5) # generate random data 

x_train, x_test = train_test_split(x, train_size=0.8) 

print(x_train.shape) # (80, 5) 
print(x_test.shape) # (20, 5) 

* : 테스트 트레이닝 80 행 및 20 행으로 설정. 그것은 반드시 정확한 기능을 사용할 필요는 없습니다 - 보통 열차와 테스트 세트로 데이터를 분할하는 많은 방법이 있습니다. 일부는 응용 프로그램의 특성에 따라 다른 것보다 더 적합 할 수 있습니다.

+0

고마워요, 이것이 최고의 해결책이었습니다. 기본적으로 내 데이터 집합을 코드에서 x로 전달하고 다음과 같이 나눌 수 있습니다. train, test = train_test_split (data, train_size = split_value) – nanachan

+0

btw cross_validation이 사용되지 않으므로 대신 model_selection을 사용합니다. – nanachan

+0

배우는 scikit의 나의 버전은 약간 나이 들었습니다. 답변 됨, 감사합니다. – kazemakase

0

을 간단히 할 수

n = 4 
m = 120 

data = np.loadtxt('iris.txt') 
train_X = data[:m, :n] 
train_Y = data[:m, n:] 
test_X = data[m:, :n] 
test_Y = data[m:, :n] 
N 입력의 크기입니다

미터 수 같은 훈련 세트의 패턴들. 당신이 기차와 시험에 무작위로 데이터를 분할 할 경우

+1

OP가 열이 아닌 행으로 분할하려고하는 질문을 읽는 방법 :'x_test = data [: n, :]'및'x_train = data [n :, :]', 그러나 열을 따라 나누는 것은 흥미로울 수 있습니다. 레이블에서 기능 분리. – kazemakase

+0

이것은 단지 데이터 세트를 피쳐와 레이블로 나눠 넣기 때문에 입력 값에 따라 데이터 세트를 2 세트로 나눌 필요가 있습니다 ... – nanachan

0

, 다음과 같은 방법으로 작업을 수행 할 수 있습니다

위의 코드에서
import numpy as np 
from sklearn.model_selection import train_test_split 
m=150 
n=4 
data=np.random.randint(5,size=[m,n]) 
X_train, X_test, y_train, y_test = train_test_split(data[:,:n-1], data[:,n-1], test_size=value) 

는 값이 사용됩니다 데이터의 비율을 나타냅니다 테스트 데이터로.

if random.random() < value: 
#this is where I am confused about how to populate the arrays 
    append rows to training 
else: 
    append rows to test 

당신이

data_train=data[data[:,n-1]<value] 
data_test=data[data[:,n-1]>=value] 
0

구현을 할 수있는 것 :

당신은 수정 된 코드에 따라 경우 것 같다있는 임의의 값으로 상대적으로 분할하지하려면 데이터를 교육 및 테스트 세트로 분할하려는 방법에 따라 다릅니다. 부울 마스크를 기반으로 임의로 분할하는 간단한 방법이 있습니다.

data = np.random.rand(150,4) 
mask = np.random.rand(len(data)) < 0.5 #returns a boolean array 
train = data[mask] 
test = data[~mask] 

기차와 시험을 똑같이 50 % 씩 분할합니다. 0.5

관련 문제