如何使用MC1数据集绘制KNN决策边界图(附待调试代码)
如何修复MC1数据集KNN决策边界绘图代码
你的代码存在4个直接导致运行失败的问题,逐一修正即可正常出图:
- 错误1:
X, y = data_set是无效写法,pandas DataFrame不支持直接解包为特征和标签,必须通过iloc/loc明确指定列范围切分。 - 错误2:导入的
RadViz、make_moons全程未调用,属于冗余代码,不会直接导致报错但会干扰逻辑判断。 - 错误3:
DecisionViz是二维可视化工具,仅支持传入2个特征绘制平面决策边界,如果你传入超过2个特征会直接触发维度错误。 - 错误4:切分数据前没有做特征维度校验,高维特征直接传入标准化、训练流程会在绘图步骤才暴露问题,难以定位。
修正后可运行代码
下面的代码默认你的MC1数据集最后一列为Y/N格式的分类标签,取前2个数值特征绘制决策边界,如果你需要用指定的两个特征,修改iloc的列索引即可:
from sklearn.model_selection import train_test_split as tts from sklearn.preprocessing import StandardScaler import pandas as pd import numpy as np from sklearn.neighbors import KNeighborsClassifier from yellowbrick.contrib.classifier import DecisionViz from yellowbrick.style import set_palette set_palette('flatui') # 读取本地MC1数据集 data_set = pd.read_csv('MC1.csv') # 切分特征、标签:示例取前2列作为绘图特征,最后一列为分类标签 X = data_set.iloc[:, :2].values y = data_set.iloc[:, -1].values # 校验标签取值,对应调整classes参数 print("数据集标签类别:", np.unique(y)) # 特征标准化 X = StandardScaler().fit_transform(X) # 拆分训练、测试集 X_train, X_test, y_train, y_test = tts(X, y, test_size=.4, random_state=42) # 初始化KNN决策边界可视化器 viz = DecisionViz( KNeighborsClassifier(n_neighbors=5), title="KNN Nearest Neighbors Decision Boundary (MC1)", classes=['N', 'Y'] # 顺序和打印出的标签类别保持一致即可 ) viz.fit(X_train, y_train) viz.draw(X_test, y_test) viz.show()
额外注意事项
如果你需要保留全部特征的信息,不要直接截取两列,可以先用PCA将特征维度降到2维,再把降维后的特征传入可视化流程。
如果运行时出现类别不匹配报错,根据控制台打印出的实际标签值,调整classes参数的内容和顺序即可。
内容的提问来源于stack exchange,提问作者ahmad alomari
相关产品推荐
相关产品推荐

