图像识别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('精度曲线图');
目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第7天】本文将深入探讨卷积神经网络(CNN)的基本原理,以及它如何在图像识别领域中大放异彩。我们将从CNN的核心组件出发,逐步解析其工作原理,并通过一个实际的代码示例,展示如何利用Python和深度学习框架实现一个简单的图像分类模型。文章旨在为初学者提供一个清晰的入门路径,同时为有经验的开发者提供一些深入理解的视角。
|
3月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
111 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
3月前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第19天】在人工智能的浩瀚星海中,卷积神经网络(CNN)如同一颗璀璨的星辰,照亮了图像处理的天空。本文将深入CNN的核心,揭示其在图像识别领域的强大力量。通过浅显易懂的语言和直观的比喻,我们将一同探索CNN的奥秘,并见证它如何在现实世界中大放异彩。
|
15天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
93 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
10天前
|
机器学习/深度学习 数据采集 人工智能
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
层次化Softmax算法通过引入Huffman树结构,将传统Softmax的计算复杂度从线性降至对数级别,显著提升了大规模词汇表的训练效率。该算法不仅优化了计算效率,还在处理大规模离散分布问题上提供了新的思路。文章详细介绍了Huffman树的构建、节点编码、概率计算及基于Gensim的实现方法,并讨论了工程实现中的优化策略与应用实践。
57 15
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
|
27天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
本文旨在通过深入浅出的方式,为读者揭示卷积神经网络(CNN)的神秘面纱,并展示其在图像识别领域的实际应用。我们将从CNN的基本概念出发,逐步深入到网络结构、工作原理以及训练过程,最后通过一个实际的代码示例,带领读者体验CNN的强大功能。无论你是深度学习的初学者,还是希望进一步了解CNN的专业人士,这篇文章都将为你提供有价值的信息和启发。
|
24天前
|
机器学习/深度学习 自动驾驶 TensorFlow
深度学习与图像识别:探索神经网络的奥秘
在这篇文章中,我们将一同跳入深度学习的海洋,探索其如何改变我们处理和理解图像的方式。通过直观的代码示例和浅显易懂的解释,我们将揭开深度学习在图像识别领域应用的神秘面纱。无论你是编程新手还是深度学习爱好者,这篇文章都将为你开启一段新的认知旅程。让我们一起跟随代码的步伐,见证技术如何赋予机器“视觉”。
|
25天前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
89 1
|
1月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
1月前
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
52 4