解决Python中DecisionTreeClassifier拟合时的Input contains NaN错误
解决决策树训练时的NaN输入错误
1. 先定位缺失值位置
先检查原始数据中tweet和labels列的缺失值情况:
# 打印两列的缺失值数量 print(df[["tweet", "labels"]].isna().sum())
若labels列存在缺失值
标签缺失的样本无法参与训练,直接删除这些行:
# 删除标签为空的行 df = df.dropna(subset=["labels"]) # 重新生成特征和标签数组 x = np.array(df["tweet"]) y = np.array(df["labels"])
若tweet列存在缺失值
CountVectorizer无法处理空文本,先将缺失的tweet替换为空字符串:
# 填充空的tweet为占位符 df["tweet"] = df["tweet"].fillna("") x = np.array(df["tweet"])
2. 处理稀疏矩阵中的NaN(若仍存在)
CountVectorizer生成的是稀疏矩阵,直接用fill(0)不生效,可通过以下方式处理:
# 方式1:转换为稠密矩阵后填充0 x = cv.fit_transform(x).toarray() x = np.nan_to_num(x, nan=0)
如果担心内存占用过大,用稀疏矩阵专属处理方式:
# 方式2:直接修改稀疏矩阵的非空值 x = cv.fit_transform(x) x.data = np.nan_to_num(x.data, nan=0)
3. 重新执行训练流程
处理完缺失值后,重新运行分割和训练代码:
cv = CountVectorizer() x = cv.fit_transform(x) x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.25, random_state=42) clf = DecisionTreeClassifier() clf.fit(x_train,y_train)
内容的提问来源于stack exchange,提问作者dharani reddy
相关产品推荐
相关产品推荐

