我有一个高维词 - 二元频率矩阵(1100 x 100658,dtype = int)。作为列名,我正在设置word-bi-gram(比如'of-the','和-the',...) myPandaDataFrame.columns = word-bi-gram 作为行索引我用例如熟练程度(高,中,低) myPandaDataFrame.columns.set_index(['PROFICIENCY'],inplace = True,drop = True)
然后我正在做
from sklearn.decomposition import PCA
x = 500
pcax = PCA(n_components=x)
pcax.fit(myPandaDataFrame)
PCA(copy=True, n_components=x, whiten=False)
existing_2dx = pcax.transform(myPandaDataFrame)
existing_df_2dx = pandas.DataFrame(existing_2dx)
existing_df_2dx.index = myPandaDataFrame.index
existing_df_2dx.columns = ['PC{0}'.format(i) for i in range(x)]
我认为错误的第一个问题是我只能设置最多1100个组件。这是现有行的数量。我对PCA很新,并尝试了几个例子,但似乎我无法将其用于我的矩阵。 有人看到我在做错的地方,或者有人链接到与我的问题类似的教程/示例。我会很高兴:)。
最诚挚的问候
答案 0 :(得分:0)
您的矩阵跨越空间的维度(等级)的数量不能超过行数或列数的最小值(或者如果矩阵的数量更少)不完全排名)。
请参阅下面的示例:使用大小为500 x 10000
的矩阵,您可以要求1,000个组件并返回500,然后您可以在其上投影矩阵,返回500 x 500
矩阵:< / p>
df = pd.DataFrame(data=np.random.random(size=(500, 10000)))
RangeIndex: 500 entries, 0 to 499
Columns: 10000 entries, 0 to 9999
dtypes: float64(10000)
memory usage: 38.1 MB
x = 1000
pca = PCA(n_components=x)
pca.fit(df)
pca.explained_variance_ratio_.shape
(500,)
existing_2dx = pca.transform(df)
existing_2dx.shape
(500, 500)
答案 1 :(得分:0)
PCA将经验数据协方差矩阵分解为特征值和向量。该矩阵的等级为min(n_lines, n_columns)
。在此数字之后,特征值变为0,因此您的数据完全由到那里的组件数量来解释。这些组件可以完美地反映您的数据。为了减少任何维数,你需要选择更少的组件。