2021年人工神经网络第四次作业要求:第七题

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年人工神经网络第四次作业要求:第七题相关的知识,希望对你有一定的参考价值。

简 介: 对于MATLAB中的SimpleClass数据集合,对比了BP,RBF,SVM,SOFM,DHNN 等方法分类结果,可以看到BP,RBF,SVM,SOFM都具有非常好的分类效果。DHNN对于这样的问题处理能力非常差。

关键词 BFSVMMATLAB

作业总体要求
文章目录
作业要求
数据集合
简单数据
BP算法
RBF算法
SVM算法
SOFM算法
DHNN算法

 

§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

  在 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的求解

2021年人工神经网络第四次作业-第四题:旋转的数字

2021年人工神经网络第四次作业 - 第三题Cifar10

2021年人工神经网络第四次作业-第五题:危险品识别

2022年秋季学期人工神经网络第四次作业

2021年人工神经网络第四次作业 - 第二题MNIST手写体识别