运行plot_2d_classification代码遇NameError,求解决建议
解决
plot_2d_classification未定义的问题 我正在学习在线教材《Applied Machine Learning in Python》的Supervised Learning章节,运行章节末尾的以下代码时:
fig, axes = plt.subplots(2, 2, figsize=(8, 8)) for ax, n_neighbors in zip(axes.ravel(), [3, 5, 11, 33]): ax.set_title(f"n_neighbors={n_neighbors}") clf = KNeighborsClassifier(n_neighbors=n_neighbors).fit(X_train[['mean compactness', 'worst concave points']], y_train) ax.scatter(X_train['mean compactness'], X_train['worst concave points'], c=y_train, cmap='bwr', s=2) plot_2d_classification(clf, np.array(X_train[['mean compactness', 'worst concave points']]), ax=ax, alpha=.4, cmap='bwr') ax.set_aspect("equal") ax.set_xlim(0.05, 0.17) ax.set_ylim(0.06, 0.2)
Jupyter Notebook返回以下错误:
NameError Traceback (most recent call last) Input In [24], in <cell line: 2>() 4 clf = KNeighborsClassifier(n_neighbors=n_neighbors).fit(X_train[['mean compactness', 'worst concave points']], y_train) 5 ax.scatter(X_train['mean compactness'], X_train['worst concave points'], c=y_train, cmap='bwr', s=2) 6 plot_2d_classification(clf, np.array(X_train[['mean compactness', 'worst concave points']]), ax=ax, alpha=.4, cmap='bwr') 7 ax.set_aspect("equal") 8 ax.set_xlim(0.05, 0.17) NameError: name 'plot_2d_classification' is not defined
该代码本应生成4幅分类图。我已搜索plot_2d_classification但未获得有效信息,找到A. Mueller的plot_2d_separator.py和plot_helpers.py文件,复制相关代码后仍出现其他错误,无法成功运行,恳请提供解决建议。
解决方法
plot_2d_classification是该课程自定义的辅助函数,不属于通用Python库,可通过以下两种方式解决:
方法1:手动实现plot_2d_classification函数
在原代码前添加以下函数定义,该函数会生成分类器的决策边界并填充区域:
import numpy as np import matplotlib.pyplot as plt def plot_2d_classification(clf, X, ax=None, alpha=0.4, cmap='bwr'): if ax is None: ax = plt.gca() # 创建覆盖数据范围的网格 x_min, x_max = X[:, 0].min() - 0.1, X[:, 0].max() + 0.1 y_min, y_max = X[:, 1].min() - 0.1, X[:, 1].max() + 0.1 xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100)) # 预测网格点的分类结果 Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) # 填充决策区域 ax.contourf(xx, yy, Z, alpha=alpha, cmap=cmap) return ax
方法2:使用sklearn官方替代函数(sklearn 1.0+版本适用)
如果你的scikit-learn版本在1.0及以上,可直接用官方的DecisionBoundaryDisplay替代原代码中的plot_2d_classification调用:
- 先导入模块:
from sklearn.inspection import DecisionBoundaryDisplay
- 替换原代码中第6行:
DecisionBoundaryDisplay.from_estimator( clf, X_train[['mean compactness', 'worst concave points']], ax=ax, alpha=0.4, cmap='bwr' )
额外检查项
- 确保已导入所有必要库:
import matplotlib.pyplot as plt、from sklearn.neighbors import KNeighborsClassifier、import numpy as np - 若之前复制第三方辅助代码出错,大概率是依赖的其他自定义函数缺失,手动实现核心功能更可靠
内容的提问来源于stack exchange,提问作者Dynamic1
相关产品推荐
相关产品推荐

