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

SVM绘制二分类决策边界出现KeyError及csr_matrix不可哈希错误求助

错误原因
  • 散点图调用时错误使用了原始文本数据集X_train而非向量化后的数值特征矩阵:X_train是存储新闻文本的Pandas Series,不支持[:,0]这种二维矩阵索引,因此触发KeyError。
  • 此前遇到的csr_matrix报错是因为Seaborn无法直接处理Sklearn生成的稀疏矩阵,需要先转成普通Numpy数组才能用于绘图。
  • 额外逻辑问题:当前设置的TfidfVectorizer(max_features=5)生成了5维特征,无法在2维平面绘制决策边界,需要将特征数调整为2。
修复方案

直接替换对应模块的代码即可:

# test/train split for X and Y
X_train, X_test, Y_train, Y_test = train_test_split(data['News'], data['Label'], test_size=0.2, random_state=21, shuffle=True)

# 调整TF-IDF向量化器仅输出2个特征,适配2D绘图需求
vectorize = TfidfVectorizer(max_features=2)
vectorize.fit(data['News'])

train_x_vectorize = vectorize.transform(X_train)
test_x_vectorize = vectorize.transform(X_test)

# SVM模型训练
SVM = svm.SVC(C=1, kernel='linear', gamma='auto')
SVM.fit(train_x_vectorize, Y_train)
pred = SVM.predict(test_x_vectorize)

# 绘图部分修改
plt.figure(figsize=(10, 8))
# 稀疏矩阵转稠密Numpy数组
train_x_arr = train_x_vectorize.toarray()
# 绘制散点图
sns.scatterplot(x=train_x_arr[:, 0], 
                y=train_x_arr[:, 1], 
                hue=Y_train, 
                s=8)
# 计算超平面参数
w = SVM.coef_[0]
b = SVM.intercept_[0]
# 根据实际特征范围生成x轴坐标点,避免超平面超出数据范围
x_points = np.linspace(train_x_arr[:,0].min(), train_x_arr[:,0].max())
y_points = -(w[0] / w[1]) * x_points - b / w[1]
plt.plot(x_points, y_points, c='r')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:02