【发布时间】:2018-09-06 07:27:05
【问题描述】:
我有以下代码成功计算了我的数据的最大主成分:
lst = ['date', 'MA(1,9)', 'MA(1,12)', 'MA(2,9)', 'MA(2,12)', 'MA(3,9)', 'MA(3,12)', 'MOM(9)', 'MOM(12)', 'VOL(1,9)', 'VOL(1,12)', 'VOL(2,9)', 'VOL(2,12)', 'VOL(3,9)', 'VOL(3,12)']
df = pd.read_excel(filename, sheet_name='daily', header=0, names=lst)
df = df.set_index('date')
df = df.loc[start_date:end_date]
pca = PCA()
pca = pca.fit(df)
print(pca.components_)
#print(pca.explained_variance_[0])
df = pd.DataFrame(pca.transform(df), columns=['PCA%i' % i for i in range(14)], index=df.index)
有什么方法可以不用自己计算就能成功得到第一个主成分? (sklearn 是否有某种我找不到的属性?)
我的数据:
MA(1,9) MA(1,12) MA(2,9) MA(2,12) MA(3,9) MA(3,12) MOM(9) \
date
1990-06-08 1 1 1 1 1 1 1
1990-06-11 1 1 1 1 1 1 1
1990-06-12 1 1 1 1 1 1 1
1990-06-13 1 1 1 1 1 1 1
1990-06-14 1 1 1 1 1 1 1
MOM(12) VOL(1,9) VOL(1,12) VOL(2,9) VOL(2,12) VOL(3,9) \
date
1990-06-08 1 1 0 1 1 1
1990-06-11 1 1 1 1 1 1
1990-06-12 1 0 0 1 1 1
1990-06-13 1 0 0 1 1 1
1990-06-14 1 0 0 1 1 1
VOL(3,12)
date
1990-06-08 1
1990-06-11 1
1990-06-12 1
1990-06-13 1
1990-06-14 1
输出:
PCA0 PCA1 PCA2 PCA3 PCA4 PCA5 \
date
1990-06-08 -0.707212 0.834228 0.511333 0.104279 -0.055340 -0.117740
1990-06-11 -0.685396 1.224009 -0.059560 -0.038864 -0.011676 -0.031021
1990-06-12 -0.737770 0.445458 1.083377 0.237313 -0.075061 0.012465
1990-06-13 -0.737770 0.445458 1.083377 0.237313 -0.075061 0.012465
1990-06-14 -0.737770 0.445458 1.083377 0.237313 -0.075061 0.012465
1990-06-15 -0.715954 0.835239 0.512485 0.094170 -0.031397 0.099184
1990-06-18 -0.715954 0.835239 0.512485 0.094170 -0.031397 0.099184
1990-06-19 -0.702743 -0.024860 0.185254 -0.976475 -0.028151 0.090701
... ... ... ... ... ... ...
2015-05-01 -0.636410 -0.440222 -1.139295 -0.229937 0.088941 -0.055738
2015-05-04 -0.636410 -0.440222 -1.139295 -0.229937 0.088941 -0.055738
PCA6 PCA7 PCA8 PCA9 PCA10 PCA11 \
date
1990-06-08 -0.050111 0.000652 0.062524 0.066524 -0.683963 0.097497
1990-06-11 -0.053740 0.013313 0.008949 -0.006157 0.002628 -0.010517
1990-06-12 -0.039659 -0.029781 0.009185 -0.026395 -0.006305 -0.019026
1990-07-19 -0.053740 0.013313 0.008949 -0.006157 0.002628 -0.010517
1990-07-20 -0.078581 0.056345 0.386847 0.056035 -0.044696 0.013128
... ... ... ... ... ... ...
2015-05-01 0.066707 0.018254 0.009552 0.002706 0.008036 0.000745
2015-05-04 0.066707 0.018254 0.009552 0.002706 0.008036 0.000745
PCA12 PCA13
date
1990-06-08 0.013466 -0.020638
... ... ...
2015-05-04 0.001502 0.004461
以上是更新代码的输出,但它似乎是错误的输出。 “第一主成分”定义为:
这种变换的定义方式是,第一个主成分 > 具有最大可能的方差(即,尽可能多地解释数据中的 > 可变性),并且每个后续成分依次具有 >在它与>前面的组件正交的约束下可能的最大方差。
简单地抓取 PCA 的第一列是否符合与上述定义相同的过程?
【问题讨论】:
标签: pandas numpy scikit-learn pca