gpt4 book ai didi

python - 如何向 CountVectorizer 添加权重因子

转载 作者:行者123 更新时间:2023-11-30 09:50:13 25 4
gpt4 key购买 nike

我对数据科学还很陌生。我正在尝试使用 LDA 解决 nlp 聚类问题。我在使用 CountVectorizer 时遇到问题来自sklearn

我有一个数据框:

df = pd.DataFrame({'id':[1,2,3],'word':[['one', 'two', 'four'],
['five', 'six', 'nine'],
['eight', 'eleven', 'ten']]})
df2 = df.copy().assign(word = df.word.map(lambda y: " ".join(y)))


id word
0 1 one two four
1 2 five six nine
2 3 eight eleven ten

我从 web 得到了一段代码这对我的问题很有用:

cvectorizer = CountVectorizer(min_df=4, max_features=10000,ngram_range=(1,2))
cvz = cvectorizer.fit_transform(df2['word'])

我想要的只是为单词列中的值添加某种权重因子。它应该像这样工作:单词列中数组的第一个元素的权重应该为 len(lengths of an array)从数组的开头到结尾按降序排列。

例如:对于 id = 1 的行,我想要以下情况:

{one:3, two:2, four:1}

其中 int value 是我的权重参数。

在此之后,我希望将加权值插入 CountVectorizer

我已阅读文档,但我就是不知道如何解决我的问题。

最佳答案

这里的基本函数是 split() 方法 - 通过它,您既可以将单词列表转换为字符串列表,也可以获取要分配给每个字符串的整数.

最终答案:这是一个插入式字典制作方法和应用它的 apply() 调用:

def make_dict(list1,list2):
d = {}
for k,v in zip(list1,list2):
d[k] = v
return d

df2['word'].apply(lambda x : (x.split(" "), [i for i in reversed(range(1,len(x.split(" "))+1))])).apply(lambda y : make_dict(y[0],y[1]))

这将返回一个系列,该系列的每个元素都是您为该特定行请求的字典。该表达式的解释如下。

说明:从列表理解开始,它将创建一个元组 - 元组的第一项是将作为字典键的字符串的拆分列表。元组的第二项是将成为字典值的整数的拆分列表(这些基本上只是通过调用 range() 生成的反向列表,其参数来自字符串 split 方法在答案开头提到)

In [1]: df2['word'].apply(lambda x : (x.split(" "), [i for i in reversed(range(1,len(x.split(" "))+1))]))
Out[1]:
0 ([one, two, four], [3, 2, 1])
1 ([five, six, nine], [3, 2, 1])
2 ([eight, eleven, ten], [3, 2, 1])

接下来,定义一个以两个列表为参数的函数(从上面的操作我们知道,这两个列表必须是相同长度的列表,所以我们不需要强制检查它们的长度是否相同,除非我们很偏执)并将它们缝合到字典中:

In [2]: def make_dict(list1,list2):
...: d = {}
...: for k,v in zip(list1,list2):
...: d[k] = v
...: return d

List1 变成键的集合,list2 变成值的集合。 (请注意,如果键重复,这将覆盖旧键,例如,如果您的列之一是“一一一”)。

现在剩下的就是将第一个表达式的输出与上面定义的函数结合起来,我们可以使用另一个 apply() 来实现:

In [3]: df2['word'].apply(lambda x : (x.split(" "), [i for i in reversed(range(1,len(x.split(" "))+1))])).apply(lambda y : make_dict(y[0],y[1]))
Out[3]:
0 {'one': 3, 'two': 2, 'four': 1}
1 {'five': 3, 'six': 2, 'nine': 1}
2 {'eight': 3, 'eleven': 2, 'ten': 1}
Name: word, dtype: object

关于python - 如何向 CountVectorizer 添加权重因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46506082/

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