用python写一段可以训练和测试的朴素贝叶斯分类器代码
时间: 2024-05-14 17:13:54 浏览: 114
Python实现的朴素贝叶斯分类器示例
5星 · 资源好评率100%
以下是可以训练和测试的朴素贝叶斯分类器代码,采用nltk库:
```python
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 读取数据集
with open('dataset.txt', 'r', encoding='utf-8') as f:
dataset = f.readlines()
# 数据预处理
lemmatizer = WordNetLemmatizer()
stop_words = set(stopwords.words('english'))
X = []
y = []
for data in dataset:
index = data.index(' ')
X.append(' '.join([lemmatizer.lemmatize(w.lower()) for w in word_tokenize(data[index+1:-1]) if w.lower() not in stop_words]))
y.append(int(data[:index]))
# 特征提取向量化
tfidf = TfidfVectorizer()
X = tfidf.fit_transform(X)
# 划分训练集和测试集
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)
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
```
其中,数据集文件中每一行的第一个数表示该样本的类别,后面跟着该样本的文本内容。数据集可以自己准备,也可以在网上找到现成的数据集。
需要注意的是,在朴素贝叶斯分类器中,特征的选择非常重要。常用的特征提取方法有词袋模型、TF-IDF模型等。在示例代码中,使用了TF-IDF模型对文本进行向量化。
阅读全文