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

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 【分类】基于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电子书和数学建模资料



相关文章
|
10月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
622 2
|
10月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
240 8
|
10月前
|
机器学习/深度学习 缓存 算法
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
714 1
|
9月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
1144 0
|
10月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
658 0
|
11月前
|
机器学习/深度学习 数据采集 传感器
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
319 0
|
10月前
|
机器学习/深度学习 传感器 算法
【表面粗糙度】基于粒子群PSO算法优化-BP神经网络的表面粗糙度研究(Matlab代码实现)
【表面粗糙度】基于粒子群PSO算法优化-BP神经网络的表面粗糙度研究(Matlab代码实现)
394 7
|
10月前
|
机器学习/深度学习 算法 数据可视化
PINN物理信息神经网络用于求解二阶常微分方程(ODE)的边值问题研究(Matlab代码实现)
PINN物理信息神经网络用于求解二阶常微分方程(ODE)的边值问题研究(Matlab代码实现)
482 6
|
10月前
|
机器学习/深度学习 传感器 分布式计算
基于模糊RBF神经网络轨迹跟踪研究(Matlab代码实现)
基于模糊RBF神经网络轨迹跟踪研究(Matlab代码实现)
341 1
|
10月前
|
机器学习/深度学习 移动开发 编解码
基于人工神经网络的类噪声环境声音声学识别(Matlab代码实现)
基于人工神经网络的类噪声环境声音声学识别(Matlab代码实现)
239 1