吴裕雄 python 机器学习——人工神经网络感知机学习算法的应用

import numpy as np

from matplotlib import  pyplot as plt
from sklearn import neighbors, datasets
from matplotlib.colors import ListedColormap
from sklearn.neural_network import MLPClassifier

## 加载数据集
np.random.seed(0)
# 使用 scikit-learn  自带的 iris 数据集
iris=datasets.load_iris()
# 使用前两个特征,方便绘图
X=iris.data[:,0:2]
# 标记值
Y=iris.target
data=np.hstack((X,Y.reshape(Y.size,1)))
# 混洗数据。因为默认的iris 数据集:前50个数据是类别0,中间50个数据是类别1,末尾50个数据是类别2.混洗将打乱这个顺序
np.random.shuffle(data)
X=data[:,:-1]
Y=data[:,-1]
train_x=X[:-30]
train_y=Y[:-30]
# 最后30个样本作为测试集
test_x=X[-30:]
test_y=Y[-30:]

def plot_classifier_predict_meshgrid(ax,clf,x_min,x_max,y_min,y_max):
    ‘‘‘
     绘制 MLPClassifier 的分类结果

    :param ax:  Axes 实例,用于绘图
    :param clf: MLPClassifier 实例
    :param x_min: 第一维特征的最小值
    :param x_max: 第一维特征的最大值
    :param y_min: 第二维特征的最小值
    :param y_max: 第二维特征的最大值
    :return: None
      ‘‘‘
    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, cmap=plt.cm.Paired) 

def plot_samples(ax,x,y):
    ‘‘‘
        绘制二维数据集

        :param ax:  Axes 实例,用于绘图
        :param x: 第一维特征
        :param y: 第二维特征
        :return: None
      ‘‘‘
    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 mlpclassifier_iris():
    ‘‘‘
    使用 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 mlpclassifier_iris_hidden_layer_sizes():
    ‘‘‘
    使用 MLPClassifier 预测调整后的 iris 数据集。考察不同的 hidden_layer_sizes 的影响

    :return: None
    ‘‘‘
    fig=plt.figure()
    # 候选的 hidden_layer_sizes 参数值组成的数组
    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=10000,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()

mlpclassifier_iris_hidden_layer_sizes()

def mlpclassifier_iris_ativations():
    ‘‘‘
    使用 MLPClassifier 预测调整后的 iris 数据集。考察不同的 activation 的影响
    ‘‘‘
    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():
    ‘‘‘
    使用 MLPClassifier 预测调整后的 iris 数据集。考察不同的 algorithm 的影响

    :return: None
    ‘‘‘
    fig=plt.figure()
    algorithms=["lbfgs","sgd","adam"] # 候选的算法字符串组成的列表
    for itx,algo in enumerate(algorithms):
        ax=fig.add_subplot(1,3,itx+1)
        classifier=MLPClassifier(activation="tanh",max_iter=10000,hidden_layer_sizes=(30,),solver=algo)
        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("algorithm:%s;train score:%f;test score:%f"%(algo,train_score,test_score))
    plt.show()

mlpclassifier_iris_algorithms()

def mlpclassifier_iris_eta():
    ‘‘‘
    使用 MLPClassifier 预测调整后的 iris 数据集。考察不同的学习率的影响
    ‘‘‘
    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()

原文地址:https://www.cnblogs.com/tszr/p/10799600.html

时间: 2024-10-13 08:44:00

吴裕雄 python 机器学习——人工神经网络感知机学习算法的应用的相关文章

吴裕雄 python 机器学习——人工神经网络与原始感知机模型

import numpy as np from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D from sklearn.neural_network import MLPClassifier def creat_data(n): ''' 创建线性可分数据集 :param n: 正例样本的个数(同时也是负例样本的个数) :return: 返回一个线性可分数据集,数据集大小为 2*n ''' np.ra

吴裕雄 python 机器学习——集成学习随机森林RandomForestClassifier分类模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklearn.model_selection import train_test_split def load_data_classification(): ''' 加载用于分类问题的数据集 ''' # 使用 scikit-learn 自带的 digits 数据集 digits=datasets.load_d

吴裕雄 python 机器学习——集成学习梯度提升决策树GradientBoostingRegressor回归模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklearn.model_selection import train_test_split def load_data_regression(): ''' 加载用于回归问题的数据集 ''' #使用 scikit-learn 自带的一个糖尿病病人的数据集 diabetes = datasets.load_di

吴裕雄 python 机器学习——集成学习随机森林RandomForestRegressor回归模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklearn.model_selection import train_test_split def load_data_regression(): ''' 加载用于回归问题的数据集 ''' #使用 scikit-learn 自带的一个糖尿病病人的数据集 diabetes = datasets.load_di

吴裕雄 python 机器学习——集成学习AdaBoost算法分类模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklearn.model_selection import train_test_split def load_data_classification(): ''' 加载用于分类问题的数据集 ''' # 使用 scikit-learn 自带的 digits 数据集 digits=datasets.load_d

吴裕雄 python 机器学习——集成学习AdaBoost算法回归模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklearn.model_selection import train_test_split def load_data_classification(): ''' 加载用于分类问题的数据集 ''' # 使用 scikit-learn 自带的 digits 数据集 digits=datasets.load_d

吴裕雄 python 机器学习-KNN算法(1)

import numpy as np import operator as op from os import listdir def classify0(inX, dataSet, labels, k): dataSetSize = dataSet.shape[0] diffMat = np.tile(inX, (dataSetSize,1)) - dataSet sqDiffMat = diffMat**2 sqDistances = sqDiffMat.sum(axis=1) distan

吴裕雄 python 机器学习——K均值聚类KMeans模型

import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics import adjusted_rand_score from sklearn.datasets.samples_generator import make_blobs def create_data(centers,num=100,std=0.7): X, labels_true = make_b

吴裕雄 python 机器学习——聚类

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_blobs def create_data(centers,num=100,std=0.7): ''' 生成用于聚类的数据集 :param centers: 聚类的中心点组成的数组.如果中心点是二维的,则产生的每个样本都是二维的. :param num: 样本数 :param std: 每个簇