python - Python 中的 Classifier.predict
问题描述
我在 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
是一个 100x2 向量,具有正常数据(两种花的萼片和花瓣长度),y
是一个 100x1 向量,只有 -1 和 1 个值(类标签向量)和Classifier = Perceptron
。我不知道为什么我需要计算转置
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)
myclass = 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
解决方案
让我们先分解一下:
np.array([xx1.ravel(), xx2.ravel()])
.ravel()
展平xx1
和xx2
数组。xx1
并且xx2
只是以网格模式排列的坐标(分别用于 feature1 和 feature2)。想法是xx1
和是特征集范围内每个间隔的xx2
坐标。resolution
有了足够多的这些坐标,您就可以有效地知道哪些区域被您的分类器分类为什么标签。
np.array([xx1.ravel(), xx2.ravel()]).T
您需要转置的原因是该.predict()
方法需要一个 size 数组作为输入[n_samples, n_features]
。散列数组的结果将是 size [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)
推荐阅读
- angular - forkJoin 和拦截器一起不起作用
- r - R 中的 tidyverse VS dplyr - 处理能力/性能
- python - 如何在设备 IP 地址上运行 Django 服务器?
- python - UnboundError 来自 dict.get()
- javascript - 有没有办法将 javascript 对象转换为字符串?
- c# - Application.Run 试图读取或写入受保护的内存
- python - 在 Plotly 中创建 3D Streamtube 图
- javascript - 单击后自定义复选框 false 或 true
- reporting-services - SSRS:图例工具提示在我的应用程序中不支持法语特殊字符
- c# - 拖放有时有效,有时无效