pca.fit_transform(X)中X的数据类型是什么?
What is the data type of X in pca.fit_transform(X)?
我得到了 Gensim 训练的 word2vec 模型 abuse_model
。我想应用 PCA 并绘制我只关心的某些单词(相对于模型中的所有单词)。因此,我创建了一个字典 d
,它的键是我关心的单词,值是键的向量。
vocab = list(abuse_model.wv.key_to_index)
vocab = [v for v in vocab if v in positive_terms]
d = {}
for word in vocab:
d[word] = abuse_model.wv[word]
到目前为止没有错误。
我在将字典传递给 pca.fit_transform
时遇到错误。我是新手,想知道我传入的数据格式(元组列表)是否不正确。参数必须是什么数据类型?
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
result = pca.fit_transform(list(d.items()))
提前致谢!
根据 scikit-learn
文档 – https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA.fit_transform – .fit_transform()
的参数,通常用于 scikit-learn
模型,是“array-like 形状(n_samples, n_features)".
在这里,这意味着您的 samples/rows 是单词,features/columns 是 word-vector 维度。而且,您需要记住 PCA
对象的 outside 哪些单词对应于哪些行。 (在 Python 3.x 中,您的 d
dict
将始终按插入顺序迭代这一事实应该已经涵盖了。)
因此,将您对 .items()
的使用更改为 .values()
可能就足够了,这样您就可以为 PCA
提供 list
(这很合适array-like) 个向量。
其他一些注意事项:
-
.key_to_index
属性 已经是 list
,所以你不需要 convert/copy 它
- 如果您的
positive_terms
较大 list
,将其更改为 set
可以提供更快的 in
membership-testing
- 而不是使用
d
dict
,这涉及更多的开销(包括当您随后对其值进行 list
时),如果您的 sets-of-words并且向量很大,您可能需要预先分配一个大小合适的 numpy
数组并在其中收集向量。例如:
X = np.empty((len(vocab), abuse_model.wv.vector_size)
for i, word in enumerate(vocab):
X[i] = abuse_model.wv[word]
#...
#...
result = pca.fit_transform(X)
- 即使您的预感是您只希望 dimensionality-reduction 出现在您的字词子集上,您可能还想尝试保留所有字词,或其他字词的一些随机子集 – 它 可能 有助于保留一些原始结构,否则,您的子采样将过早删除。 (对此不确定;只是注意到它可能是一个因素。)即使您对更大的单词集进行 PCA,为了清楚起见,您仍然可以选择稍后 plot/analyze 您想要的子集。
我得到了 Gensim 训练的 word2vec 模型 abuse_model
。我想应用 PCA 并绘制我只关心的某些单词(相对于模型中的所有单词)。因此,我创建了一个字典 d
,它的键是我关心的单词,值是键的向量。
vocab = list(abuse_model.wv.key_to_index)
vocab = [v for v in vocab if v in positive_terms]
d = {}
for word in vocab:
d[word] = abuse_model.wv[word]
到目前为止没有错误。
我在将字典传递给 pca.fit_transform
时遇到错误。我是新手,想知道我传入的数据格式(元组列表)是否不正确。参数必须是什么数据类型?
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
result = pca.fit_transform(list(d.items()))
提前致谢!
根据 scikit-learn
文档 – https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA.fit_transform – .fit_transform()
的参数,通常用于 scikit-learn
模型,是“array-like 形状(n_samples, n_features)".
在这里,这意味着您的 samples/rows 是单词,features/columns 是 word-vector 维度。而且,您需要记住 PCA
对象的 outside 哪些单词对应于哪些行。 (在 Python 3.x 中,您的 d
dict
将始终按插入顺序迭代这一事实应该已经涵盖了。)
因此,将您对 .items()
的使用更改为 .values()
可能就足够了,这样您就可以为 PCA
提供 list
(这很合适array-like) 个向量。
其他一些注意事项:
-
.key_to_index
属性 已经是list
,所以你不需要 convert/copy 它 - 如果您的
positive_terms
较大list
,将其更改为set
可以提供更快的in
membership-testing - 而不是使用
d
dict
,这涉及更多的开销(包括当您随后对其值进行list
时),如果您的 sets-of-words并且向量很大,您可能需要预先分配一个大小合适的numpy
数组并在其中收集向量。例如:
X = np.empty((len(vocab), abuse_model.wv.vector_size)
for i, word in enumerate(vocab):
X[i] = abuse_model.wv[word]
#...
#...
result = pca.fit_transform(X)
- 即使您的预感是您只希望 dimensionality-reduction 出现在您的字词子集上,您可能还想尝试保留所有字词,或其他字词的一些随机子集 – 它 可能 有助于保留一些原始结构,否则,您的子采样将过早删除。 (对此不确定;只是注意到它可能是一个因素。)即使您对更大的单词集进行 PCA,为了清楚起见,您仍然可以选择稍后 plot/analyze 您想要的子集。