Python 使用PCA:AttributeError减少维度:“numpy.ndarray”对象没有属性“items”

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 = {}

我试图在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 = {}
    # 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)