기고글 토론 "랜덤 포레스트로 추세 예측하기" - 페이지 10

 
TheXpert:

오버트레이닝은 잘 정립된 매우 구체적인 용어입니다. 당신은 그것을 대체하고 있을 뿐만 아니라 그것이 무엇인지 설명하지 않고 있습니다.

커뮤니케이션 방식에서 술턴(Sulton)을 많이 떠올리게 합니다.

모델 훈련은 모델이 훈련 샘플뿐만 아니라 훈련 샘플 외부에서도 발생하는 현지 전문 용어 "패턴"에서 프로세스의 본질을 추출하는 것입니다.

과트레이닝(과적합)은 모델이 훈련 샘플 외부에 존재하지 않는 임의성을 선택하기 시작하고 이로 인해 모델이 훈련 오류와 매우 다른 오류 값을 제공하는 경우입니다.

테스터의 최적화를 통해 과트레이닝된 EA를 얻는 것은 매우 쉽기 때문에 이 포럼의 많은 사람들이 과트레이닝에 직면한 적이 있을 것입니다(어쩌면 모르고 있었을 수도 있습니다).

하지만 이것은 모두 철학입니다.

현실은 특정 기술, 이 과정에서 사용되는 도구에 있습니다.

제 기사와 책을 통해 저는 과잉 훈련 문제를 해결하려는 것이 아니라 예측 모델의 세계에 대한 문을 열려고 할 뿐이며, (모델은) 미래에 양질의 것을 예측하도록 가르칩니다. 존경하는 gpwr이 몇 시간을 보낸 후 Rattle을 실행했다면, 그의 질문은 내 글을 읽지 않고도 그 내용에 대한 의견을 가지고 있다는 것을 보여주지 않고도 훨씬 더 많은 내용을 담고 있었을 것입니다. 하지만 가장 중요한 것은 Rattle이 표본 외 모델의 성능, 중요한 예측 변수 목록, 발견된 패턴의 수를 추정하는 등 매우 복잡한 모델을 만드는 전체 프로세스를 다룬다는 점입니다(.....). 실제 모델은 다르지만 저는 여전히 Rattle을 사용하고 있습니다. 아이디어를 테스트해 보세요..... 20~30분만 투자하면 개발 방향이 급격하게 바뀔 수 있습니다.

매우 제한적인 목표입니다.

기사와 책 외에도 유료 서비스를 제공합니다. 그리고 내가 광고 된 작업 목록을 수행하는 데 필요한 자격이 있는지 결정하는 것은 모든 사람에게 달려 있습니다. 그리고 저는 특정 주문을 받기 전에 고객이 제 노동의 결과를 이해할 수 있는지 여부를 결정합니다.

파일:
PredictTrend.zip  858 kb
 
faa1947:


1. 다소 큰 예측자 집합을 형성합니다 (예 : 막대 15000 개가있는 50 개).

2. 위의 알고리즘 중 하나를 사용하여 이 15,000개의 막대에서 예측자를 선택합니다. 일반적으로 15~20개 정도를 얻는데, 이 예측자는 20%의 경우보다 모델 구축에 더 자주 사용됩니다.

3. 그런 다음 더 작은 창(예: 2000개 막대)을 사용하여 한 번에 한 막대씩 이동하면서 이전에 선택한 50개 중 20개에서 중요한 예측 변수를 선택합니다.

4. 유의미한 예측 변수의 구체적인 목록은 항상 변경됩니다.


1. 어떻게? 60년간의 일일 기록이 필요하신가요?

2. 당신은 미래를 들여다보고 있습니다. 전체 기록에서 15-20개의 예측 변수를 선택한 다음 동일한 15000개의 "훈련되지 않은" 샘플에서 이를 확인한다고요? 누군가 오늘 저에게 미래에 어떤 15-20개의 예측 변수가 "샘플링"될지 알려준다면 억만장자가 되기 위해 다른 것은 필요하지 않을 것입니다.

