已有trainset.csv和testset.csv,如何用Python实现朴素贝叶斯算法?
用已有训练/测试集实现朴素贝叶斯的正确操作
你不需要用train_test_split,这个函数是用来从单一数据集中划分训练/测试集的,而你已经有单独的trainset.csv和testset.csv,直接读取文件训练模型即可,具体步骤如下:
1. 导入所需库
import pandas as pd from sklearn.naive_bayes import GaussianNB # 根据数据类型选择对应NB模型 from sklearn.metrics import accuracy_score
注:如果你的数据是离散计数特征(如文本词频),改用MultinomialNB;如果是二元特征,改用BernoulliNB
2. 读取并拆分数据集
假设你的CSV文件中,标签列名为label(根据实际列名修改):
# 读取训练集和测试集 train_data = pd.read_csv("trainset.csv") test_data = pd.read_csv("testset.csv") # 分离特征矩阵和标签向量 X_train = train_data.drop("label", axis=1) y_train = train_data["label"] X_test = test_data.drop("label", axis=1) y_test = test_data["label"]
3. 训练朴素贝叶斯模型
# 初始化模型 nb_model = GaussianNB() # 用训练集训练模型 nb_model.fit(X_train, y_train)
4. 模型预测与评估
# 对测试集做预测 y_pred = nb_model.predict(X_test) # 计算准确率(可替换为其他评估指标如precision、recall) accuracy = accuracy_score(y_test, y_pred) print(f"模型测试准确率: {accuracy:.2f}")
额外提示
- 如果数据存在缺失值,先用
fillna()填充(如X_train.fillna(X_train.mean(), inplace=True)) - 如果有类别型特征,需用
OneHotEncoder或LabelEncoder做编码转换,确保模型能处理数值型输入
内容的提问来源于stack exchange,提问作者ouzzan
相关产品推荐
相关产品推荐

