图像识别4:决策树+神经网络GUI+支持向量机实验

本文涉及的产品
图像搜索,7款服务类型 1个月
简介: 图像识别4:决策树+神经网络GUI+支持向量机实验

一、实验目的

熟练matlab中决策树的使用,初步掌握神经网络的搭建和使用,以及神经网络 GUI 的使用方法,了解支持向量机的使用方法;

二、实验内容及结果

1.使用决策数实现西瓜数据集2.0的分类(随机十次的结果取平均);

2.使用决策数实现鸢尾花的分类(随机十次的结果取平均) ;

3.画出十次实验的精度变化曲线图。

1.使用鸢尾花数据分为2组,每组各75个样本,每组中每种花各有25个样本。当中一组作为训练样本,另外一组作为测试样本,将3类花分别编号为1,2,3 ,实现神经网络实验;

2.分析网络层数及节点数对分类精度的影响;

3.掌握神经网络工具箱GUI操作(nntool)。

1.掌握 lib-svm 的安装,了解 libsvm 的使用和参数设置;

2.根据两类人脸图,实现二分类实验;

3.获得不同参数下的分类精度。

(1)决策树

划分方法和前几个实验一样,预测这里调的是C4_5的函数包。

决策树预测的10次精度分别为0.9600 0.9600 0.9000 0.9000 0.9400 0.9600 0.9600 0.8400 0.9600 0.9600,均值为0.9340,可以看到决策树预测的精度相比之前的欧式距离等提高了很多。

(2)神经网络

数据归一化,为了消除数量级的影响,同时收敛更快。最大最小标准化(Min-Max Normalization)使结果值映射到[0,1]之间,适用在数值比较集中的情况,其缺点为如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。

每类花依次分别取二分之一作训练、测试。这里采用eval函数,可以自动给变量赋名赋值。

注意调包时,需要测试集标签长这样:

使用newff函数进行神经网络的搭建。设置三层网络层中的节点数依次为[10,5,3],激活函数均为双曲正切 S 形函数(tansig)函数,训练算法采用常见的梯度下降 BP 训练函数,对应参数为’traingd’,神经网络训练的目标误差、周期、最大迭代次数、学习率分别为 50、500、0.01、0.01。

得到分类正确率为:97.333333%

改成两层神经网络后,分类正确率为:86.666667%

学习率改为0.1后,分类正确率为:64.000000%(十之八九),分类正确率为:94.666667%

改为1后,分类正确率为:93.333333%(十之八九),分类正确率为:48.000000%

(多次实验均为这个结果,不确定分类正确率上升的原因)

参考:https://www.cnblogs.com/yumoye/p/11055813.html

猜测:克服了因为学习率不够,而无法跳出鞍点的情况;

之前由于学习率过低,而处于过拟合状态。

绘制学习率变化的精度曲线图。01变化明显,1100几乎没有变化。

使用 matlab 的 nntool 工具箱做神经网络预测。

先进行数据预处理。

Performance 查看训练和测试的 mse(均方误差)的变化情况。

(3)支持向量机二分类实验

图片读取并保存(步骤和之前实验一样),并计算hog特征。

预测结果精度为40%

改变参数。

三、实验心得

通过本次实验,熟练matlab中决策树的使用,初步掌握神经网络的搭建和使用,以及神经网络 GUI 的使用方法,了解支持向量机的使用方法。通过实验发现了学习率的知识盲点,通过查阅文献及课本及时进行了查缺补漏。对数学与编程的应用中有了更深的理解,在老师和同学的帮助下,代码的时空复杂度降低,并且复用性得到了较大的提升。

四、实验源码

实验八 决策树预测

clc;clear;close all;
%% 数据预处理
% delimiterIn   = ','; % 字符分隔符
% data=importdata('iris.txt', delimiterIn);
% data=load('iris.data'); %ASCII 文件 iris.data 的行号 1 中的文本未知
data=load('data.mat');
data.iris(1:50,5)=ones(50,1);
data.iris(51:100,5)=2*ones(50,1);
data.iris(101:150,5)=3*ones(50,1);
for a=1:10
    disp(a);
    %% 划分训练集和测试集比例(2:1划分)
    e=round(length(data.iris(:,1))*2/3);
    num=randperm(length(data.iris)); %打乱列序列
    train_num=num(1:e); %取打乱序列的前60%
    test_num=num(e+1:end); %取打乱序列的后40% %end直到数组结尾
    % 划分数据
    traindata=data.iris(train_num,:); % 留出法的训练集
    testdata=data.iris(test_num,:); % 留出法的测试集
    % 划分data和label
    train_patterns=traindata(:,1:(size(traindata,2)-1));
    train_targets=traindata(:,size(traindata,2))';
    test_patterns=testdata(:,1:(size(testdata,2)-1));
    test_targets=testdata(:,size(testdata,2))';
    % 决策树预测
    [test_targets_predict]=C4_5(train_patterns',train_targets,test_patterns',5,10);
    temp_count=0;
    for i=1:size(test_targets_predict,2)
        if test_targets(:,i)==test_targets_predict(:,i)
            temp_count=temp_count+1;
        end
    end
    accuracy(a)=temp_count/size(test_targets,2);
    disp(accuracy);
