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

 
마이클 마르쿠카이테스 :
예, 이전 버전에서 일반화 능력을 향상시켰기 때문에 지연을 했습니다. 이제 예측을 열거하는 알고리즘이 개선되어 이것이 필요하지 않다고 생각하므로 없이 훈련하려고 합니다. 우리는 지켜보고 있습니다. 오늘 결과는 나중에 올리겠습니다...

초점이 맞지 않으면 시차 없이 일반화하는 능력은 증가하지 않을 것입니다. 그러면 13번째 및 14번째 버전은 좁은 범위의 작업을 위해 날카롭게 된 일종의 비보편적인 방향일 가능성이 큽니다.

이 경우 jPrediction을 다른 보편적인 방식으로 이동하려면 GIT를 롤백해야 합니다.

두 번째 가설이 있지만 샘플에 시차가 존재한다는 것은 이전 버전이 날카롭게 된 좁고 보편적이지 않은 방향입니까?

 
유리 레셰토프 :

초점이 맞지 않으면 시차 없이 일반화하는 능력은 증가하지 않을 것입니다. 그러면 13번째 및 14번째 버전은 좁은 범위의 작업을 위해 날카롭게 된 일종의 비보편적인 방향일 가능성이 큽니다.

이 경우 jPrediction을 다른 보편적인 방식으로 이동하려면 GIT를 롤백해야 합니다.

두 번째 가설이 있지만 샘플에 시차가 존재한다는 것은 이전 버전이 날카롭게 된 좁고 보편적이지 않은 방향입니까?

글쎄, 무엇을, 어떻게 보자 ... 내가 훈련하자마자 구독을 취소 할 것입니다 ...
 
트레이더 박사 :

그럼 여기에 답하겠습니다.

#пара строк из той таблицы, не буду я всё текстом копировать, потом первая строка повторена ещё дважды
dat <- data.frame(cluster1=c( 24 , 2 , 13 , 23 , 6 ), cluster2=c( 5 , 15 , 13 , 28 , 12 ), cluster3=c( 18 , 12 , 16 , 22 , 20 ), cluster4=c( 21 , 7 , 29 , 10 , 25 ), cluster5=c( 16 , 22 , 24 , 4 , 11 ), target.label=c( 1 , 1 , 0 , 1 , 0 ))
dat <- rbind(dat, dat[ 1 ,], dat[ 1 ,])
#результат последней строки поменян на 0 для эксперимента
dat[ 7 , "target.label" ]= 0

library (sqldf)
#для sqldf точек в названиях колонок быть не должно
colnames(dat)[ 6 ] <- "target"

dat1 <- sqldf( "select cluster1, cluster2, cluster3, cluster4, cluster5, avg(target) as target_avg, count(target) as target_count from dat group by cluster1, cluster2, cluster3, cluster4, cluster5" )
dat1
dat1[ dat1$target_count>= 10 & dat1$target_avg> 0.63 , ]
dat1[ dat1$target_count>= 10 & ( dat1$target_avg< 0.37 | dat1$target_avg> 0.63 ), ] #на случай если оба "0" или  "1" встречаются чаще 70 %

감사합니다, 매우 컴팩트한 솔루션!!

한 줄 더 뉘앙스로 도와주세요.


dat1 <- sqldf( "select cluster1, cluster2, cluster3, cluster4, cluster5 , avg(target) as target_avg, count(target) as target_count from dat group by cluster1, cluster2, cluster3, cluster4, cluster5" )

클러스터의 구별되는 이름을 하나의 변수로 어떻게 바꿀 수 있습니까?

colnames_dat <- colnamed(dat) [- "target" ]
dat1 <- sqldf( "select  colnames_dat , avg(target) as target_avg, count(target) as target_count from dat group by  colnames_dat " )

실생활에는 500개, 어쩌면 1000개의 클러스터가 있기 때문에 각 클러스터 이름을 수동으로 작성하는 것은 비현실적이며 솔루션이 이마에 작동하지 않습니다.

 
마이클 마르쿠카이테스 :
글쎄, 무엇을, 어떻게 보자 ... 내가 훈련하자마자 구독을 취소 할 것입니다 ...

결론은 13 버전 이전에는 샘플의 시작 부분에 더 가까운 예측 변수가 더 높은 확률로 처리되었다는 것입니다. 그리고 표본의 끝(목표 변수에 더 가까움)에 있던 것들과 더 작은 것들. 저것들. 가장 중요한 예측 변수가 왼쪽에 있는 표본에 미리 배치되고 가장 덜 중요한 예측자가 오른쪽에 배치되면 좋은 일반화 능력을 얻습니다. 그리고 그 반대의 경우에도 좋지 않습니다. 문제는 이를 위해서는 어떤 예측 변수가 가장 중요한지 미리 알아야 한다는 것입니다. 중요도에 따라 샘플에서 우선 순위를 지정합니다. 그러나 이 경우 예측자 선택 알고리즘 자체가 그다지 효과적이지 않았습니다.

14 버전에서는 모든 예측 변수에 대한 처리 확률이 거의 동일합니다. 그러나 이것은 또 다른 문제를 야기합니다. 결국, 예측자 선택 알고리즘은 그래디언트 검색 방법에 따라 작동하며 매번 일반화 능력을 높이는 방향으로 한 단계 이동합니다. 동시에 다른 그래디언트 방법과 마찬가지로 로컬 극한값에서 "고착" 될 위험이 0이 아닙니다 . 버전 12 이전에는 샘플에서 예측 변수의 순위를 미리 지정하여 이 위험을 줄였습니다.

