You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

朴素贝叶斯模型拟合报错请求排查:输入含NaN值(作者预测)

作者预测代码报错排查与解决

报错原因

训练时触发ValueError: Input contains NaN,核心原因是输入数据中存在缺失值(NaN)。MultinomialNB算法要求训练用的特征(content列)和标签(author列)必须无缺失值,原代码未处理数据缺失,导致模型训练前的校验环节失败。

NaN来源定位

NaN只能来自以下两个字段:

  • content列:部分文章内容为空,或CSV读取解析错误导致变成NaN
  • author列:部分作者信息缺失,存储为NaN

要精准定位,可在加载数据后添加两行检查代码:

# 统计content列缺失值数量
print("content列缺失数:", df['content'].isna().sum())
# 统计author列缺失值数量
print("author列缺失数:", df['author'].isna().sum())

执行后就能明确哪一列存在缺失,以及具体缺失条数。

解决方案

针对缺失值,优先采用删除缺失行的方式(适合缺失比例较低的场景);若缺失比例高,可考虑填充(比如content填充空字符串,author填充"Unknown",但标签填充可能影响模型精度)。

修改后的完整代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.metrics import classification_report

# 加载数据集
df = pd.read_csv('articles1.csv')

# 删除content或author列含NaN的行
df = df.dropna(subset=['content', 'author'])

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df['content'], df['author'], test_size=0.2, random_state=42)

# 创建模型流水线
model = make_pipeline(TfidfVectorizer(), MultinomialNB())

# 训练模型
model.fit(X_train, y_train)

# 模型评估(可选)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

内容的提问来源于stack exchange,提问作者ADEWUYI ADEGBITE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:26:35