end
%% 画出精度曲线图,通过曲线图分析噪声对两种方法的影响
x=[1:10];
plot(x,accuracy,'-*b')
axis([0 10 0 1])
% 设置坐标格
grid on;
% 设置字体格式
set(gca,'FontSize',15); xlabel('实验次数','fontsize',17);
ylabel('分类精度','fontsize',17);
title('精度曲线图');

实验九 神经网络

% 使用鸢尾花数据,将3类花分别编号为1,2,3。
% 每组中每种花各有25个样本,每组各75个样本,共2组。
% 当中一组作为训练样本,另外一组作为测试样本,实现神经网络实验;
clc;clear;close all;
% iris1(1:50,5)=ones(50,1);
% iris1(51:100,5)=2*ones(50,1);
% iris1(101:150,5)=3*ones(50,1);
%% 数据预处理
load('iris.mat');
data1=iris;
% 一行归一化
data2 = data1';
[data, PS] = mapminmax(data2(1:4,:));
data = data';
% 3类花分别编号为1,2,3
data(1:50,5)=ones(50,1); 
data(51:100,5)=2*ones(50,1);
data(101:150,5)=3*ones(50,1);
%% 划分数据
for i=1:3 
    eval(['temp',num2str(i),'=','find(data(:,5)==i)']); %自动给变量赋名和赋值
    % eval(['e',num2str(i),'=',round(length(eval(['temp',num2str(i)]))/2)]);
    e = round(length(eval(['temp',num2str(i)]))/2);
    num=randperm(length(eval(['temp',num2str(i)]))); %打乱列序列
    train_num=num(1:e); %取打乱序列的前50%
    test_num=num(e+1:end); %取打乱序列的后50% %end直到数组结尾
    % 划分数据
    if i==1
        traindata1=data(temp1(train_num),:); % 留出法的训练集
        testdata1=data(temp1(test_num),:); % 留出法的测试集
    end
    if i==2
        traindata2=data(temp2(train_num),:); % 留出法的训练集
        testdata2=data(temp2(test_num),:); % 留出法的测试集
    end
    if i==3
        traindata3=data(temp3(train_num),:); % 留出法的训练集
        testdata3=data(temp3(test_num),:); % 留出法的测试集
    end