저는 MatLab을 사용합니다. 거기에는 다양한 도구 상자가 있습니다. 따라서 제가 여러분의 방법을 모른다고 가정할 필요는 없습니다. 제가 피상적이거나 허술한 접근법을 가지고 있다고 가정할 필요도 없습니다(저는 단지 여러분의 접근법에 대해 그렇게 생각합니다). 사람마다 다른 패키지와 도구 상자를 사용할 수 있습니다. 하지만 모든 사람이 그 본질을 이해할 수 있는 것은 아닙니다. 그리고 귀사의 서비스를 광고하고 저에게 예약할 필요는 없습니다. 제 문제는 오버트레이닝의 정의보다 훨씬 더 복잡합니다. 저는 1만 개의 경제 지표-예측 지표를 가지고 있는데, 시장에 영향을 미치는 지표를 선택하기가 매우 어렵습니다. 각 예측자를 개별적으로 검토하면 위의 예와 같이 목표 계열이 예측자 중 하나와 일치하지 않지만 이 예측자가 목표 계열의 모델에 포함되어 있는 상황을 놓칠 수 있습니다. 서로 다른 예측자의 가능한 모든 조합을 검토하면 시간이 충분하지 않습니다. 10,000개 중 두 개의 예측자를 검색하는 데도 일주일 이상 걸립니다. 지금까지 저는 생물학적 자가 가지치기 네트워크(설명하는 데 시간이 오래 걸리므로 이해하려면 약간의 훈련이 필요합니다)를 통해 N개의 관련 변수를 선택했습니다. 이 네트워크는 가능한 모든 예측 변수 조합을 검색하는 것보다 빠르지만 여전히 느립니다. 따라서 제 예제에서 y와 x1만 보고 x1이 y 모델의 일부라는 것을 알아내는 기발한 아이디어가 있다면 금메달을 드리도록 하겠습니다.

 
gpwr:

1. 어때요? 60년 동안의 일일 기록이 필요하다고요?

2. 당신은 미래를 들여다보고 있습니다, 존경하는 분. 전체 기록에서 15-20개의 예측 변수를 선택한 다음 동일한 15000개의 "훈련되지 않은" 샘플에서 이를 확인한다고요? 누군가 오늘 저에게 미래에 어떤 15-20개의 예측 변수가 "샘플링"될지 알려준다면 억만장자가 되기 위해 다른 것은 필요하지 않을 것입니다.

저는 MatLab을 사용합니다. 거기에는 다양한 도구 상자가 있습니다. 따라서 제가 여러분의 방법을 모른다고 가정할 필요는 없습니다. 또한 제가 피상적이거나 부지런한 접근 방식을 가지고 있다고 가정할 필요도 없습니다(여러분의 접근 방식에 대해 제가 생각하는 것과 정확히 일치합니다). 사람마다 다른 패키지와 도구 상자를 사용할 수 있습니다. 하지만 모든 사람이 그 본질을 이해할 수 있는 것은 아닙니다. 그리고 귀사의 서비스를 광고하고 저에게 예약할 필요는 없습니다. 제 문제는 오버트레이닝의 정의보다 훨씬 더 복잡합니다. 저는 1만 개의 경제 지표-예측 지표를 가지고 있는데, 시장에 영향을 미치는 지표를 선택하기가 매우 어렵습니다. 각 예측 변수를 개별적으로 살펴보면 위의 예와 같이 목표 계열이 예측 변수 중 하나와 일치하지 않지만 이 예측 변수가 목표 계열의 모델에 포함되어 있는 상황을 놓칠 수 있습니다. 서로 다른 예측자의 가능한 모든 조합을 검토하면 시간이 충분하지 않습니다. 10,000개 중 두 개의 예측자를 검색하는 데도 일주일 이상 걸립니다. 지금까지 저는 생물학적 자가 가지치기 네트워크(설명하는 데 시간이 오래 걸리므로 이해하려면 약간의 훈련이 필요합니다)를 사용하여 N개의 관련 변수를 선택했습니다. 이 네트워크는 가능한 모든 예측 변수 조합을 검색하는 것보다 빠르지만 여전히 느립니다. 따라서 제 예제에서 y와 x1만 보고 x1이 y 모델의 일부임을 확인하는 방법에 대해 좋은 아이디어가 있으시다면 좋은 아이디어를 알려드리겠습니다.

