数值错误:缓冲区数据类型不匹配,期望为“double”,但实际为“float”。

4
def cast_vector(row):
    return np.array(list(map(lambda x: x.astype('float32'), row)))

words = pd.DataFrame(word_vectors.vocab.keys())
words.columns = ['words']
words['vectors'] = words.words.apply(lambda x: word_vectors.wv[f'{x}'])
words['vectors_typed'] = words.vectors.apply(cast_vector)
words['cluster'] = words.vectors_typed.apply(lambda x: model.predict([np.array(x)]))
#words.cluster = words.cluster.apply(lambda x: x[0])

为什么尽管使用 float32,还是会出现错误?

看起来你的模型期望一个float64(双精度)的值;如果你不将其转换为float32,那么它应该可以工作。 - Michael
我现在尝试将其设置为双精度值,但仍然不起作用。 - Cole Torres
1个回答

7

对我而言,将kmeans聚类算法的定义更改为使用单词向量作为double类型可以正常运行。修改后的代码如下:

from sklearn.cluster import KMeans

word_vectors = Word2Vec.load("../models/word2vec.model").wv

kmeans = KMeans(n_clusters=2, max_iter=1000, random_state=True, n_init=50).fit(X=word_vectors.vectors.astype('double'))

def cast_vector(row):
    return np.array(list(map(lambda x: x.astype('double'), row)))

words = pd.DataFrame(word_vectors.vocab.keys())
words.columns = ['words']
words['vectors'] = words.words.apply(lambda x: word_vectors[f'{x}'])
words['vectors_typed'] = words.vectors.apply(cast_vector)
words['cluster'] = words.vectors_typed.apply(lambda x: kmeans.predict([np.array(x)]))
words.cluster = words.cluster.apply(lambda x: x[0])
words['cluster_value'] = [1 if i==0 else -1 for i in words.cluster]
words['closeness_score'] = words.apply(lambda x: 1/(model.transform([x.vectors]).min()), axis=1)
words['sentiment_coeff'] = words.closeness_score * words.cluster_value

words.head(10)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接