gpt4 book ai didi

python - 如何在 scikit learn 中使用向量作为特征

转载 作者:太空宇宙 更新时间:2023-11-03 11:44:13 24 4
gpt4 key购买 nike

我正在尝试使用单词的矢量表示作为 scikit 学习分类器的特征。我试过SVC。这是代码

from sklearn.svm import SVC
import csv
import numpy as np
from gensim.models import word2vec
from gensim.models.keyedvectors import KeyedVectors
model = KeyedVectors.load_word2vec_format('text.model.bin', binary=True)

with open('1000.csv', newline='') as csvfile:
listwords = csv.reader(csvfile)
features = []
labels = []
n = 0
for row in listwords:
if n>=199:
break
try:
line = [int(row[2]),np.array(model[row[0]])]
features.append([line])
labels.append([row[1]])
n+=1
except KeyError:
pass
features.append([])
n+=1
clf = SVC()
clf = clf.fit(features, labels)
vocab_obj = model.vocab['anne']
print (clf.predict([vocab_obj.count,model['anne']]))

函数 model[X] 返回一个向量。

我收到错误:ValueError:使用序列设置数组元素。

我应该怎么做?

最佳答案

似乎有几个问题 w.r.t.您的标签和特征的表示。

据我从您的代码中可以看出,labels似乎是一个列表列表(可能)包含字符串(可能看起来像 [['0'], ['1'], ...] ),但是 fit()函数需要一个 numpy 整数数组。构建标签列表时,尝试使用 labels.append(int(row[1])) (如果 int 已经是整数,则忽略对 row[1] 的转换)。如果您的标签是类别名称(例如 sportspolitics 或其他名称),则您需要使用 LabelEncoder第一的。调用前fit()您可能还想将标签列表转换为 numpy 数组:y = np.array(labels) .

你的 features list 似乎有类似的问题,但看起来它可能是一个三重嵌套列表。 fit()函数期望数据矩阵为 n_samples x n_features矩阵。如果您使用的是词向量,那么 n_features是你的词向量的维度,n_samples您的 csv 文件中的文档数。

要从单词向量中获取文档表示,您需要以某种方式组合它们。通常,简单地添加或平均文档中的所有向量已被发现是一个强大的基线。请注意,很难从您的示例中看出 int(row[2]) 的含义在 line = [int(row[2]),np.array(model[row[0]])]是。

如果您仍在努力让它工作,我鼓励您发布更多关于 csv 文件中单行的信息。

关于python - 如何在 scikit learn 中使用向量作为特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43115877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com