一、文本向量化
文本向量化是自然语言处理中的一个核心步骤,目的是把文本数据转换成计算机能够处理的数字向量。
计算机不能直接理解“机器学习”这样的人类语言需要转换成“[0.2, 0.5, 0, 1.3, …]”这样的数字形式,才能进行机器学习、分类、聚类等任务。
代码辅助演示
导入模块
from sklearn.feature_extraction.text import CountVectorizer
CountVectorizer:将文本中的词语转换成数字,并统计每个词出现的次数。
texts=["dog cat fish","dog cat cat","fish bird","bird"]
texts:准备文本数据,这条代码有4条数据"dog cat fish",“dog cat cat”,“fish bird"和"bird”
按列表顺序,编号分别是0,1,2,3
cv = CountVectorizer(ngram_range=(1,1))
创建词向量模型,其中ngram_range=(1,1)表示只提取单个词,比如:“dog cat fish”拆成“dog”,“cat”,“fish”
如果是ngram_range=(1,1),则拆成“dog cat“,“cat fish”
cv_fit=cv.fit_transform(texts)
训练并转换文本,这一步包涵两步
第一步:fit–所有文本中的词建立编号
第二步:transform–根据词库统计每句话中的词频
print(cv_fit)
输出类似:
(1,1) 2表示:
第1条文本,第1个词出现2次。(dog cat cat 里面 cat 出现2次)

二、 朴素贝叶斯分类器
朴素贝叶斯分类器是一种基于概率统计的机器学习分类算法,它利用贝叶斯定理计算一个样本属于某个类别的概率,然后选择概率最大的类别作为预测结果。
朴素贝叶斯的核心来自贝叶斯定理:

代码辅助演示
from sklearn.naive_bayes import MultinomialNB
导入朴素贝叶斯分类器
MultinomialNB最合适 文本分类、词频统计、TF-IDF文本向量 这种离散特征。
classifier = MultinomialNB(alpha=0.1)
创建一个朴素贝叶斯模型
alpha=0.1表示拉普拉斯平滑参数,他的作用是防止某些词没有出现导致概率为0
例如:
训练集中没有出现过的新词会导致朴素贝叶斯计算时出现 P(词|类别)=0,使整个分类概率变为0,因此需要通过拉普拉斯平滑给未出现词分配一个小概率,避免零概率问题。
classifier.fit(x_train_vec, y_train)
train_pr = classifier.predict(x_train_vec)
模型训练 → 训练集预测 → 训练效果评估
x_train_vec:训练文本经过向量化后的特征数据
y_train:训练文本对应的类别标签
train_pr:把训练集再次输入模型,让模型预测类别,保存模型预测结果到train_pr
from sklearn import metrics
print(metrics.classification_report(y_train, train_pr))
将真实标签 y_train和预测结果 train_pr进行比较,输出分类报告。
结果类似于:
precision recall f1–score support
差 评 0 1.00 0.98 0.99 54068
优质评价1 0.02 0.64 0.03 25
accuracy 0.98 54093



