【分类】基于PCA+Kmeans、PCA+LVQ、BP神经网络实现数据分类附matlab代码

简介: 【分类】基于PCA+Kmeans、PCA+LVQ、BP神经网络实现数据分类附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

BP 神经网络是一种单向传播的多层前向网络, 它除了有一个输入层和一个输出层之外, 还有一层或多层的隐层, 同层节点中没有任何耦合。输入信号从输入层节点一次传过各隐层节点, 然后传到输出节点, 每一层节点的输出只影响下一层节点的输出。BP 神经网络具有的非线性映射能力保证其能够成功实现各种简单或复杂分类, 其并行结构加速了运算速度。另外, BP 神经网络将信息分布式存储于连结权系数中, 使网络具有较高的容错性和鲁棒性。因此在目前的人工神经网络的实际应用中, 绝大部分的神经网络模型是采用 BP 神经网络及它的变化形式 。然而, 由于 BP神经网络输出层的结点数只能限制在一个较小的取值范围, 因而基于 BP 神经网络的分类器所不得不面临的一个问题就是如何才能够做到分类的细致和多样性。LVQ 神经网络能够通过竞争性的隐层传递函数, 根据目标的类别将输入向量进行组合分类。该网络由两层组成, 第一层为竞争层, 第二层为线性层。竞争层能够学习对输入向量的分类;线性层将竞争层传来的分类信息转变成使用者所定义的类别 。LVQ 神经网络的优势在于:它不仅能够对线性输入数据进行分类,而且还能处理多维的 、甚至是含噪含干扰的数据量。实验已经证明, 只要在各个隐层存在足够的神经元, 那么目标输出的分类量将会得到相应的增加。

⛄ 部分代码

clear all;

close all

wine_data = xlsread('wine.xlsx');


method = 'PL';%PK:PCA & Kmeans  PL:PCA & LVQ  BP:BP Neural Network'

rate = 0.7;%训练集70%,测试集30%

N = 3;


total_cnt = size(wine_data,1);

train_cnt = round(total_cnt*rate);

test_cnt = total_cnt - train_cnt;


rand_idx = randperm(total_cnt);

train_idx = rand_idx(1:train_cnt);

test_idx = rand_idx(train_cnt+1:total_cnt);


train_data = wine_data(train_idx,2:size(wine_data,2));

train_class = wine_data(train_idx,1);

test_data = wine_data(test_idx,2:size(wine_data,2));

test_class = wine_data(test_idx,1);

dim = size(wine_data,2)-1;


%矩阵z-score标准化

train_SM = zeros(train_cnt,dim);

data_mean = mean(train_data);

data_std = std(train_data);

test_SM = zeros(test_cnt,dim);

for j = 1:dim

   train_SM(:,j) = (train_data(:,j) - data_mean(j)) / data_std(j);

   test_SM(:,j) = (test_data(:,j) - data_mean(j)) / data_std(j);

end



%三种方法

switch method

   case 'PK'

       [DS, com_num, PV, score] = PCA(train_SM, 0.66,'ShowFigure');

       %初始化聚类中心

       center_init = zeros(3,com_num);

       for i = 1:N

           center_init(i,:) = mean(score(train_class==i,:));

       end

       [center, train_flag, ~, ~] = Kmeans(score, N,center_init,'ShowFigure');%k-means聚类

       test_score = test_SM * PV;     %测试集的评分

       test_flag = findMinIdx(test_score, center);

       

   case 'PL'

       [DS, com_num, PV, score] = PCA(train_SM, 0.66,'ShowFigure');

       [pv,train_flag] = LVQ(score, train_class, [], (1:N)', 0.1, 1000,'ShowFigure');%LVQ

       test_flag = findMinIdx(test_SM*PV, pv);

       

   case 'BP'

       target = (train_class - 1) / 2;

       net = newff(train_SM',target',10,{'tansig','purelin'},'traingdx');

       net.divideFcn = '';

       net.trainParam.show = 50;

       net.trainParam.epochs = 1000;

       net.trainParam.goal = 0.001;

       net.trainParam.lr = 0.01;

       net = train(net,train_SM',target');

       

       out = sim(net,train_SM');

       train_flag = round(out*2+1)';

       out = sim(net,test_SM');

       test_flag = round(out*2+1)';

   otherwise

       fprintf('check method\n');

       return;

end


train_correct_cnt = sum(train_flag(:,1) == train_class(:,1));

train_accuracy = train_correct_cnt / train_cnt   %训练集准确率


test_correct_cnt = sum(test_flag(:,1) == test_class(:,1));

test_accuracy = test_correct_cnt / test_cnt   %训练集准确率


figure;

plot(1:test_cnt,test_class(:,1),'bo');

hold on;

plot(1:test_cnt,test_flag(:,1),'r*');

legend('实际测试集分类','预测测试集分类');

title([method,',准确率=',num2str(test_accuracy)])

⛄ 运行结果

⛄ 参考文献

[1]钟淑瑛, 李陶深. 基于MATLAB的BP—LVQ神经网络组合分类模型[J]. 计算机技术与发展, 2006, 16(2):3.

⛳️ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料



相关文章
|
4天前
|
算法 数据安全/隐私保护
matlab程序,傅里叶变换,频域数据,补零与不补零傅里叶变换
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
4天前
|
数据安全/隐私保护
matlab 曲线光滑,去毛刺,去离群值,数据滤波,高通滤波,低通滤波,带通滤波,带阻滤波
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
4天前
|
数据安全/隐私保护
时域与频域数据互相转换,傅里叶变换与逆傅里叶变换,matlab程序,时域转频域
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
4天前
|
机器学习/深度学习 并行计算 算法
MATLAB|【免费】概率神经网络的分类预测--基于PNN的变压器故障诊断
MATLAB|【免费】概率神经网络的分类预测--基于PNN的变压器故障诊断
|
6天前
|
机器学习/深度学习 自然语言处理 运维
随机森林填充缺失值、BP神经网络在亚马逊评论、学生成绩分析研究2案例合集2
随机森林填充缺失值、BP神经网络在亚马逊评论、学生成绩分析研究2案例合集
|
6天前
|
机器学习/深度学习 存储 数据采集
随机森林填充缺失值、BP神经网络在亚马逊评论、学生成绩分析研究2案例合集1
随机森林填充缺失值、BP神经网络在亚马逊评论、学生成绩分析研究2案例合集
|
6天前
|
计算机视觉
MATLAB用Lasso回归拟合高维数据和交叉验证
MATLAB用Lasso回归拟合高维数据和交叉验证
|
7天前
|
机器学习/深度学习 存储 算法
m基于Yolov2深度学习网络的螺丝检测系统matlab仿真,带GUI界面
MATLAB 2022a中展示了YOLOv2算法的螺丝检测仿真结果,该系统基于深度学习的YOLOv2网络,有效检测和定位图像中的螺丝。YOLOv2通过批标准化、高分辨率分类器等优化实现速度和精度提升。核心代码部分涉及设置训练和测试数据,调整图像大小,加载预训练模型,构建YOLOv2网络并进行训练,最终保存检测器模型。
23 3
|
8天前
|
机器学习/深度学习 算法 数据可视化
基于深度学习网络的鞋子种类识别matlab仿真
使用GoogLeNet深度学习模型在matlab2022a中进行鞋子种类识别,利用Inception模块捕捉多尺度特征,提升分类精度。程序加载预训练模型`gnet.mat`,计算验证集的准确性并随机显示32个样本的预测结果及置信度。
|
3月前
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
48 0