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

 

트레이딩, 자동매매 시스템 및 트레이딩 전략 테스트에 관한 포럼

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

막심 드미트리예프스키, 2023.10.01 10:55 AM

residuals_a = a_mat - a_mat. column_means residuals_b = b_mat - b_mat. column_means a_residual_sums = residuals_a. column_sums b_residual_sums = residuals_b. column_sums residual_products = dot_product( residuals_a. transpose, residuals_b)

sum_products = sqrt( dot_product( a_residual_sums, b_residual_sums))

상관 관계 = 잔여 제품 / 합계 제품

이것은 상관관계 행렬을 정면으로 계산하는 것처럼 보입니다.

 
fxsaber #:
네, 감사합니다! 왜 잘못된 옵션이 inCols <100에서 작동하는지 이해할 수 없습니다.

분명히

Sens = 1 e-10
너무 많이. 무작위 - 평균 상관 관계는 아마도 약 0 일 것입니다.
 
Forester #:

아마도 너무 많은 것 같습니다. 무작위 - 평균적으로0의 상관관계가 있을 것입니다.

여기서 측정되는 것은 평균 오차가 아니라 해당 요소 간의 최대 차이입니다.

트레이딩, 자동매매 시스템 및 트레이딩 전략 테스트 포럼

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

FXSABER, 2023.10.01 09:38 오후

bool IsEqual( matrix<double> &Matrix1, const matrix<double> &Matrix2, const double Sens = 1 e-10 )
{
  Matrix1 -= Matrix2;  
  
  const bool Res = (MathMax(MathAbs(Matrix1.Max()), MathAbs(Matrix1.Min())) < Sens);
  
  Matrix1 += Matrix2;
  
  return(Res);
}


그래서 잘못된 코드가 어떻게

  for (int i = 0; i < (int)Matrix.Rows(); i++)

어떻게 일치하는지 명확하지 않습니다.

inRows = 5 inCols = 50 
matrix<double> Matrix1 = CorrMatrix(Matrix) - 242 mcs, 0 MB
matrix<double> Matrix4 = CorrMatrix2(Matrix) - 117 mcs, 0 MB
IsEqual(Matrix1, Matrix4) = true 
 
Forester #:
삼각형으로 세는 경우, 즉 끝부터 세는 경우 PearsonCorrM2의 속도를 2배로 높일 수 있습니다. 100 번째 줄을 모두 세고 0-99, 99 및 100 번째 줄이 모두 계산 된 99 개를 모두 계산하면됩니다. ... 50 번째 줄을 모두 50 번째 줄 등으로 복사 할 수 있습니다. 글쎄, = 1이므로 자체로 계산하지 마십시오.
나는 아무 의미가 없습니다.
inRows = 100 inCols = 15000 
matrix<double> Matrix1 = CorrMatrix(Matrix) - 14196778 mcs, 1717 MB
matrix<double> Matrix4 = CorrMatrix2(Matrix) - 538256223 mcs, 1717 MB
IsEqual(Matrix1, Matrix4) = true 
끔찍한 브레이크는 여전히 느려질 것입니다. 여기에서는 분명히 자체 제작 도구 없이는 할 수 없습니다.
 
fxsaber #:

그렇기 때문에 잘못된 코드가 어떻게 사용되는지 명확하지 않습니다.

가 어떻게 일치하는지 명확하지 않습니다.

행렬 계산을 바꾸면 불일치가 발생한다는 것을 알아 냈습니다.

inRows = 5 inCols = 50 
matrix<double> Matrix4 = CorrMatrix2(Matrix) - 113 mcs, 0 MB
matrix<double> Matrix1 = CorrMatrix(Matrix) - 214 mcs, 0 MB
IsEqual(Matrix1, Matrix4) = false 

즉, 첫 번째 행렬을 계산하는 동안 메모리의 쓰레기가 새 행렬에 들어갔고 어떤 기적에 의해 원하는 결과와 일치했습니다.

 
fxsaber #:

상관 행렬을 정면으로 계산하는 것 같아요.

네, 새로운 행렬에서 사이클 없이 μl을 만들면 더 빨라지지 않을까요?
 
fxsaber #:
196

500초 대 14초 - 알고리즘으로 인해

PearsonCorrM

가장 빠른 것으로 기억합니다.

막심 드미트리예프스키 #:
네, 새로운 µl 매트릭스로 만들면 더 빨라지지 않을까요?

피어슨코어엠과 피어슨코어엠2에서 사용되는 9가지 함수를 모두 행렬로 다시 작성하여 비교할 수 있다고 생각합니다. 원칙적으로 행렬 선언과 참조를 다시 작성하는 데 한 시간 정도의 시간이 소요될 것입니다. 동시에 행렬이 배열보다 나은지 알아볼 수 있습니다.

제목
IsFiniteMatrix(
IsFiniteVector(
AblasInternalSplitLength(
AblasSplitLength(
RMatrixGemmK(
RMatrixGemm(
RMatrixSyrk2(
RMatrixSyrk(
RankX(

 
Forester #:

피어슨코어엠과 피어슨코어엠2에서 사용되는 9개의 함수는 모두 행렬로 다시 작성하여 비교할 수 있다고 생각합니다. 원칙적으로 행렬 발표 및 참조를 다시 작성하는 데 한 시간 정도의 작업이 소요됩니다. 동시에 행렬이 배열보다 더 나은지 알아볼 것입니다.

모든 것이 이미 완료되었습니다. MQ가 행렬을 위해 다시 작성했습니다.

포레스터 #:

500초 대 14 - 그래서 기억이 났어요.

알고리즘 때문에 가장 빠릅니다.

거기에는 알고리즘이 있는지 몰랐어요. NumPy는 반복 계산을 수행하지 않는다는 사실 때문에 크게 뒤처지지 않습니다.

NumPy는 성능이 매우 다르기 때문에 ALglib과 다른 알고리즘을 가지고있는 것 같습니다. 그러나 거대한 파이썬 커뮤니티 전체에서 이 문제를 연구하는 데 상당한 시간을 할애한 매우 강력한 알고리즘 학자가 있었다는 것은 분명합니다.
 
fxsaber #:

이미 완료되었습니다. MQ가 매트릭스에 맞게 재작성했습니다.

그리고 더 느려졌다고요?)

 
Forester #:

그리고 더 느려졌어요 ?))))

이전 버전의 알글립과 비교해보세요. 느려졌다는 데이터는 없습니다.

사유: