导入必要的库:
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
from warnings import simplefilter
from sklearn.exceptions import ConvergenceWarning
- pandas库用于读取表格数据和数据处理。
- CountVectorizer用于将文本数据转换为词袋模型(BOW)的特征向量。
- LogisticRegression是逻辑回归模型,用于分类任务。
- warnings.simplefilter用于过滤警告信息。
- ConvergenceWarning是当模型训练没有收敛时,会发出的警告类。
数据预处理:
train = pd.read_csv('./data/train.csv')
train['title'] = train['title'].fillna('')
train['abstract'] = train['abstract'].fillna('')
test = pd.read_csv('./data/test.csv')
test['title'] = test['title'].fillna('')
test['abstract'] = test['abstract'].fillna('')
从CSV文件读取训练数据集和测试数据集,并使用fillna(‘’)填充缺失值。
特征提取:
train['text'] = train['title'].fillna('') + ' ' + train['author'].fillna('') + ' ' + train['abstract'].fillna('')+ ' ' + train['Keywords'].fillna('')
test['text'] = test['title'].fillna('') + ' ' + test['author'].fillna('') + ' ' + test['abstract'].fillna('')+ ' ' + train['Keywords'].fillna('')
vector = CountVectorizer().fit(train['text'])
train_vector = vector.transform(train['text'])
test_vector = vector.transform(test['text'])
- 将title、author、abstract和Keywords列合并为新的text列,这将成为训练集和测试集中的文本数据。
- 使用CountVectorizer将文本数据转换成词袋模型(BOW)的特征向量。BOW是一种常用的文本表示方法,它将文本表示为一个固定大小的向量,其中包含每个词的出现次数。
- fit方法用于学习词汇表,transform方法用于将文本数据转换成特征向量。
模型训练与预测:
model = LogisticRegression()
model.fit(train_vector, train['label'])
test['label'] = model.predict(test_vector)
创建逻辑回归模型,并使用fit方法对训练数据进行训练。
使用训练好的模型对测试集进行预测,并将预测结果存储在test[‘label’]列中。
结果输出:
test[['uuid', 'Keywords', 'label']].to_csv('submit_task1.csv', index=None)
- 将测试集中的uuid、Keywords和预测的label导出为CSV文件,用于提交任务一的推测结果。
注意事项:
- 代码中使用了CountVectorizer进行特征提取,如果效果不佳,可以尝试使用TfidfVectorizer替换,可能会获得更好的效果。
- 代码中为了处理警告信息,将收敛警告过滤掉,这样做可能会隐藏一些模型训练的问题。如果出现问题,建议不要忽略警告信息,而是去分析和解决问题。
- 请确保数据文件(train.csv和test.csv)位于正确的路径’./data/‘下,并且了解训练数据的标签列是’label’,测试集中有’uuid’和’Keywords’这两列用于提交结果。如果有其他任务相关的数据,请确保数据处理和列名的正确性。