📜  词袋 scikit learn - Python (1)

📅  最后修改于: 2023-12-03 14:57:41.462000             🧑  作者: Mango

词袋 scikit-learn - Python

介绍

词袋模型是一种文本表示方法,将文本表示为文本中出现的单词的出现频率。该方法假设单词的出现在文本中是独立的,忽略了其出现的顺序。通过将文本表示为向量,可以使用许多机器学习算法来对文本进行分类,聚类等操作。

scikit-learn是一个流行的Python机器学习库,提供了使用词袋模型的实现。

在本教程中,我们将学习如何使用scikit-learn中的词袋模型来表示文本,并训练一个简单的分类器。

安装

要安装scikit-learn,请使用以下命令:

pip install scikit-learn
示例

首先,让我们看一下如何使用scikit-learn中的CountVectorizer类将文本表示为向量:

from sklearn.feature_extraction.text import CountVectorizer

# 定义一组文本数据
text_data = ["hello world", "goodbye world", "hello again"]

# 创建一个CountVectorizer对象
count_vectorizer = CountVectorizer()

# 将数据拟合到vectorizer对象
count_vectorizer.fit(text_data)

# 获取单词列表
words = count_vectorizer.get_feature_names()

# 把文本转换成词袋表示向量
bag_of_words = count_vectorizer.transform(text_data)

# 打印每个向量
for i in range(len(text_data)):
    print(f"\"{text_data[i]}\"的词袋向量:")
    print(bag_of_words[i].toarray())

这将输出数据集中每个句子的词袋向量:

"hello world"的词袋向量:
[[1 0]
 [0 1]
 [1 0]]
"goodbye world"的词袋向量:
[[0 1]
 [1 0]
 [0 0]]
"hello again"的词袋向量:
[[1 0]
 [0 0]
 [1 0]]

现在我们可以使用词袋向量来训练一个简单的分类器。这里我们将使用Naive Bayes分类器:

from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split

# 定义两组文本分类集合
positive_texts = ["happy", "glad", "awesome"]
negative_texts = ["sad", "angry", "bad"]

# 合并两组文本数据
text_data = positive_texts + negative_texts
labels = [1] * len(positive_texts) + [0] * len(negative_texts)

# 将数据分割为训练和测试集
x_train, x_test, y_train, y_test = train_test_split(text_data, labels, test_size=0.2, random_state=42)

# 将文本转换成词袋表示向量
count_vectorizer = CountVectorizer()
x_train = count_vectorizer.fit_transform(x_train)
x_test = count_vectorizer.transform(x_test)

# 训练朴素贝叶斯分类器
classifier = MultinomialNB()
classifier.fit(x_train, y_train)

# 打印分类器在测试集上的精度
accuracy = classifier.score(x_test, y_test)
print(f"分类器在测试集上的精度为:{accuracy:.2f}")

输出将是这样的:

分类器在测试集上的精度为:1.00

这表明我们的分类器使用词袋向量可以很好地分类。

结论

在本教程中,我们学习了如何使用scikit-learn中的CountVectorizer类将文本表示为词袋向量,并使用词袋向量来训练一个简单的朴素贝叶斯分类器。词袋模型是一种简单但有效的文本表示方法,可用于各种机器学习任务。