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
相关产品推荐
相关产品推荐

