首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的Classifier.predict

Python中的Classifier.predict
EN

Stack Overflow用户
提问于 2020-06-01 01:19:57
回答 1查看 349关注 0票数 1

我用Python编写了以下代码:

代码语言:javascript
复制
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向量。我不知道为什么我需要计算转置

代码语言:javascript
复制
Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)

什么是

代码语言:javascript
复制
classifier.predict 

代码语言:javascript
复制
x=X[y == cl, 0], y= X[y == cl, 1]

在……里面

代码语言:javascript
复制
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')

做?

我之前加载了一个数据帧,定义了我预测方法,定义了Xy

代码语言:javascript
复制
def predict(self,X):
    '''Return class label after unit step'''
    return np.where(self.net_input(X) >= 0.0, 1, -1)

我的class = Perceptron包含在迭代时调整的权重( w_ )。如果我的英语不太好,我很抱歉

代码语言:javascript
复制
y = df.iloc[0:100 , 4] .values
y= np.where (y == 'Iris-setosa', -1, 1)

X= df.iloc[0:100, [0,2]].values
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-01 02:22:34

让我们先分解一下,首先:

代码语言:javascript
复制
np.array([xx1.ravel(), xx2.ravel()])

.ravel()xx1xx2阵列展平。xx1xx2只是以网格模式排列的坐标(分别用于feature1和feature2 )。想法是xx1xx2是在特征集范围内的每个resolution间隔的坐标。有了足够的这些坐标,您就可以有效地知道哪些区域被您的分类器分类为什么标签。

代码语言:javascript
复制
np.array([xx1.ravel(), xx2.ravel()]).T

需要转置的原因是因为.predict()方法需要一个大小为[n_samples, n_features]的数组作为输入。ravelled数组的结果将是[n_features, n_samples]大小,这就是我们需要转置的原因。

代码语言:javascript
复制
classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T

这将对每个网格点进行预测(然后使用该预测在图上制作一个掩码,以显示哪些区域被分类器分类为什么标签)。

代码语言:javascript
复制
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的示例

代码语言:javascript
复制
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)

你会得到:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62119880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档