 
		慕尼黑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()画出的图像是这样的:

 
				通过图上xlabel可以看到显示的是“Epocha”,是上一张图的横轴,
plot_decision_reqions()的图画成这样应该是和上一张图叠加在一起显示了,建议在plot_decision_reqions(X,y,ppn,resolution=0.02)语句前面添加一句代码:plt.figure(),表示新建一个画板,这样就不会出现和上面的图叠加显示的情况了。
机器学习-实现简单神经网络
67124 学习 · 186 问题
相似问题