python - Word2Vec 维度导致 KMeans 出现问题
问题描述
我有一个sentences
包含 1000 个字符串的列表,我想使用 KMeans 进行聚类。像这样:
sentences = [
['I', 'received', 'an', 'email']
['How', 'do', 'I', 'know', 'it', 'is', 'real?'],
['Ladies', 'and', 'Gentlemen']
]
我正在使用 word2vec 删除停用词并预处理输入。
我像这样运行 word2vec:m = Word2Vec(sentences, size=50, window=6, min_count=1, sg=1)
之后,我定义了一个向量器,它对 word2vec 生成的所有单词浮点向量进行平均。
def vectorizer(sentence, m):
vec = []
numw = 0
for w in sentence:
try:
if numw == 0:
vec = m[w]
else:
vec = np.add(vec, m[w])
numw+=1
except:
pass
return np.asarray(vec) / numw
最后,我通过这个矢量化器传递整个输入:
def vectorize(sentences, m):
l = []
for i in sentences:
l.append(vectorizer(i, m))
return np.array(l)
然后我像这样调用vectorizer方法:X = vectorize(sentences, m)
当我这样做X.shape
时,输出为:[1000, 50]。由于 word2vec 中传递的大小是 50。我有 1000 条记录。
但是,当我将 word2vec 的大小更改为 100 时,则X.shape
只是 [1000,]。
知道为什么会发生这种情况以及如何解决吗?
它导致我在使用 KMeans 时出现问题,因为当我通过它时出现此错误:
ValueError: setting an array element with a sequence.
解决方案
推荐阅读
- python - 在 Python dash - 如何在从回调内存中读取 JSON 文件后填充数据表
- c - 我的 Visual Studio Code 无法正确运行我的代码
- php - laravel 中的迁移命令
- spring-boot - 微服务中的分布式 GraphQL
- vue.js - 在所有 vue 组件实例之间共享变量
- r - 如何使用 r 中的 plot() 在 x 轴上创建具有有序字符变量的散点图?
- c# - asp.net core DI - 我可以使服务依赖于其他服务吗
- java - 我想按数字和符号“。”分割字符串。在java中
- javascript - 机器人不和谐设置自定义游戏与应用程序 id JS
- python - 实现我的第一个 keras 模型:为什么我的输入数组不匹配?