Python 使用PCA:AttributeError减少维度:“numpy.ndarray”对象没有属性“items”
我试图在DZone上实现一个示例项目,但遇到了一个问题。在这种情况下,我设置了Python 使用PCA:AttributeError减少维度:“numpy.ndarray”对象没有属性“items”,python,numpy,machine-learning,pca,numpy-ndarray,Python,Numpy,Machine Learning,Pca,Numpy Ndarray,我试图在DZone上实现一个示例项目,但遇到了一个问题。在这种情况下,我设置了 dir_pca_we_EWE = 'pickle_model_pca.pkl' 我正在执行以下任务: def reduce_dimensions_WE(dir_we_EWE, dir_pca_we_EWE): m1 = KeyedVectors.load_word2vec_format('./wiki.en/GoogleNews.bin', binary=True) model1 = {}
dir_pca_we_EWE = 'pickle_model_pca.pkl'
我正在执行以下任务:
def reduce_dimensions_WE(dir_we_EWE, dir_pca_we_EWE):
m1 = KeyedVectors.load_word2vec_format('./wiki.en/GoogleNews.bin', binary=True)
model1 = {}
# normalize vectors
for string in m1.wv.vocab:
model1[string] = m1.wv[string] / np.linalg.norm(m1.wv[string])
# reduce dimensionality
pca = decomposition.PCA(n_components=200)
pca.fit(np.array(list(model1.values())))
model1 = pca.transform(np.array(list(model1.values())))
i = 0
for key, value in model1.items():
model1[key] = model1[i] / np.linalg.norm(model1[i])
i = i + 1
with open(dir_pca_we_EWE, 'wb') as handle:
pickle.dump(model1, handle, protocol=pickle.HIGHEST_PROTOCOL)
return model1
这将产生以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 12, in reduce_dimensions_WE
AttributeError: 'numpy.ndarray' object has no attribute 'items'
一如既往,我们非常感谢您的帮助 首先将model1={}初始化为空dict
变量model1变为numpy.ndarray,它是pca变换方法的返回类型。排队
for key, value in model1.items():
...
您仍然使用model1,就好像它是一个dict一样,而现在已经不是了 @datasailor回答您的问题并告诉您问题所在。在评论中,您询问如何将数据维度减少到200,我认为最简单的方法是使用.fit_转换from,而不是当前使用的.transform:
from sklearn.decomposition import PCA
pca = PCA(n_components=200)
lower_dim_Data=pca.fit_transform(data)
您正在将PCA变换结果保存到model1变量中。pca.transform返回一个np.array而不是dict。感谢Andreas和下面的datasailor-我如何更改上面的代码以使其成功地将维度减少到200?在postingOkay之后才看到它,这很好。我只是想阻止窃取答案,因为它可能看起来像:感谢datasailor和上面的Andreas-我如何更改上述代码以使其成功地将维度减少到200?通过pca.transform方法,您已经执行了减少。变换数组的大小为n个样本,n个组件。
from sklearn.decomposition import PCA
pca = PCA(n_components=200)
lower_dim_Data=pca.fit_transform(data)