1. 어때요? 60년간의 일일 기록이 필요하신가요?

과장하지 말자.

저는 외환 분야에서 일합니다. 저는 추세를 예측하고 50~100핍 반전이 있는 추세에 상당히 만족합니다. 이를 위해 일일 내역은 필요하지 않습니다. 제 예에서 이것은 상반기이고 18000은 3년입니다.

2. 미래를 내다보시는군요, 존경하는 분. 전체 히스토리에서 15~20개의 예측 변수를 선택한 다음 동일한 15000개의 "훈련되지 않은" 샘플에서 테스트합니까?

이미 설명했습니다. 제가 개인적으로 설명하는 내용을 읽어보시는 것이 매우 바람직합니다. 저는 미래를 내다보지 않습니다. 성능은 항상 샘플에서 벗어날 수 있습니다. 제가 원한다고 해도 래틀은 당신이 제안한 다른 가능성을 제공하지 않습니다.

저는 오버트레이닝을 정의하는 것보다 훨씬 더 복잡한 문제가 있습니다. 1만 개의 경제 지표-예측 변수가 있는데, 시장에 영향을 미치는 변수를 선택하는 방법은 매우 어렵습니다. 각 예측 변수를 개별적으로 살펴본다면,

완전한 검색이란 있을 수 없습니다. 랜덤 포레스트는 예측 변수의 수가 수천 개로 측정될 때 가장 잘 작동하는데, 저는 5만 개라는 수치를 본 적이 있습니다. 제 데이터의 수치는 다음과 같습니다: 90개의 예측자, 10000개의 행(막대) - 하나의 코어에서 모델 학습 시간 약 1분. 결과: 클래스 레이블, 클래스 레이블의 확률, 모델 구축에서 각 예측자의 중요도.

이 네트워크는 가능한 모든 예측자 조합을 검색하는 것보다 빠릅니다,

예측자 검색이 없습니다. 알고리즘은 다음과 같습니다. 트리 노드에 있는 예측자 수라는 매개변수가 있으며, 이를 기준으로 분류에 대한 결정이 내려집니다. 직접 설정할 수 있으며, 기본값은 sqrt입니다(최대 예측자 수는 90개입니다). 대략 각 노드에 9개의 예측자가 사용됩니다. 알고리즘은 트리의 각 노드를 고려할 때 항상 9개의 예측자를 사용하지만, 항상 총 수=90에서 무작위로 선택합니다. 교차 검증을 통해 최종적으로 가장 중요한 예측자가 선택되어 최종 트리 구성에 사용됩니다.

PS.

왜 R을 사용하지 않나요? 유료인 경우 SAS....

Matlab은 전문 통계 패키지에 속하지 않습니다.

 
예측자를 선택하는 데 수고를 아끼지 않는 이유를 설명해 주세요. 결국, 최신 알고리즘은 대부분의 예측자가 무작위라 하더라도 수천 개의 예측자를 처리할 수 있습니다. 이 경우 모델은 신뢰할 수 있습니다.
 
CyberCortex:
예측자를 선택하는 데 수고를 아끼지 않는 이유를 설명해 주세요. 결국, 최신 알고리즘은 대부분의 예측자가 무작위라 하더라도 수천 개의 예측자를 처리할 수 있습니다. 그리고 모델은 신뢰할 수 있습니다.

안타깝게도 그렇지 않습니다. 적어도 제 경우에는 그렇지 않습니다.

저는 예측자 선택 알고리즘을 알지 못하며(수십 개의 선택 알고리즘을 알고 있지만), 그 이후에는 (알고리즘의) 모델 과잉 훈련이 배제됩니다.

"쓰레기 투입-쓰레기 배출"이라는 통계의 오래된 규칙이 여전히 적용됩니다.

 
faa1947:

안타깝게도 그렇지 않습니다. 적어도 저에게는요.

