트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 40

 

배열 차원 X

> dim(X1)
[ 1 ] 7000      8
X <- array( c(X1,X2), dim=c( 7000 , 8 , 2 ) )

귀하의 경우에는

X <- array( c(X1,...X100), dim=c( 7000 , 8 , 100 ) )
#или, что равнозначно
X <- array( c(X1,...X100), dim=c(dim(X1), 100 ) )

당연히 예제의 개수가 7000이고 변환의 길이가 8이라면.

 

이 "rnn" 패키지는 사용할 제품이라기보다 프로그래밍 연습에 가깝습니다. 더 나은 "RSNNS" 패키지를 참조하십시오.

몇 가지 순환 네트워크가 있습니다. 글쎄, 더 깊이 있다면 파이썬에서 "PyBrain", "keras"

행운을 빕니다

 
감사하다! 나는 이것을 정리할 것이다
 

훈련된 모델의 교차 검증에 이상한 문제가 있습니다. 더 정확하게는 항상 문제가 있다는 것이 밝혀졌지만 나는 눈치 채지 못했습니다.

내 행동은 다음과 같습니다. 올해 유로화에 대한 다양한 지표가 있습니다. 학습/검증/검증을 위해 70%/15%/15%의 비율로 데이터를 행별로 무작위로 나눕니다.

또한 이 데이터에는 9000개의 예측 변수가 포함되어 있습니다. 나는 유전적으로 변이를 분류하고 예측 변수의 각 하위 집합을 기반으로 PCA 모델을 훈련합니다. 훈련 세트에서 모델을 훈련하고 오류를 결정합니다. 두 유효성 검사 샘플에서 동일한 모델을 확인하고 오류를 확인합니다.

피트니스 함수의 최종 결과를 다음과 같이 정의합니다.
max(error_train,error_validate1,error_validate2) - 최소(error_train,error_validate1,error_validate2)
결론은 최소 오류와 최대 오류 간의 차이가 가능한 한 작아야 한다는 것입니다(소위 "Fomenko Criterion" :)).

모든 것이 괜찮은 것 같으며 모델은 세 가지 샘플 모두에서 약 25%의 오류에 도달합니다. 그런데 전면 테스트에서 갑자기 오차가 40%까지 치솟았다. 나는 약간 생각하고 random.seed를 변경하여 행 샘플(예측자가 아닌 행)을 생성하고 이전에 정의된 예측자 세트(가장 좋은 것)에 대해 이미 25% / 35% / 훈련/검증/검증 오류를 받았습니다. 25% / 25%/25% 대신 35%, 전면 테스트의 경우 다시 동일한 40%입니다. 검증 샘플의 오류가 +10% 증가하여 매우 나쁩니다.

즉, 유전학은 특정 훈련 및 특정 검증 샘플에 대한 예측 변수의 가장 좋은 변형을 찾는 것으로 나타났습니다. 다른 순서로 샘플 전체에 행을 분산시키면 훈련된 예측 모델이 더 이상 동일한 예측 변수에서 적절하게 작동하지 않습니다.

훈련된 모델이 샘플 전체의 행 분포에 대해 거의 동일한 오류를 제공하도록 이를 처리하는 표준 방법이 있습니까? 이것은 심각한 문제입니다. 예를 들어, 유전학의 모든 세대에 걸쳐 훈련 및 검증 샘플을 다시 생성할 수 있습니다. 또는 두 개의 다른 행별 샘플 세트를 만들고 두 개의 PCA 모델을 훈련시킨 다음 적합성 함수에 대해 최악의 결과를 취합니다. 말이 되나요?

 
Dr.Trader :

훈련된 모델의 교차 검증에 이상한 문제가 있습니다. 더 정확하게는 항상 문제가 있다는 것이 밝혀졌습니다. 나는 단지 눈치 채지 못했습니다.

(소위 "Fomenko 기준" :)).

기준이 정말 마음에 들었습니다. 고맙습니다.

그러나 그것은 당신에 의해 완전히 설명되지 않습니다.