end
traindata=[traindata1;traindata2;traindata3];
testdata=[testdata1;testdata2;testdata3];
X_train = traindata(:,1:4);
% x_label = traindata(:,5);
Y_test  = testdata(:,1:4);
Y_label = testdata(:,5);
x_label = zeros(length(X_train),3);
x_label(:,1)=ones(length(X_train),1); 
x_label(:,2)=2*ones(length(X_train),1); 
x_label(:,3)=3*ones(length(X_train),1); 
% 神经网络的搭建
A = minmax(X_train');
% 创建神经网络
net = newff(A, [10,5,3], {'tansig','tansig','tansig'}, 'traingd');
%设置训练参数
net.trainparam.show = 50;
net.trainparam.epochs = 500;
net.trainparam.goal = 0.01;
net.trainParam.lr = 0.01;
%开始训练
[net, tr, Y1, E] = train(net, X_train', x_label');
% 开始测试
Y = sim(net, Y_test');
% 统计识别正确率
[s1, s2] = size(Y);
true_num = 0;
for j = 1:s2
    [m ,index] = max(Y(:,j));
    if(index == Y_label(j))
        true_num = true_num + 1;
    end
end
fprintf("分类正确率为:%f%%\n",100*true_num/s2);

实验十 支持向量机

% 根据两类人脸图,实现二分类实验
clc;clear;close all;
warning('off') %关掉警告
base_path = 'D:\Desktop\大三上\神经网络\10\人脸图';
path = string();
subpath = dir( base_path );
%% 训练阶段  
%读取样本并计算hog特征  
all_imgnum=0;
for i = 1:length(subpath)-2 % 读取单文件夹下,all文件夹% 1,2分别是.和..% 先获取第一个子文件路径,然后获取第二个子文件路径
    sub_path = fullfile(base_path, subpath(i+2).name);% disp(sub_path); % D:\Desktop\大三上\神经网络\数据\MIT室内场景\airport_inside
    image_name = dir(sub_path); % 获取文件夹里的所有图像信息% disp(image_name(3).name); % airport_inside_0001.jpg
    img_num=length(image_name)-2; % 文件夹里图像个数% disp(img_num); % 608 405 197 662
    all_imgnum=all_imgnum+img_num;% disp(all_imgnum); % 608 1013 1210 1872
    %% 获取图片数据
    for j = 1:img_num % 获取子文件夹下图片的路径
        % fullfile函数利用文件各部分信息创建并合成完整文件名
        img_path = fullfile(sub_path, image_name(j+2).name); % 子文件夹+图片名称
        img_path
        read_img = imread(img_path); % 读图
        image = imresize(read_img, [64,64]);  % 图片统一大小,指定长宽[64,64]
        if(ndims(read_img)==3)
            read_img = rgb2gray(read_img);  % RGB图像转灰度图像
        end
        hog =hogcalculator(image); 
        data(all_imgnum-img_num+j,1:1764)=hog;
    end 
    % 存放图片label  % 定义标签,0:负样本 1:正样本
    label(all_imgnum-img_num+1:all_imgnum,1)=(i-1)*ones(img_num,1);
end
for i = 1:5
    [m,n]=size(data);
    %[Train, Test] = crossvalind('LeaveMOut',N, M);
    % 该命令返回一个逻辑值的标记向量,从N个观察样本中随机选取M个样本作为测试集。M的缺省值为1。值得注意的是,LeaveMOut在循环中使用不能保证产生的是互补集合,即每次循环的随机选取是独立的。如果要用互补的话还是使用Kfold命令。
    [train,test]=crossvalind('LeaveMOut',m,10);
    svmStruct = svmtrain(label(train),data(train,:),['-s '+ 4,'-v'+10,'-t'+i-1]);
    [prelabel,accuracy,decision_values]=svmpredict(label(test),data(test,:),svmStruct);     %预测
    accuracy1(i)=accuracy(1)/100;
end
x=[1:5];
plot(x,accuracy1,'-*b')
axis([0 5 0 1])
% 设置坐标格
grid on;
% 设置字体格式
set(gca,'FontSize',15); xlabel('t','fontsize',17);
ylabel('分类精度','fontsize',17);
title('精度曲线图');
目录
相关文章
|
30天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第7天】本文将深入探讨卷积神经网络(CNN)的基本原理,以及它如何在图像识别领域中大放异彩。我们将从CNN的核心组件出发,逐步解析其工作原理,并通过一个实际的代码示例,展示如何利用Python和深度学习框架实现一个简单的图像分类模型。文章旨在为初学者提供一个清晰的入门路径,同时为有经验的开发者提供一些深入理解的视角。
|
2月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
89 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
2月前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第19天】在人工智能的浩瀚星海中,卷积神经网络(CNN)如同一颗璀璨的星辰,照亮了图像处理的天空。本文将深入CNN的核心,揭示其在图像识别领域的强大力量。通过浅显易懂的语言和直观的比喻,我们将一同探索CNN的奥秘,并见证它如何在现实世界中大放异彩。
|
3月前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【8月更文挑战第28天】本文将深入探讨深度学习领域的核心概念之一——卷积神经网络(CNN),并展示其在图像识别任务中的强大能力。文章首先介绍CNN的基本结构,然后通过一个简单的代码示例来演示如何构建一个基础的CNN模型。接着,我们将讨论CNN如何处理图像数据以及它在图像分类、检测和分割等任务中的应用。最后,文章将指出CNN面临的挑战和未来的发展方向。
|
1天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
1天前
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
8 4
|
2月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
117 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
104 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第32天】本文将介绍深度学习中的一个重要分支——卷积神经网络(CNN),以及其在图像识别领域的应用。我们将通过一个简单的代码示例,展示如何使用Python和TensorFlow库构建一个基本的CNN模型,并对其进行训练和测试。
|
1月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第31天】本文旨在通过浅显易懂的语言和直观的比喻,为初学者揭开深度学习中卷积神经网络(CNN)的神秘面纱。我们将从CNN的基本原理出发,逐步深入到其在图像识别领域的实际应用,并通过一个简单的代码示例,展示如何利用CNN进行图像分类。无论你是编程新手还是深度学习的初学者,这篇文章都将为你打开一扇通往人工智能世界的大门。
下一篇
无影云桌面