我的图像绘制不对劲,求老师和大佬帮忙

来源:3-5 神经网络对数据实现分类(下)

慕尼黑6639012

2018-09-08 14:40

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
from perceptron import perceptron

file ="data.csv"

def plot_decision_reqions(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()
    x2_min,x2_max = X[:,1].min() - 1 ,X[:,1].max()

    xx1,xx2 = np.meshgrid(np.arange(x1_min,x1_max,resolution),np.arange(x2_min,x2_max))

    Z = classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T)
    Z =Z.reshape(xx1.shape)
    plt.contourf(xx1,xx2,Z,alpha=0.4,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=cmap(idx),marker=markers[idx],label=cl)


df = pd.read_csv(file,header=None)
y = df.loc[0:99,4].values
y = np.where(y=='Iris-setosa',-1,1)
X =df.iloc[0:100,[0,2]].values

plt.scatter(X[:50,0],X[:50,1],color='red',marker='o',label='setosa')
plt.scatter(X[50:100,0],X[50:100,1],color='blue',marker='x',label='versicolor')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend(loc='upper left')

ppn = perceptron(eta=0.1,n_iter=10)
ppn.fit(X,y)
plt.plot(range(1,len(ppn.errors_)+1),ppn.errors_,marker='o')
plt.xlabel('Epocha')
plt.ylabel('按错误次数分')
plot_decision_reqions(X,y,ppn,resolution=0.02)
plt.show()

画出的图像是这样的:

https://img.mukewang.com/5b936ede00012c3c08870691.jpg

写回答 关注

1回答

  • 慕UI90311
    2018-10-23 20:02:23
    已采纳

    通过图上xlabel可以看到显示的是“Epocha”,是上一张图的横轴,

    plot_decision_reqions()的图画成这样应该是和上一张图叠加在一起显示了,建议在plot_decision_reqions(X,y,ppn,resolution=0.02)语句前面添加一句代码:plt.figure(),表示新建一个画板,这样就不会出现和上面的图叠加显示的情况了。

机器学习-实现简单神经网络

人工智能时代,你准备好成为抓住机遇的那百分之二吗。

66868 学习 · 182 问题

查看课程

相似问题