내 기준에는 전면 테스트가 포함되어야 합니다(SHOULD). 내 모든 게시물을 보면 항상 전면 테스트에 대해 썼습니다. 내 아이디어에 따르면 처음 세 세트에서 시간별로 (색인별로) 분리 된 관찰에 대해 수행해야합니다.

나는 당신이 한 것처럼 제공된 세트를 나눕니다. 당신은 좋은 데이터를 얻었고, 나는 세 가지 샘플 모두에서 10% 미만을 얻었고, 그런 다음 새 파일을 가져갔고 당신의 40% 오류는 여전히 좋은 결과입니다! 나는 더 나빠졌다.

따라서 내 과적합 기준은 다음과 같습니다.

1. 임의의 트릭 없이 순전히 기계적으로 인덱스의 오름차순으로 초기 세트를 두 부분으로 나눕니다.

2. 무작위 방법으로 첫 번째 부분을 학습 테스트와 검증의 세 부분으로 나눕니다.

3. 이 세 부분에서 오류가 거의 같으면 4단계로 이동합니다.

4. 두 번째 부분에서 훈련된 모델을 실행합니다. 오류는 다시 거의 같아야 합니다. 거래할 때 항상 훈련 샘플 외부에서 거래하고 막대 단위로 일관되게(임의가 아닌) 얻기 때문에 이것은 중요합니다.

4개 점 모두에 대해 거의 동일한 오류가 발생하면 모델이 재학습되지 않습니다.

상당한 불일치가 있는 경우 모델이 다시 학습되며 그 이유는 원래 세트에 잡음 예측자가 있기 때문입니다. R에서는 노이즈를 제거할 수 있는 도구를 찾지 못했습니다. 내 홈브류가 있습니다. 여기에 PCA에 대한 또 다른 기사가 있습니다.

 
mytarmailS :

안톤 즈베레프  

그런 어조로 의사 소통하지 말자. 여기 경험을 배우고 공유하며 서로 도울 준비가 된 사람들이 있으며, 당신은 소문의 입장을 취하고 여기에서 당신은 바보이고 모든 것을 알고 있습니다), 더 나은 이해를 도와주세요 당신의 의견과 경험에

VR을 제공하는 것만으로는 충분하지 않다는 데 동의합니다. 정보를 최대한 압축하고 올바른 결정을 내리는 데 방해가 되는 초과분을 버려야 합니다. 우리는 10개의 지표(믿지 않음)를 가지고 있으며 그 중 9개를 걸러냈습니다. 예를 들어 RSI만 남겨두고 정보를 압축했지만 ind에는 여전히 값 범위가 있기 때문에 충분하지 않습니다. 그리고 그것은 -70에서 70 사이의 값에서 절대적으로 작동하지 않는 것으로 밝혀졌으므로 여기에서도 압축 등을 해야 합니다. 문제는 그것을 수행하는 방법입니다.

이에 대한 생각이 있지만 그런 선택자를 구현하기에는 아직 지식이 충분하지 않습니다 ...

내 첫 번째 시도는 꽤 오래 전에 현재 가격에서 되돌아가 과거에 거의 동일한 상황을 찾은 다음 이러한 상황을 결과, 종료 방법, 예를 들어 현재 상황으로 정렬했습니다. 10 과거에 아날로그가 발견되었습니다. 8 아날로그는 가격 인상으로 끝났고 2는 하락으로 끝났으므로 증가 할 것입니다 ... 그러나 공포))) 모든 것이 반대로 판명되었다는 것입니다. 가격은 자주 그리고 구매 측의 강한 편향으로 이러한 상황에서 크게 떨어졌고 종종 다시 테스트를 거쳤습니다.

그런 다음 일종의 지표를 구현하고 구매에 대한 모든 예측의 누적 합계와 마을에 대한 합계를 취하여 그 차이를 플롯하고 특정 지수를 얻었습니다. 가격과 비교했을 때 거의 반대되는 것으로 나타났습니다. 가격, 상관 관계는 -0.7 ~ -0.9였습니다. 단순히 시장이 자체 통계와 반대되는 경우 생각하고 다시 생각할 것이 있습니다.

