对fetch_20newsgroups进行分析,要求: 1)显示数据集的标签,及第一个样本的内容。 2)使用伯努利朴素贝叶斯或高斯朴素贝叶斯或多项式朴素贝叶斯对数据进行分析,求训练集及测试集的准确率,用classification_report求相关指标值,统计总体运行时间。
时间: 2024-10-27 11:04:01 浏览: 20
20newsgroup数据集-机器学习-标准数据集(all)下载方式 from sklearn.datasets import fetch_20newsgrou
`fetch_20newsgroups` 是 Scikit-Learn 库中的一个模块,用于加载 20 新闻组文本分类数据集,这是一个常用于文本分类任务的数据集,包含了 20 个主题的新闻文章。
首先,让我们展示数据集的一些基本信息:
1. **标签**:这个数据集中每个样本都有一个对应的主题标签,例如 "comp.sys.ibm.pc.hardware", "rec.motorcycles" 等。你可以通过 `categories` 属性查看所有类别。
```python
from sklearn.datasets import fetch_20newsgroups
newsgroups = fetch_20newsgroups()
print(newsgroups.target_names)
```
2. **第一个样本内容**:可以用 `data` 和 `target` 属性获取,如下面所示:
```python
first_sample_text = newsgroups.data[0]
first_sample_label = newsgroups.target[0]
print("First Sample Text:", first_sample_text[:100] + "...") # 输出前100字符
print("Label:", newsgroups.target_names[first_sample_label])
```
接下来,我们将使用朴素贝叶斯模型(伯努利、高斯或多项式)进行分类,并计算性能指标:
```python
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import BernoulliNB, GaussianNB, MultinomialNB
from sklearn.metrics import accuracy_score, classification_report, timeit
# 数据预处理
vectorizer = CountVectorizer() # 使用词频特征
X_train, X_test, y_train, y_test = train_test_split(newsgroups.data, newsgroups.target, test_size=0.2)
# 训练模型
models = {
'BernoulliNB': BernoulliNB(),
'GaussianNB': GaussianNB(),
'MultinomialNB': MultinomialNB(),
}
for model_name, model in models.items():
start_time = timeit.default_timer()
vectorized_data = vectorizer.fit_transform(X_train)
# 训练
model.fit(vectorized_data, y_train)
# 预测
predictions = model.predict(vectorized_data)
# 评估
train_accuracy = accuracy_score(y_train, predictions)
test_accuracy = accuracy_score(y_test, model.predict(vectorized_data))
print(f"{model_name} - Train Accuracy: {train_accuracy}, Test Accuracy: {test_accuracy}")
print(classification_report(y_test, predictions, target_names=newsgroups.target_names))
# 统计时间
elapsed_time = timeit.default_timer() - start_time
print(f"Time taken for {model_name}: {elapsed_time:.4f} seconds\n")
```
运行此代码后,你会得到每个朴素贝叶斯模型在训练集和测试集上的准确率以及分类报告,同时还会记录每个模型的运行时间。请注意实际运行时间可能会因计算机性能而异。
阅读全文