title是新闻标题,keywords是该篇新闻的关键词,label是该篇新闻的类别,对data_test.csv中的新闻数据进行分类,读取所有的测试数据并分类,将结果按顺序写入文件:lab4_result.txt (编码方式为”utf-8”),分类输出的要求为“学号姓名分类结果”。因为有26000条数据,所以txt的结果应该有26000行。最后将得到的文件与ddd.csv比较(ddd.csv文件为正确的标签),计算出准确率。写出完整代码。
时间: 2023-07-14 11:13:40 浏览: 87
```python
import pandas as pd
import jieba
import re
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
# 读取数据
df_train = pd.read_csv('data_train.csv', encoding='utf-8')
df_test = pd.read_csv('data_test.csv', encoding='utf-8')
# 数据清洗
def clean_text(text):
text = re.sub(r'[^\w\s]','',text) # 去除标点符号
text = re.sub(r'\d+','',text) # 去除数字
text = text.lower() # 转换为小写
text = ' '.join(jieba.cut(text)) # 分词
return text
df_train['text'] = df_train['title'] + df_train['content'] # 将标题和内容合并为一列
df_test['text'] = df_test['title'] + df_test['content']
df_train['text'] = df_train['text'].apply(clean_text) # 数据清洗
df_test['text'] = df_test['text'].apply(clean_text)
# 特征工程
tfidf = TfidfVectorizer()
X_train = tfidf.fit_transform(df_train['text']) # 训练集特征矩阵
X_test = tfidf.transform(df_test['text']) # 测试集特征矩阵
# 训练模型
clf = MultinomialNB()
y_train = df_train['label']
clf.fit(X_train, y_train)
# 预测结果
y_pred = clf.predict(X_test)
# 输出结果到文件
with open('lab4_result.txt', 'w', encoding='utf-8') as f:
for i, label in enumerate(y_pred):
f.write(f'学号姓名{label}\n')
# 计算准确率
df_answer = pd.read_csv('ddd.csv', encoding='utf-8')
y_true = df_answer['label']
accuracy = np.mean(y_pred == y_true)
print(f'Accuracy: {accuracy}')
```
注意:由于数据量较大,运行时间可能较长。建议先在部分数据上测试代码是否正确。
阅读全文