닥터 트레이더에게

이해에 조금이나마 도움이 되실지도...

이 영향을 확인하는 더 빠르고 쉬운 방법을 찾았습니다. 관심이 있다면 이에 대해 더 쓸 수 있습니다.

 
산산이치 포멘코 :

4. 두 번째 부분에서 훈련된 모델을 실행합니다. 오류는 다시 거의 같아야 합니다. 거래할 때 항상 훈련 샘플 외부에서 거래하고 막대 단위로 일관되게(임의가 아닌) 얻기 때문에 이것은 중요합니다.

오류가 발생했습니다. 감사합니다. 2개가 아니라 3개의 검증 샘플이 있는 것으로 나타났습니다. 그 중 하나는 무작위성 없이 소스 파일의 마지막 레코드에서 엄격하게 가져옵니다. 나머지 샘플은 무작위입니다. 나는 노력할 것이다.

나는 한 번 유효성 검사를 위해 훈련 파일의 첫 번째 부분을 가져오려고 시도했습니다. 또한 인덱스에 의해서도 무작위성이 없었습니다. 훈련된 모델이 훈련 기간 전에 데이터에 작은 오류를 표시하면 훈련 기간 후에 데이터에 유사한 오류가 표시된다는 아이디어였습니다. 모든 것이 잘못된 것으로 판명되었으며 훈련 기간 전과 훈련 기간 후의 오류는 전혀 상관 관계가 없었습니다.

mytarmails :

그런 다음 일종의 지표를 구현하고 구매에 대한 모든 예측의 누적 합계와 마을에 대한 합계를 취하여 그 차이를 플롯하고 특정 지수를 얻었습니다. 가격과 비교했을 때 거의 반대되는 것으로 나타났습니다. 가격, 상관 관계는 -0.7 ~ -0.9였습니다. 단순히 시장이 자체 통계와 반대되는 경우 생각하고 다시 생각할 것이 있습니다.

이 방법은 시간 간격에 관계없이 항상 효과가 있습니까? 물론 이상하게 보이지만 가장 중요한 것은 작동한다는 것입니다. 나는 내 훈련이 부족한 모델에 대해 비슷한 관찰을 했습니다. 때로는 실제 결과와 정반대의 예측 결과를 제공하기도 했습니다. 그러나 때로는 모든 것이 올바르게 작동했습니다. 매우 긴 테스트에서 모델을 훈련하고 다른 시간 간격으로 테스트하면서 평균적으로 50%의 경우에서 정답을 제공한다는 것을 깨달았습니다. 즉, 의미가 없으며 예측을 위해 동전을 던질 수 있고 같은 결과를 얻습니다. 그 후, 나는 모델이 다른 많은 모델의 역전, 필터링, 집합적 결정 없이 올바른 결과를 제공해야 한다는 것을 올바르게 받아들였습니다. 그렇지 않으면 혼돈과 무작위성이 지배하는 함정에 빠질 수 있습니다.

 
트레이더 박사 :

이 방법은 시간 간격에 관계없이 항상 효과가 있습니까? 물론 이상하게 보이지만 가장 중요한 것은 작동한다는 것입니다. 나는 내 훈련이 부족한 모델에 대해 비슷한 관찰을 했습니다. 때로는 실제 결과와 정반대의 예측 결과를 제공하기도 했습니다. 그러나 때때로 - 모두가 올바르게 작동했습니다. 매우 긴 테스트에서 모델을 훈련하고 다른 시간 간격으로 테스트하면서 평균적으로 50%의 경우에서 정답을 제공한다는 것을 깨달았습니다. 즉, 의미가 없으며 예측을 위해 동전을 던질 수 있고 같은 결과를 얻습니다. 그 후, 나는 모델이 다른 많은 모델의 역전, 필터링, 집합적 결정 없이 올바른 결과를 제공해야 한다는 것을 올바르게 받아들였습니다. 그렇지 않으면 혼돈과 무작위성이 지배하는 함정에 빠질 수 있습니다.

