我有一个简单的分类网络,它接受一个长度为2的向量,并进行整数预测。我试图更好地理解预测的决策边界。我有一个10,000个点的数据集,训练集的大小为9,000。特征是框[-1,1]^2,标签是长度为3的独热编码矢量。从link,我得到了一种绘制判定边界的方法,代码如下:
def plot_decision_boundary(X, y, model, steps=1000, cmap='Paired'):
"""
Function to plot the decision boundary and data points of a model.
Data points are colored based on their actual label.
"""
cmap = plt.get_cmap(cmap)
# Define region of interest by data limits
xmin, xmax = X[:,0].min() - 1, X[:,0].max() + 1
ymin, ymax = X[:,1].min() - 1, X[:,1].max() + 1
steps = 1000
x_span = np.linspace(xmin, xmax, steps)
y_span = np.linspace(ymin, ymax, steps)
xx, yy = np.meshgrid(x_span, y_span)
# Make predictions across region of interest
labels = model.predict(np.c_[xx.ravel(), yy.ravel()])
# Plot decision boundary in region of interest
z = labels.reshape(xx.shape)
fig, ax = plt.subplots()
ax.contourf(xx, yy, z, cmap=cmap, alpha=0.5)
# Get predicted labels on training data and plot
train_labels = model.predict(X)
ax.scatter(X[:,0], X[:,1], c=y, cmap=cmap, lw=0)
return(fig,ax)
在这里,我调用plot_decision_boundary(train_features, train_labels_onehot, model, cmap='RdBu')
来创建决策边界图(参见上面链接中的示例)。
1条答案
按热度按时间ovfsdjhp1#
因此,问题是,由于X是一个Pandas Dataframe ,它不能通过切片访问的方式,你这样做。
例如,
X[:,0]
不会给予 Dataframe X的第0列。相反,您有两个选择:使用
iloc
并按照您在此处尝试的方式创建切片:X.iloc[:,0]
以获取第0列。或者,如果您知道列名,则可以直接说
X["column_name"]
。您可以使用X.columns
来查找列名。