일반적으로 알고리즘의 첫 번째 버전과 두 번째 버전 모두에 문제가 있으며, 이를 제거하기 위해서는 어떻게든 분석해야 합니다. 예를 들어, "협곡"을 "점프"하기 위해 현재 상태에서 다른 방향으로 여러 단계에 대해 알고리즘에 임의의 점프를 도입합니다.

 
mytarmailS :

> clusternames < - paste(colnames(dat)[-ncol(dat)], collapse= "," )
>
clusternames
[1] "cluster1,cluster2,cluster3,cluster4,cluster5"
> sql_query < - paste0("select ", clusternames, ", avg(target) as target_avg, count(target) as target_count from dat group by ", clusternames)
>
sql_query
[1] "select cluster1,cluster2,cluster3,cluster4,cluster5, avg(target) as target_avg, count(target) as target_count from dat group by cluster1,cluster2,cluster3,cluster4,cluster5"
> dat1 < - sqldf( sql_query )
>
dat1

 
유리 레셰토프 :

"협곡" 위로 "점프"합니다.

때로는 L-BFGS 최적화가 뉴런에 내장되어 협곡에서 벗어날 수 있습니다. 예를 들어 nnet 뉴런 패키지.

거기에는 많은 수학이 있습니다. 어떻게 작동하는지 모르지만 결론은 그라디언트 아래로 내려가는 것이 아니라 그라디언트에서 그라디언트(도함수의 파생)로 내려가는 것입니다.

 
마법사_ :
1) 나는 또한 원시적 인 예를 올바르게 이해했습니다 (네트워크 또는 기타를 얻을 곳이 없으면 "발명"을 시작합니다)))
2) 70%를 찾는 방법만, 100모나를 찾아서 사용할 수 있을 때(물론 가격은 아님).

1) 글쎄, 그래, 그래, 그들은 그런 죄를 가지고 있다)) 나는 이것을 "나의" 접근 방식의 장점에 대한 단락에서 설명했습니다

2) 반전을 위한 조합을 찾을 것입니다. 그것들은 양초의 방향이나 색상뿐만 아니라 - 반전이 아닌 반전 상승, 반전 하락

처음에는 필요한 관찰이 훨씬 적지만 모든 것이 잘되면 행복할 것이고 트리거의 40%, 심지어 70%는 필요하지 않습니다. 그러한 목표 위험이 있는 경우 이익은 1에서 5까지이기 때문입니다.

트레이더 박사 :

정말 감사합니다 차근차근 데이터 준비해서 클러스터링 후 패턴 찾아보고 결과 알려드릴께요

 
트레이더 박사 :

때로는 L-BFGS 최적화가 뉴런에 내장되어 협곡에서 벗어날 수 있습니다. 예를 들어 nnet 뉴런 패키지.

BFGS 및 L-BFGS와 같은 파생물은 jPrediction이 이미 해결한 문제, 즉 국소 극값을 찾기 위해 설계되었습니다. 저것들. 이 알고리즘을 사용하면 가장 가까운 극값 방향으로 "협곡"에서 "등산"할 수 있으며 대체 극값을 찾기 위해 계곡을 "점프"할 수 없습니다.

알고리즘 "점퍼"가 필요합니다. 그리고 무작위로가 아니라 잠재적으로 유망한 방향으로 "점프"하는 것이 바람직합니다. 이론적으로 이것은 돌연변이를 통해 그러한 "점프"가 수행되는 유전학을 통해 실현될 수 있습니다. 그러나 유전 알고리즘은 매우 느리고 최소한의 시간 비용으로 잠재적인 자손이 이가 있는지 테스트할 수 있는 작업에 더 적합합니다. 일반화 능력을 계산하기 위해 뉴런을 훈련시키는 것은 여기의 유전학이 너무 억제적이기 때문에 많은 시간이 걸립니다.

좋습니다. 더 나은 옵션이 없기 때문에 현재 임의의 "점프"가 있는 변형을 테스트하고 있습니다.

 

R에 대한 또 다른 책. 당신이 할 수 있는 다른 곳이 명확하지 않기 때문에 여기에 첨부하겠습니다. 순리에 맡기다

S.E. 마스티츠키, V.K. 시티코프

R을 통한 통계 분석 및 데이터 시각화

파일:
 

막대로 슬라이딩 창을 사용하여 mytarmailS와 같은 패턴을 찾으면 각 패턴은 각 막대에 값이 위치할 수 있는 간격에 대한 정보를 전달합니다. 패턴이 많을수록 각 막대의 간격이 짧아집니다.

대략적으로 말하자면, 새로운 데이터가 있는 특정 창이 이전에 발견된 패턴에 속하려면 각 패턴에 고유한 수직 구분 기호에 속해야 합니다.

1000개의 패턴을 찾아서 찾으면 각 패턴의 "채널" 너비가 작아집니다. 그리고 새로운 데이터는 항상 훈련 데이터와 약간씩 다르기 때문에 이렇게 좁은 채널에 들어가기가 어려울 것이고, 이는 오류로 이어질 것입니다.

나는 Occam의 면도에 의해 안내 될 것입니다 - 패턴의 수를 줄이고 열화없이 동일한 결과를 얻을 수 있다면 그것을 줄이는 것이 좋습니다.

사유: