人工神经网络——多层神经网络的应用

加载数据

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import neighbors,datasets
np.random.seed(0)
iris=datasets.load_iris()
X=iris.data[:,0:2]
Y=iris.target
data=np.hstack((X,Y.reshape(Y.size,1)))
np.random.shuffle(data)
X=data[:,:-1]
Y=data[:,-1]
train_x=X[:-30]
test_x=X[-30:]
train_y=Y[:-30]
test_y=Y[-30:]

绘制样本点

def plot_samples(ax,x,y):
    n_classes=3
    plot_colors='bry'
    for i,color in zip(range(n_classes),plot_colors):
        idx=np.where(y==i)
        ax.scatter(x[idx,0],x[idx,1],c=color,label=iris.target_names[i],cmap=plt.cm.Paired)

分类预测的分布图

def plot_classifier_predict_meshgrid(ax,clf,x_min,x_max,y_min,y_max):
    plot_step=0.02
    xx,yy=np.meshgrid(np.arange(x_min,x_max,plot_step),
                     np.arange(y_min,y_max,plot_step))
    Z=clf.predict(np.c_[xx.ravel(),yy.ravel()])
    Z=Z.reshape(xx.shape)
    ax.contourf(xx,yy,Z,camp=plt.cm.Paired)

取最后30个数据作为测试集

def mlpclassifier_iris():
    fig=plt.figure()
    ax=fig.add_subplot(1,1,1)
    classifier=MLPClassifier(activation='logistic',max_iter=10000,hidden_layer_sizes=(30,))
    classifier.fit(train_x,train_y)
    train_score=classifier.score(train_x,train_y)
    test_score=classifier.score(test_x,test_y)
    x_min,x_max=train_x[:,0].min()-1,train_x[:,0].max()+2
    y_min,y_max=train_x[:,1].min()-1,train_x[:,1].max()+2
    plot_classifier_predict_meshgrid(ax,classifier,x_min,x_max,y_min,y_max)
    plot_samples(ax,train_x,train_y)
    ax.legend(loc='best')
    ax.set_xlabel(iris.feature_names[0])
    ax.set_ylabel(iris.feature_names[1])
    ax.set_title('train score:%f;test score:%f'%(train_score,test_score))
    plt.show()

mlpclassifier_iris()

不同的隐含层的影响

def mipclassifier_iris_hidden_layer_sizes():
    fig=plt.figure()
    hidden_layer_sizes=[(10,),(30,),(100,),(5,5),(10,10),(30,30)]
    for itx,size in enumerate(hidden_layer_sizes):
        ax=fig.add_subplot(2,3,itx+1)
        classifier=MLPClassifier(activation='logistic',max_iter=1000,
            hidden_layer_sizes=size)
        classifier.fit(train_x,train_y)
        train_score=classifier.score(train_x,train_y)
        test_score=classifier.score(test_x,test_y)
        x_min,x_max=train_x[:,0].min()-1,train_x[:,0].max()+2
        y_min,y_max=train_x[:,1].min()-1,train_x[:,1].max()+2
        plot_classifier_predict_meshgrid(ax,classifier,x_min,x_max,
            y_min,y_max)
        plot_samples(ax,train_x,train_y)
        ax.legend(loc='best')
        ax.set_xlabel(iris.feature_names[0])
        ax.set_ylabel(iris.feature_names[1])
        ax.set_title('layer_size:%s;train score:%f;test score:%f'%
            (size,train_score,test_score))
        plt.show()

mipclassifier_iris_hidden_layer_sizes()

激活函数的影响

def mlpclassifier_iris_ativations():
    fig=plt.figure()
    ativations=['logistic','tanh','relu']
    for itx,act in enumerate(ativations):
        ax=fig.add_subplot(1,3,itx+1)
        classifier=MLPClassifier(activation=act,max_iter=10000,
            hidden_layer_sizes=(30,))
        classifier.fit(train_x,train_y)
        train_score=classifier.score(train_x,train_y)
        test_score=classifier.score(test_x,test_y)
        x_min,x_max=train_x[:,0].min()-1,train_x[:,0].max()+2
        y_min,y_max=train_x[:,1].min()-1,train_x[:,1].max()+2
        plot_classifier_predict_meshgrid(ax,classifier,x_min,x_max,
            y_min,y_max)
        plot_samples(ax,train_x,train_y)
        ax.legend(loc='best')
        ax.set_xlabel(iris.feature_names[0])
        ax.set_ylabel(iris.feature_names[1])
        ax.set_title('activation:%s;train score:%f;test score:%f'%
            (act,train_score,test_score))
        plt.show()

mlpclassifier_iris_ativations()

优化算法的影响

def mlpclassifier_iris_algorithms():
    fig=plt.figure()
    solvers=['lbfgs','sgd','adam']
    for itx,solver in enumerate(solvers):
        ax=fig.add_subplot(1,3,itx+1)
        classifier=MLPClassifier(activation='tanh',max_iter=10000,
            hidden_layer_sizes=(30,),solver=solver)
        classifier.fit(train_x,train_y)
        train_score=classifier.score(train_x,train_y)
        test_score=classifier.score(test_x,test_y)
        x_min,x_max=train_x[:,0].min()-1,train_x[:,0].max()+2
        y_min,y_max=train_x[:,0].min()-1,train_x[:,0].max()+2
        plot_classifier_predict_meshgrid(ax,classifier,x_min,x_max,
            y_min,y_max)
        plot_samples(ax,train_x,train_y)
        ax.legend(loc='best')
        ax.set_xlabel(iris.feature_names[0])
        ax.set_ylabel(iris.feature_names[1])
        ax.set_title('solver:%s;train score:%f;test score:%f'%
            (solver,train_score,test_score))
    plt.show()

mlpclassifier_iris_algorithms()

η参数的影响

def mlpclassifier_iris_eta():
    fig=plt.figure()
    etas=[0.1,0.01,0.001,0.0001]
    for itx,eta in enumerate(etas):
        ax=fig.add_subplot(2,2,itx+1)
        classifier=MLPClassifier(activation='tanh',max_iter=1000000,
            hidden_layer_sizes=(30,),solver='sgd',learning_rate_init=eta)
        classifier.fit(train_x,train_y)
        iter_num=classifier.n_iter_
        train_score=classifier.score(train_x,train_y)
        test_score=classifier.score(test_x,test_y)
        x_min,x_max=train_x[:,0].min()-1,train_x[:,0].max()+2
        y_min,y_max=train_x[:,1].min()-1,train_x[:,1].max()+2
        plot_classifier_predict_meshgrid(ax,classifier,x_min,x_max,
            y_min,y_max)
        plot_samples(ax,train_x,train_y)
        ax.legend(loc='best')
        ax.set_xlabel(iris.feature_names[0])
        ax.set_ylabel(iris.feature_names[1])
        ax.set_title('eta:%f;train score:%f;test score:%f;iter_num:%d'%
            (eta,train_score,test_score,iter_num))
        plt.show()

mlpclassifier_iris_eta()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值