def decision_boundary(self, x, y, ax: plt.axis = None): """ Plot decision boundary and labeled data :param x: data :param y: true labels :param ax: matplotlib axes (optional) :return: None """ if ax is None: fig, ax = plt.subplots(figsize=(10, 10)) h = 0.02 x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1 y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) z = self.predict(np.c_[xx.ravel(), yy.ravel()]) z = z.reshape(xx.shape) ax.contourf(xx, yy, z, cmap=plt.cm.coolwarm, alpha=0.8) ax.scatter(x[:, 0], x[:, 1], c=y, cmap=plt.cm.coolwarm) ax.set_xlim(xx.min(), xx.max()) ax.set_ylim(yy.min(), yy.max()) ax.set_xticks(()) ax.set_yticks(()) plt.show()
def decision_boundary(self, x, y, name: str = '', ax: plt.axis = None): if ax is None: fig, ax = plt.subplots(figsize=(10, 10)) h = 0.02 x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1 y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) print(np.c_[xx.ravel(), yy.ravel()].shape) z = self.predict(np.c_[xx.ravel(), yy.ravel()]) z = z.reshape(xx.shape) ax.contourf(xx, yy, z, cmap=plt.cm.coolwarm, alpha=0.8) ax.scatter(x[:, 0], x[:, 1], c=y, cmap=plt.cm.coolwarm) ax.set_xlim(xx.min(), xx.max()) ax.set_ylim(yy.min(), yy.max()) ax.set_xticks(()) ax.set_yticks(()) if name: plt.savefig(os.path.join(os.getcwd(), name + '.png')) plt.clf() else: plt.show() plt.clf()