예, 항상, 그리고 모든 시간 간격(그러나 샘플링에는 뉘앙스가 있음)에서 출력은 가격의 거의 정확한 사본이지만 역 상관 관계가 있습니다. 네트워크가 학습하고 무엇을 기대할 수 있는지에 따라 몇 가지 결론을 도출할 수 있습니다.

1) 이것은 가장 일반적인 상황입니다. 네트워크가 역 상관 관계가 있으면 역으로 학습되었음을 의미합니다. 옳지 않을까요?

2) 그냥 무작위 - 네트워크가 아무 것도 학습하지 않았음을 의미합니다.

3) 네트워크는 시장과 함께 움직입니다(비표준적인 목표에서만 이 효과를 얻을 수 있었습니다) - 이것은 모든 것이 순조롭다는 것을 의미합니다

4) 그리고 가장 중요한 결론 (이것은 D.Trader에게 중요합니다.) 신경망에 대한 예측을 작성하고 결론 1번과 반대 방향으로 간다면 최적화, 유전학, 교차 검증 및 기타 기쁨은 당신이 그것에 대해 생각하는 데 절대적으로 도움이 될 것입니다. 그것은 논리적이고 명백합니다.

 
mytarmailS :

1) 이것은 가장 일반적인 상황입니다. 네트워크가 역 상관 관계가 있으면 역으로 학습되었음을 의미합니다. 옳지 않을까요?

4) 그리고 가장 중요한 결론 (이것은 D.Trader에게 중요합니다.) 신경망에 대한 예측을 작성하고 결론 1번과 반대 방향으로 간다면 최적화, 유전학, 교차 검증 및 기타 기쁨은 당신이 그것에 대해 생각하는 데 절대적으로 도움이 될 것입니다. 그것은 논리적이고 명백합니다.

1) 다른 훈련 간격에서 안정적인 역상관, 이것은 약간 이상하지만 네트워크가 무언가를 배웠고 결과가 좋다는 데 동의합니다.

4) 그러나 나는 이에 동의하지 않습니다. 이진 분류가 사용되는 경우(목표 변수 "0" 또는 "1"), 유전학 또는 옵티마이저의 적합성 함수를 쉽게 변경하여 "역" 결과를 얻을 수 있습니다. 1에서 현재 결과를 빼기만 하면 됩니다.
예를 들어, 유전학은 특정 예측 변수 집합을 선택합니다. 뉴런을 훈련시키고 교차 검증을 수행하고 평균 오차를 찾습니다. 오류는 0.4라고 가정해 보겠습니다. 적합성 함수의 "역" 결과는 1-0.4 = 0.6으로 정의할 수 있습니다. 유전학은 예측 변수를 0.6에서 0으로 열거하여 오류를 줄이려고 합니다. 결과적으로 적합도 함수 값이 0인 예측변수 집합을 얻게 되지만 이는 뉴런의 실제 오차가 0 + 1 = 1임을 의미합니다. 그리고 이것은 역상관관계입니다.
일반적으로 동일한 유전 알고리즘 및 교차 검증으로 뉴런을 훈련시켜 필요한 결과와 반대의 결과를 제공하는 것이 가능합니다. 결과는 귀하의 것과 유사하지만 의도적으로 나타납니다. 그러나 이것을 하는 이유가 명확하지 않습니까? :)

또한 대상 변수 "0" 및 "1"을 사용하는 이진 분류에서 최악의 오류는 0.5라고 덧붙입니다.
오류 == 0이 좋습니다.
오류 == 1 이것은 역 상관 관계가 있는 뉴런입니다. 결과를 뒤집을 수 있으며 괜찮을 것입니다. 그러나 이것이 왜 일어났는지 이해하는 것이 더 낫습니다. 이것은 매우 비정형적인 상황입니다.
0.5의 오류는 결과가 완전히 무작위이고 모델이 일반적으로 쓸모가 없다는 것을 의미합니다.

 

하나

사유: