使用朴素贝叶斯算法进行新闻分类
时间: 2023-07-05 14:16:57 浏览: 150
好的,以下是使用朴素贝叶斯算法进行新闻分类的示例代码:
```python
import os
import jieba
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
# 读取数据
data_path = 'data'
categories = os.listdir(data_path)
all_data = []
all_labels = []
for i, category in enumerate(categories):
category_path = os.path.join(data_path, category)
for filename in os.listdir(category_path):
filepath = os.path.join(category_path, filename)
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
all_data.append(content)
all_labels.append(i)
# 分词
all_data = [' '.join(jieba.cut(content)) for content in all_data]
# 特征提取
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(all_data)
y = all_labels
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
clf = MultinomialNB()
clf.fit(X_train, y_train)
# 预测结果
y_pred = clf.predict(X_test)
# 输出准确率和混淆矩阵
from sklearn.metrics import accuracy_score, confusion_matrix
print('Accuracy:', accuracy_score(y_test, y_pred))
print('Confusion matrix:', confusion_matrix(y_test, y_pred))
```
其中,`data`文件夹中包含了新闻数据,每个子文件夹的名称代表一个类别,每个文件代表一篇新闻。`all_data`是所有新闻的内容列表,`all_labels`是对应的类别编号列表。`vectorizer`用于将文本转换为向量形式,`clf`是朴素贝叶斯分类器。
运行代码之前,需要先安装`jieba`和`scikit-learn`包。可以使用以下命令进行安装:
```bash
pip install jieba scikit-learn
```
注意:在实际应用中,还需要进行模型调参等步骤来提高分类器的准确率。
阅读全文