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()

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

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

    import numpy as np from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D from ...

  2. 吴裕雄 python 机器学习——数据预处理字典学习模型

    from sklearn.decomposition import DictionaryLearning #数据预处理字典学习DictionaryLearning模型 def test_Diction ...

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

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

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

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

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

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

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

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

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

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  8. 吴裕雄 python 人工智能——基于神经网络算法在智能医疗诊断中的应用探索代码简要展示

    #K-NN分类 import os import sys import time import operator import cx_Oracle import numpy as np import ...

  9. 吴裕雄 python 机器学习——分类决策树模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_s ...

随机推荐

  1. 熵权法(the Entropy Weight Method)以及MATLAB实现

    按照信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量:如果指标的信息熵越小,该指标提供的信息量越小,在综合评价中所起作用理当越小,权重就应该越低.因此,可利用信息熵这个工 ...

  2. windows10(家庭版)+ laradock 安装踩坑记一记

    Docker 安装: 首先我们需要在系统安装 Docker 的免费社区版,官方提供 Windows.Mac 及 Linux 等版本下载:下载地址.下载操作系统对应版本后,按照引导流程安装,最后打开 D ...

  3. vue页面加载前显示{{代码}}的原因及解决办法

    进入正题,简单说说自己对html中出现{{}}的原因及解决办法: 这样写的话,就会出现{{}}一闪的情况: 原因:html的加载顺序: 解析html结构 -> 加载外部脚本和样式表文件 -> ...

  4. 在macOS 上添加 JAVA_HOME 环境变量

    If you are planing to develop Java Apps on your Mac, you may have to set $JAVA_HOME environment vari ...

  5. How to read a paper efficiently - by prof. Pete carr

    DON'T DO THAT: read the article from the beginning to end; it's a waste of time! READ A PAPER IN TWO ...

  6. redis五大数据类型以及常用操作命令

    Redis的五大数据类型 String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意 ...

  7. 363. 矩形区域不超过 K 的最大数值和(利用前缀和转化为最大子序和问题)

    题目: 链接:https://leetcode-cn.com/problems/max-sum-of-rectangle-no-larger-than-k/ 给定一个非空二维矩阵 matrix 和一个 ...

  8. Xlrd模块读取Excel文件数据

    Xlrd模块使用 excel文件样例:

  9. Cleaning Data in R

    目录 R 中清洗数据 常见三种查看数据的函数 Exploring raw data 使用dplyr包里面的glimpse函数查看数据结构 \(提取指定元素 ```{r} # Histogram of ...

  10. 巨杉TechDay回顾 | WARNING!您参加的数据库沙龙热度已爆表……

    自从2008年“大数据”这一概念被首次提出以来,在过去这10年中,几乎各行各业都或多或少受到了这一概念的影响.与此同时,在AI.云计算.物联网.区块链等新兴技术快速发展的今天,数据库己经成为了决定所有 ...