저는 어떤 예측자 선택 알고리즘도 알지 못하며(수십 가지 선택 알고리즘을 알고 있지만), 그 작업 후에 모델의 과잉 훈련이 배제되는 알고리즘을 알고 있습니다.

"쓰레기 투입-쓰레기 배출"이라는 통계의 오래된 규칙이 여전히 적용됩니다.

글쎄요, 제 프로그램을 테스트해 봤는데 괜찮아 보입니다.

다른 자료에서 제가 쓴 글을 인용해도 될까요? "여기에서 가져온 데이터로 프로그램의 정확성을 테스트했습니다:

http://archive.ics.uci.edu/ml/index.html

(기계 학습 및 지능형 시스템 센터 사이트).

이 경우 건강한 사람과 암 환자의 혈액 분석 데이터를 사용했습니다. 가설은 이들의 분석을 바탕으로 사람의 암을 예측할 수 있는 모델을 구축하는 것이었습니다. 두 가지 클래스(아프다-아프지 않다)로 분류해야 했습니다.

훈련 예제의 길이는 10000개의 특징이었습니다. 이 중 3000개는 분류 품질을 테스트하기 위해 특별히 추가한 무작위 예제였습니다. 훈련 샘플에는 총 100개의 예가 사용되었는데, 이는 의심할 여지 없이 매우 적은 수이지만 더 많은 예는 찾을 수 없었습니다. 테스트 중에는 100개 정도의 다른 예시도 사용했습니다.

http://archive.ics.uci.edu/ml/datasets/Arcene

(원본 데이터가 있는 아카이브 링크).

익숙하지 않은 데이터에 대한 인식 정확도는 75%였습니다. 학습할 데이터가 더 많다면 예측의 정확도를 크게 높일 수 있을 것이라고 확신합니다." 인용문 끝.

참고: 알고리즘의 학습 시간은 예측자의 수에 따라 기하급수적으로 증가하지 않기 때문에 8코어 프로세서와 8Gb 메모리를 갖춘 PC에서 약 2분 정도 걸렸습니다. 그리고 정보가 없는 예측자는 자동으로 사용되지 않습니다.

관심이 있으신 분은 다음 링크를 참조하세요: cybercortex.blogspot.ru(광고라고 생각하지 마세요).

 
CyberCortex:

모르겠어요, 프로그램을 테스트했는데 모든 것이 정상인 것 같습니다.

다른 자료에서 제가 쓴 글을 인용해도 될까요? "여기에서 가져온 데이터로 프로그램의 정확성을 테스트했습니다:

지표와 같은 공식적인 수학적 값이 사용됩니다. 그리고 결과적으로 다양한 종류의 쓰레기를 모델에 포함시키는 것은 매우 쉬우며 "쓰레기 유입-쓰레기 배출"이라는 규칙이 작동하기 시작합니다.

모델에 쓰레기 예측자, 즉 목표 변수에 약한 영향을 미치는 예측자를 포함하면 훈련 샘플에서는 모든 것이 괜찮지만 샘플 외부에서 문제가 발생하는 모델의 과훈련으로 이어집니다.

 
faa1947:

문제를 보여줄 수 있는 훌륭한 전형적인 예가 있습니다.

1. 표면적으로는 예시와 달리 모든 금융 계열은 값의 순서가 중요한 소위 시계열에 속한다는 사실이 있습니다. 따라서 금융 시장의 모델은 의학의 모델과 달리 이러한 뉘앙스를 고려해야 합니다.

2. 그러나 훨씬 더 심각한 상황이 있으며 이는 질문의 주제와 직접 관련이 있습니다.

의학에서 "아프지 않다"는 질문의 해결책은 진단을 의미하며, 이것은 모든 의학의 절반입니다. 많은 사람들이 우리의 용어에서 "예측 인자"를 연구하고 정당화하고 찾고 있으며,이 연구자들에 따르면 "아프다 또는 아프지 않다"라는 평결과 관련이 있습니다. 외환에서는 그런 것을 찾아볼 수 없습니다. 주식 시장에서는 경제적 원인과 움직임의 방향 사이의 관계에 대한 연구가 일반적이지만 일중 구간에는 적용되지 않습니다.

