【Python】-- 机器学习项目 - 基于朴素贝叶斯算法的新闻分类

文章目录
01 什么是朴素贝叶斯
已知一个含有标记的数据集,此时来了一个测试样本,我们知道测试样本的特征,需要预测标记,若我们能够求出这个样本属于各个类别的概率,那么从中选择概率最大的就可以了,那么就是求P(c|x),先用全概率公式P(c|x)=P(x,c)/P(x),再用条件概率公式P(c|x)=P(x,c)/P(x)=P(x|c)*P©/P(x),对于同一个测试样本P(x)都是相同的,因此分母不是我们需要关心的。P©很好求,就是在数据集当中某个类别出现的概率最难求的就是P(x|c),朴素贝叶斯的思想就是假设各个特征之间相互独立,那么P(x|c)就等于P(x1|c)*P(x2|c)…,这样就可以求解了
02 基于朴素贝叶斯算法的新闻分类代码分析
这段代码完成了“文本 → 特征 → 降维 → 训练 → 评估”的完整朴素贝叶斯文本分类实验:
数据获取 fetch_20newsgroups() 下载约 1.8 万篇新闻,共 20 个主题(目标值 0-19)。
文本向量化 TfidfVectorizer() 把每篇文章转成词袋-TF-IDF 稀疏矩阵(原始维度 ≈ 十几万词)。接着 .toarray() 转成稠密数组,并强制用 uint8 压缩存储。
特征降维PCA(n_components=100) 将高维 TF-IDF 向量降到 100 维,既减小计算量又缓解稀疏性。
数据集划分 先用 train_test_split(… test_size=0.25) 分出测试集;再对剩余 75% 按 75/25 二次划分,得到训练集 + 验证集,便于调 alpha/监控过拟合。
模型训练MultinomialNB(alpha=1.0) 使用多项式朴素贝叶斯,alpha 为拉普拉斯平滑系数,防止出现零概率。
评估 分别在验证集和测试集上调用 .score() 输出整体准确率,可快速判断模型泛化水平。
03 基于朴素贝叶斯算法的新闻分类代码
def bayes():
# 加载数据集(文本数据集)
news = fetch_20newsgroups()
feature = news.data
target = news.target
print("特征:", len(feature))
print("目标:", len(target))
print("目标值的含义:", news.target_names)
# 文本特征抽取
tf = TfidfVectorizer()
feature = tf.fit_transform(feature)
feature = feature.toarray()
print(feature.shape)
print(feature.dtype)
feature = feature.astype(np.uint8)
print(feature.dtype)
# 特征降维
# pca
pca = PCA(n_components=100)
feature = pca.fit_transform(feature)
print(feature.shape)
# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(feature, target, test_size=0.25)
x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size=0.25)
print("训练集:", x_train.shape)
print("验证集:", x_val.shape)
print("测试集:", x_test.shape)
# 建立贝叶斯模型
# alapha是拉普拉斯平滑系数,防止计算的概率是0
mlt = MultinomialNB(alpha=1.0)
# 训练
mlt.fit(x_train, y_train)
# 验证
score_val = mlt.score(x_val, y_val)
print("在验证集上的得分:", score_val)
# 预测
score_test = mlt.score(x_test, y_test)
print("在测试集上的得分:", score_test)
predict = mlt.predict(x_test)
print("测试结果:", predict)
04 基于朴素贝叶斯算法的新闻分类代码源码
提供了Python的实现代码,使得用户可以根据自己的需求进行调整和应用。
Python代码下载地址
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)