2021年人工神经网络第四次作业要求:第七题
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年人工神经网络第四次作业要求:第七题相关的知识,希望对你有一定的参考价值。
简 介: 对于MATLAB中的SimpleClass数据集合,对比了BP,RBF,SVM,SOFM,DHNN 等方法分类结果,可以看到BP,RBF,SVM,SOFM都具有非常好的分类效果。DHNN对于这样的问题处理能力非常差。
关键词
: BF,SVM,MATLAB
§01 作业总体要求
1.1 作业要求
根据 2021年人工神经网络第四次作业要求 中的要求,第七题要求对于来自于MATLAB中的六个用于分类的题目,尝试BP、RBF、SVM、SOM、DHNN网络进行分裂。这六个数据集合分别为:
* simpleclass_dataset
* iris_dataset
* cancer_dataset
* thynoid_dataset
* glass_dataset
* wine_dataset
1.2 数据集合
上述数据集合都可以很方便在MATLAB环境里进行调入。如果不适用MATLAB完成作业,比如使用Python语言来实现算法,则需要重新寻找这些数据集合来源。
1.2.1 dataset
这个数据集合可以使用 应用在机器学习中的聚类数据集产生方法 中的点簇形数据集产生改数据集合。
▲ 图1.2.1 SimpleClass_dataset
借助于sklear.datasets中的 make_blobs 函数,可以产生不通中心分布的随机点簇。
(1)产生数据集合
x,y = make_blobs(n_samples = 2000, n_features=2,
centers=[(0,0), (0, 1), (1,0), (1,1)],
cluster_std=0.15,
random_state=0)
print("len(x): ".format(len(x)), "len(y): ".format(len(y)))
plt.figure(figsize=(10,10))
plt.scatter(x[:,0],x[:,1], marker='+')
plt.show()
▲ 图1.2.4 利用sklearn_datasets产生数据
x,y = make_blobs(n_samples = 2000, n_features=2,
centers=[(0,0), (0, 1), (1,0), (1,1)],
cluster_std=0.15)
print("len(x): ".format(len(x)), "len(y): ".format(len(y)))
1.2.2 Dataset
在 GIthub Gist iris Dataset 直接给出了数据的数据。
原始的数据可以在 Iris Data Set 下载。
▲ IRIS Dataset
- iris.data : https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
- iris.names : https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.names
在 The Iris Dataset? 回执了Iris数据分布。
▲ 图1.2.4 Iris数据3D视图
▲ 图1.2.5 Sepal Length yu Sepal Width 分布
§02 简单数据
下面基于simpleclass_dataset,对比不同分类方法的方案。
2.1 BP算法
2.1.1 数据产生
使用sklearn_dataset的make_blobs产生所需要的数据集合。
(1)产生2000训练样本
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
from sklearn.datasets import make_blobs
x,y = make_blobs(n_samples = 2000, n_features=2,
centers=[(0,0), (0, 1), (1,0), (1,1)],
cluster_std=0.15,
random_state=0)
yset = list(set(y))
print("yset: ".format(yset), "len(y): ".format(len(y)))
yset: [0, 1, 2, 3]
len(y): 2000
(2)观察数据
plt.figure(figsize=(10,10))
colors = ['red', 'blue', 'green', 'cyan']
for id in yset:
data = x[where(y==id)]
plt.scatter(data[:,0], data[:,1], color=colors[id], marker='+')
▲ 图4.1.1 测试数据分布
2.1.2 构建数据加载函数
import paddle
class Dataset(paddle.io.Dataset):
def __init__(self, num_samples):
super(Dataset, self).__init__()
self.num_samples = num_samples
def __getitem__(self, index):
data = array(x[index])
label = array([y[index]])
return paddle.to_tensor(data,dtype='float32'), paddle.to_tensor(label,dtype='int64')
def __len__(self):
return self.num_samples
_dataset = Dataset(len(x))
train_loader = paddle.io.DataLoader(_dataset, batch_size=10, shuffle=True)
x,y = train_loader().next()
print("x: ".format(x),"y: ".format(y))
x: Tensor(shape=[10, 2], dtype=float32, place=CPUPlace, stop_gradient=True,
[[-0.36563465, 1.16723871],
[ 0.86872679, -0.08902805],
[ 0.95345336, 1.01571321],
[ 1.00709569, 1.03594363],
[ 0.94699496, 1.11144269],
[-0.22535948, -0.26665005],
[-0.17097037, 0.11774363],
[ 0.06393881, 0.10153621],
[-0.07542250, 0.36186805],
[-0.15472236, 0.78550130]])
y: Tensor(shape=[10, 1], dtype=int64, place=CPUPlace, stop_gradient=True,
[[1],
[2],
[3],
[3],
[3],
[0],
[0],
[0],
[0],
[1]])
2.1.3 构建BP网络
利用paddle构建单隐层BP网络。
class bpnet(paddle.nn.Layer):
def __init__(self, ):
super(bpnet, self).__init__()
self.L1 = paddle.nn.Linear(in_features=2, out_features=10)
self.L2 = paddle.nn.Linear(in_features=10, out_features=4)
def forward(self, x):
x = self.L1(x)
x = paddle.nn.functional.sigmoid(x)
x = self.L2(x)
return x
model = bpnet()
paddle.summary(model, (10,2))
---------------------------------------------------------------------------
Layer (type) Input Shape Output Shape Param #
===========================================================================
Linear-9 [[10, 2]] 2021年人工神经网络第四次作业:基于MATLAB的求解