따라서 일중 구간에서 머신러닝 모델을 구축할 때는 지표와 같은 공식적인 수학적 값이 사용됩니다. 그리고 결과적으로 다양한 종류의 쓰레기를 모델에 포함시키는 것은 매우 쉬우며 "쓰레기 유입-쓰레기 배출"이라는 규칙이 작동하기 시작합니다.

모델에 쓰레기 예측자, 즉 목표 변수에 약한 영향을 미치는 예측자를 포함하면 훈련 샘플에서는 모든 것이 정상이지만 샘플 외부에는 문제가있는 모델의 재 훈련으로 이어집니다.

1. "모든 재무 계열은 소위 시계열에 속하며, 여기서 값의 순서가 중요합니다." - 아무도 이것을 부정하지 않으며 시계열임에도 불구하고 이 순서는 위반되지 않습니다. 가격 P1, P2, P3...Pn에 대해 모델을 학습시킨 후 샘플 외 테스트 또는 실제 사용 시 순서를 변경하지 않습니다.

2. 한 가지에 동의합니다. 입력이 100% 쓰레기 예측 변수이면 출력에서도 100% 쓰레기가 나옵니다. 이것은 명백한 사실이며 아무도 이에 대해 이의를 제기하지 않습니다. 제가 말씀드리고 싶은 것은 쓰레기 데이터는 사실상 사용되지 않기 때문에 100%가 아닌 어떤 양의 쓰레기 데이터로도 아웃 오브 샘플에서 좋은 결과를 내기 때문에 데이터를 컬링하는 것이 중요하지 않은 알고리즘이 있다는 것입니다. 주성분 분석이나 자동 인코더와 같이 데이터 차원 감소가 중요한 알고리즘과 데이터 차원에 민감하지 않은 알고리즘을 구분하는 것도 중요합니다.

"주식 시장에서는 경제적 원인과 움직임의 방향 사이의 관계에 대한 연구가 일반적이지만, 일중 구간에는 이러한 연구가 적용되지 않습니다." - 사실, 일중 간격에는 비농업 고용지표 발표와 같은 경제 지표가 적용됩니다.

3. 물론 모든 사람이 할 수 있는 만큼 벌고 있다는 것은 이해하지만, 머신러닝 알고리즘을 직접 구현해 본 적이 있나요? 알고리즘의 작동 방식을 이해하려면 알고리즘을 처음부터 직접 작성해야한다고 확신합니다. 이 경우 책에 기록되지 않은 것을 발견하게 될 것입니다. 그리고 이전에는 쉬워 보였던 명백해 보이는 요소조차도 실제로는 생각했던 것과 다르게 작동합니다.) 안부 전해주세요.

 
faa1947:

또한 일중 간격으로 머신 러닝 모델을 구축할 때는 지표와 같은 공식적인 수학적 값이 사용됩니다. 그리고 결과적으로 모델에 다양한 종류의 쓰레기를 포함하는 것은 매우 쉬우 며 "쓰레기 입력-쓰레기 배출"규칙이 작동하기 시작합니다.

그리고 예, 그런데 "지표와 같은 수학적 수량"을 사용할 필요는 없습니다. 원한다면 가격, 거래량, 시간, 델타와 관련된 자신만의 휴리스틱을 많이 생각해낼 수 있습니다. 제가 진정으로 수학적 지표로 사용하는 것은 평균, 표준편차, 상관관계뿐입니다.
 
CyberCortex:
....

3. 물론 나는 당신을 이해하고, 모두가 그가 아는대로 벌고 있지만 기계 학습 알고리즘을 직접 구현 한 적이 있습니까? 알고리즘의 작동 방식을 이해하려면 알고리즘을 처음부터 직접 작성해야한다고 확신합니다. 이 경우 책에 기록되지 않은 것을 발견하게 될 것입니다. 그리고 이전에는 쉬워 보였던 명백해 보이는 요소조차도 실제로는 생각했던 것과 다르게 작동합니다.) 정중하게.

나는 그런 문구를 지나칠 수 없었습니다. 존중!