量化交易吧 关注:7,230贴子:52,738
  • 0回复贴,共1

期货_股票程序化学习分析PCA金融市场分析

只看楼主收藏回复

在这个函数库中,我已为三个准则进行了编码,我认为这些准则更好,且计算效率更高。 它们是方差比例、凯撒图和碎石图。 您可以从以下枚举中选择它们中的每一个;enum criterion { CRITERION_VARIANCE, CRITERION_KAISER, CRITERION_SCREE_PLOT };以下是提取主成分的完整函数:matrix Cpca::ExtractComponents(criterion CRITERION_) { vector vars = pca_scores_coefficients; vector vars_percents = (vars/(double)vars.Sum())*100.0; //--- for Kaiser double vars_mean = pca_scores_coefficients.Mean();//--- for scree double x[], y[]; //--- matrix PCAS = {}; double sum=0; ulong max; vector v_cols = {}; switch(CRITERION_) { case CRITERION_VARIANCE: #ifdef DEBUG_MODE Print("vars percentages ",vars_percents); #endif for (int i=0, count=0; i<(int)cols; i++) { count++; max = vars_percents.ArgMax(); sum += vars_percents[max]; vars_percents[max] = 0; v_cols.Resize(count); v_cols[count-1] = (int)max; if (sum >= 90.0) break; } PCAS.Resize(rows, v_cols.Size()); for (ulong i=0; i<v_cols.Size(); i++) PCAS.Col(pca_scores.Col((ulong)v_cols[i]), i); break; case CRITERION_KAISER: #ifdef DEBUG_MODE Print("var ",vars," scores mean ",vars_mean); #endif vars = pca_scores_coefficients; for (ulong i=0, count=0; i<cols; i++) if (vars[i] > vars_mean) { count++; PCAS.Resize(rows, count); PCAS.Col(pca_scores.Col(i), count-1); } break; case CRITERION_SCREE_PLOT: v_cols.Resize(cols); for (ulong i=0; i<v_cols.Size(); i++) v_cols[i] = (int)i+1; vars = pca_scores_coefficients; SortAscending(vars); //Make sure they are in ascending first order ReverseOrder(vars); //Set them to descending order VectorToArray(v_cols, x); VectorToArray(vars, y); plt.ScatterCurvePlots("Scree plot",x,y,"variance","PCA","Variance");//--- vars = pca_scores_coefficients; for (ulong i=0, count=0; i<cols; i++) if (vars[i] > vars_mean) { count++; PCAS.Resize(rows, count); PCAS.Col(pca_scores.Col(i), count-1); } break; } return (PCAS); }由于设置凯撒准则来选择含系数主成分,其可解释所有方差的 90% 以上。 我不得不将方差转换为百分比: vector vars = pca_scores_coefficients; vector vars_percents = (vars/(double)vars.Sum())*100.0; 添加图片注释,不超过 140 字(可选)以下是使用每种方法的输出。凯撒准则:CS 0 12:03:49.579 PCA Test (NAS100,H1) PCA'SCS 0 12:03:49.579 PCA Test (NAS100,H1) [[-0.6500472384886967,1.199407986803537]CS 0 12:03:49.579 PCA Test (NAS100,H1) [1.819562596624738,1.393614599196321]CS 0 12:03:49.579 PCA Test (NAS100,H1) [0.2688014256048517,1.420914385142756]CS 0 12:03:49.579 PCA Test (NAS100,H1) [-1.110534258768705,-0.06593596223641518]CS 0 12:03:49.579 PCA Test (NAS100,H1) [2.475561333978323,-1.768915328424386]CS 0 12:03:49.579 PCA Test (NAS100,H1) [-0.6245145789301378,-1.503882637300733]CS 0 12:03:49.579 PCA Test (NAS100,H1) [-2.608156175249579,0.0662886285379769]CS 0 12:03:49.579 PCA Test (NAS100,H1) [0.4325302694103054,-1.589321053467977]CS 0 12:03:49.579 PCA Test (NAS100,H1) [-1.667608250048573,-0.2034163217366656]CS 0 12:03:49.579 PCA Test (NAS100,H1) [1.664404875867474,1.051245703485609]]方差准则:CS 0 12:03:49.579 PCA Test (NAS100,H1) PCA'SCS 0 12:03:49.579 PCA Test (NAS100,H1) [[-0.6500472384886967,1.199407986803537]CS 0 12:03:49.579 PCA Test (NAS100,H1) [1.819562596624738,1.393614599196321]CS 0 12:03:49.579 PCA Test (NAS100,H1) [0.2688014256048517,1.420914385142756]CS 0 12:03:49.579 PCA Test (NAS100,H1) [-1.110534258768705,-0.06593596223641518]CS 0 12:03:49.579 PCA Test (NAS100,H1) [2.475561333978323,-1.768915328424386]CS 0 12:03:49.579 PCA Test (NAS100,H1) [-0.6245145789301378,-1.503882637300733]CS 0 12:03:49.579 PCA Test (NAS100,H1) [-2.608156175249579,0.0662886285379769]CS 0 12:03:49.579 PCA Test (NAS100,H1) [0.4325302694103054,-1.589321053467977]CS 0 12:03:49.579 PCA Test (NAS100,H1) [-1.667608250048573,-0.2034163217366656]CS 0 12:03:49.579 PCA Test (NAS100,H1) [1.664404875867474,1.051245703485609]]碎石图准则:
添加图片注释,不超过 140 字(可选)


IP属地:浙江1楼2024-05-08 16:13回复