我用Python编写了以下代码:
def plot_decision_regions(X, y, classifier, resolution = 0.02):
markers = ('s', 'x', 'o', '^','v')
colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
cmap = ListedColormap(colors[:len(np.unique(y))])
x1_min, x1_max = X[:, 0].min() -1, X[:,0].max() + 1
x2_min, x2_max = X[:, 1].min() -1, X[:,1].max() + 1
xx1, xx2= np.meshgrid (np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))
Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)
plt.contourf(xx1, xx2, Z, alpha= 0.3, cmap = cmap)
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
for idx, cl in enumerate (np.unique(y)):
plt.scatter (x=X[y == cl, 0], y= X[y == cl, 1], alpha=0.8, c=colors[idx], marker= markers [idx], label = cl, edgecolor = 'black')其中X是具有法线数据(2种花的花瓣和花瓣长度)的100x2向量,y是仅具有-1和1值(类别标签向量)和Classifier = Perceptron的100x1向量。我不知道为什么我需要计算转置
Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)什么是
classifier.predict 和
x=X[y == cl, 0], y= X[y == cl, 1]在……里面
plt.scatter (x=X[y == cl, 0], y= X[y == cl, 1], alpha=0.8, c=colors[idx], marker= markers [idx], label = cl, edgecolor = 'black')做?
我之前加载了一个数据帧,定义了我预测方法,定义了X和y
def predict(self,X):
'''Return class label after unit step'''
return np.where(self.net_input(X) >= 0.0, 1, -1)我的class = Perceptron包含在迭代时调整的权重( w_ )。如果我的英语不太好,我很抱歉
y = df.iloc[0:100 , 4] .values
y= np.where (y == 'Iris-setosa', -1, 1)
X= df.iloc[0:100, [0,2]].values发布于 2020-06-01 02:22:34
让我们先分解一下,首先:
np.array([xx1.ravel(), xx2.ravel()]).ravel()将xx1和xx2阵列展平。xx1和xx2只是以网格模式排列的坐标(分别用于feature1和feature2 )。想法是xx1和xx2是在特征集范围内的每个resolution间隔的坐标。有了足够的这些坐标,您就可以有效地知道哪些区域被您的分类器分类为什么标签。
np.array([xx1.ravel(), xx2.ravel()]).T需要转置的原因是因为.predict()方法需要一个大小为[n_samples, n_features]的数组作为输入。ravelled数组的结果将是[n_features, n_samples]大小,这就是我们需要转置的原因。
classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T这将对每个网格点进行预测(然后使用该预测在图上制作一个掩码,以显示哪些区域被分类器分类为什么标签)。
plt.scatter (x=X[y == cl, 0], y= X[y == cl, 1], alpha=0.8, c=colors[idx], marker= markers [idx], label = cl, edgecolor = 'black')在这里,我们绘制我们的样本。我们想要分别绘制每类样本(为了让它们具有不同的颜色),所以x=X[y == cl, 0]和y= X[y == cl, 1]说只在标签与我们正在检查的当前标签(即cl)相等的点上绘制点。cl将只是所有可能的唯一标签的迭代。
看到结果之后就更容易理解了(下面是一个使用make_blobs数据集和MLPClassifier的示例
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.datasets import make_blobs
from sklearn.neural_network import MLPClassifier
def plot_decision_regions(X, y, classifier, resolution = 0.02):
markers = ('s', 'x', 'o', '^','v')
colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
cmap = ListedColormap(colors[:len(np.unique(y))])
x1_min, x1_max = X[:, 0].min() -1, X[:,0].max() + 1
x2_min, x2_max = X[:, 1].min() -1, X[:,1].max() + 1
xx1, xx2= np.meshgrid (np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))
Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)
plt.contourf(xx1, xx2, Z, alpha= 0.3, cmap = cmap)
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
colors = ['red', 'blue', 'green']
X, y = make_blobs(n_features=2, centers=3)
for idx, cl in enumerate (np.unique(y)):
plt.scatter (x=X[y == cl, 0], y= X[y == cl, 1], alpha=0.8, c=colors[idx], label = cl, edgecolor = 'black')
classifier = MLPClassifier()
classifier.fit(X, y)
plot_decision_regions(X, y, classifier, resolution = 0.02)你会得到:

https://stackoverflow.com/questions/62119880
复制相似问题