1

저는 기계 학습을 처음 사용합니다.train_test_split의 테스트 데이터로 내 모델이 정상적으로 작동하는 데 왜 새 데이터가 없는가?

나는 지속적인 데이터 세트를 가지고있다. 여러 가지 기능을 사용하여 대상 레이블을 모델링하려고합니다. 열차와 테스트 데이터를 분리하기 위해 train_test_split 함수를 사용합니다. 나는 훈련하고 아래 코드를 사용하여 모델을 테스트입니다 :

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) 

model = Sequential() 
model.add(Dense(128, input_dim=X.shape[1], kernel_initializer = 'normal', activation='relu')) 
model.add(Dense(1, kernel_initializer = 'normal')) 
hist = model.fit(X_train.values, y_train.values, validation_data=(X_test.values,y_test.values), epochs=200, batch_size=64, verbose=1) 

내가 X_test을 사용했을 때 좋은 결과를 얻을 수있는 검증 데이터에 대한 y_test 그러나

https://drive.google.com/open?id=0B-9aw4q1sDcgNWt5TDhBNVZjWmc

,이 모델을 사용하는 경우 다른 데이터 (X_real, y_real) (train_test_split에 의해 임의로 선택되지 않는다는 것을 제외하면 X_test 및 y_test와 크게 다르지 않음)를 예측합니다.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) 

model = Sequential() 
model.add(Dense(128, input_dim=X.shape[1], kernel_initializer = 'normal', activation='relu')) 
model.add(Dense(1, kernel_initializer = 'normal')) 
hist = model.fit(X_train.values, y_train.values, validation_data=(X_real.values,y_real.values), epochs=200, batch_size=64, verbose=1) 

https://drive.google.com/open?id=0B-9aw4q1sDcgYWFZRU9EYzVKRFk

과도한 문제입니까? 그렇다면 왜 train_test_split에 의해 생성 된 X_test와 y_test로 내 모델이 정상적으로 작동합니까?

답변

0

"실제 데이터"가 기차 및 테스트 데이터와 다른 것으로 보입니다. 왜 처음부터 "실제"및 "교육"데이터가 있습니까?

내 접근 방식은 다음과 같습니다

1 :

3 데이터 3 세트에서 무작위로으로 나눔 (기차, 테스트 및 검증) : 사용하면

이있는 모든 데이터를 혼합 열차와 시험을 해보고 분류기를 최적화하십시오

4 : 유효성 검사를 통해 분류기의 유효성을 검사하면 과도한 결과가 발생하지 않도록 할 수 있습니다.

+0

죄송합니다. 용어가 좋지 않습니다. 내 정의 "real_data"를 "유효성 검사 데이터"로 간주 할 수 있습니다. 검증 데이터가 필요한 이유는 무엇입니까? "테스트 데이터"가 충분하지 않습니까? 모델이 "테스트 데이터"를 사용해도 "검증 데이터"로 어떻게 실패합니까? "테스트 데이터"를 사용한 결과에는 높은 편차가 있다는 것을 알고 있습니다. 하지만 제 경우에는 코드를 실행할 때마다 테스트 데이터를 확인하는 것이 좋지만 유효성 검사 데이터는 실패합니다. Btw. 내 데이터 세트는 시계열입니다. – Yahya

+0

귀하의 추측은 지나친 문제였습니다. 다른 말로는 테스트 데이터에 맞지 않을 때까지 분류기를 교육합니다. 좋은 결과가 테스트 데이터에만 적용되지 않는다는 것을 확인하기 위해 보이지 않는 데이터를 보관하여 테스트 결과 (즉, 유효성 검사 데이터) 후의 생각대로 100 % 확실하게 분류 할 수 있습니다. 그러나 검증이 나쁘고 테스트가 좋은 분명한 이유는 두 데이터 세트가 서로 다르다는 것입니다. 그래서 질문은 당신이 가지고있는 데이터의 종류와 더 중요한 것입니다 : "실제 데이터"는 무엇이고 당신이 그것을 진짜라고 부르는 이유는 무엇입니까? –

+0

당신 말이 맞아요. 유효성 검사 데이터가 교육 및 테스트 데이터와 다릅니다. – Yahya

0

데이터가 적은 경우 다른 알고리즘을 사용해 보시기 바랍니다. 신경망은 일반적으로 가중치를 올바르게 얻으려면 많은 양의 데이터가 필요합니다. 또한 실제 데이터는 열차 및 테스트 데이터와 동일한 분포에 속하지 않는 것 같습니다. 아무 것도 숨기지 않고 모든 것을 뒤섞 지 마시고 Train/Validation/Test split을 사용하십시오.