支持向量机SVM七种运动分类

本文回顾了支持向量机(SVM)的基本概念,包括拉格朗日对偶问题、KKT条件和核函数。通过代码示例展示了如何进行数据预处理、训练集和测试集的划分以及SVM的多分类实现,方法包括一对一和一对多策略。此外,还提及了自动优化超参数的重要性。
摘要由CSDN通过智能技术生成

目录

 支持向量机回顾:

数据背景:

 SVM分类方案:

代码(方法1):

代码(方法2):

代码流程图:

多分类(一对一,一对多)

 自动优化超参数:

 总结:

 参考文献:


 支持向量机回顾:

 拉格朗日对偶问题“拉格朗日对偶问题”如何直观理解?“KKT条件” “Slater条件” “凸优化”打包理解_哔哩哔哩_bilibili

什么是软间隔

【数之道27】详解SVM支持向量机软间隔数学思想_哔哩哔哩_bilibili

惩罚因子和松弛变量都是什么,及其区别【数之道27】详解SVM支持向量机软间隔数学思想_哔哩哔哩_bilibili

SVM如何使用核函数映射到高维空间 【数之道26】SVM支持向量机-核技巧Kernel Trick详解(多项式核函数,无限维度高斯核函数)_哔哩哔哩_bilibili

数据背景:

数据来源链接:

CRCV | Center for Research in Computer Vision at the University of Central Florida

 

 SVM分类方案:

代码(方法1):

clc; close all; clear all;
 
%% ——————提取所有S0Xall_feature.xlsx文件信息结构体——————————————
excel_path='H:\newdata\';
data_path_list=dir(strcat(excel_path,'*.xlsx'));
data_name=(string({data_path_list.name}))';
DX_data_name=data_name(1:length(data_name),1); 
 
 
%% ——————批量读取S0Xall_feature.xlsx——————————————
n=length(DX_data_name); 
K=[]; 
zhonglei=[1;1;1;1;1;2;2;2;2;2;3;3;3;3;3;4;4;4;4;4;5;5;5;5;5;6;6;6;6;6;7;7;7;7;7];
for i=1:n  
    F=[]; 
    for sheet=1:3
        F_i=xlsread(char(strcat(excel_path,DX_data_name(i))),sheet,"A1:D35");
        F=[F F_i]; 
    end
    F=[F zhonglei]; 
    K=[K; F];
end
pathout_all = 'H:\S0Xall_feature_labled.xlsx';
xlswrite(pathout_all,K,1,'A1');
 
%% ——————分离训练数据和测试数据————————————
Train=[K(1:5:end,:);K(2:5:end,:);K(5:5:end,:);K(4:5:end,:)];
Test=K(3:5:end,:); 
pathout_train = 'H:\Train_dataset.xlsx';
xlswrite(pathout_train,Train,1,'A1');
pathout_test = 'H:\Test_dataset.xlsx';
xlswrite(pathout_test,Test,1,'A1');
 
%% ————————————SVM 多分类(一对多)————————————
TrainingSet=Train(:,1:12); 
TestSet=Test(:,1:12); 
GroupTrain=Train(:,13); 
results =my_MultiSvm(TrainingSet, GroupTrain, TestSet);
disp('multi class problem');

key=Test(:,13);
percentage=length(find(results==key))/0.63;
p=['分类准确率为', num2str(percentage) , '%'];
disp(p);

%%————————算法函数——————————
function [y_predict,models] = my_MultiSvm(X_train, y_train, X_test)
y_labels = unique(y_train);  
n_class = size(y_labels, 1);  
models = cell(n_class, 1); 
for i = 1:n_class 
    class_i_place = find(y_train == y_labels(i));
    svm_train_x = X_train(class_i_place,:);  
    sample_num = numel(class_i_place);
    class_others = find(y_train ~= y_labels(i)); 
    svm_train_x = [svm_train_x; X_train(class_others,:)];
    svm_train_y = [ones(sample_num, 1); -1*ones(size(class_others,1), 1)];
    disp(['生成模型:', num2str(i)])
models{i} = fitcsvm(svm_train_x, svm_train_y ,'Standardize',true,'KernelFunction','RBF',...
    'KernelScale','auto');
end
test_num = size(X_test, 1); 
y_predict = zeros(test_num, 1); 
for i = 1:test_num  
    if mod(i, 63) == 0  
        disp(['预测个数:', num2str(i)])
    end
    bagging = zeros(n_class, 1); 
    for j = 1:n_class 
        model = models{j};
        [label, rat] = predict(model, X_test(i,:)); 
        bagging(j) = bagging(j) + rat(2);
    end
    [maxn, maxp] = max(bagging);
    y_predict(i) = y_labels(maxp);
end
end

代码(方法2):

clc; close all; clear all;
 
%% ——————提取所有S0Xall_feature.xlsx文件信息结构体——————————————
excel_path='H:\newdata\';
data_path_list=dir(strcat(excel_path,'*.xlsx'));
data_name=(string({data_path_list.name}))';
DX_data_name=data_name(1:length(data_name),1); 
 
 
%% ——————批量读取S0Xall_feature.xlsx——————————————
n=length(DX_data_name); 
K=[]; 
zhonglei=[1;1;1;1;1;2;2;2;2;2;3;3;3;3;3;4;4;4;4;4;5;5;5;5;5;6;6;6;6;6;7;7;7;7;7];
for i=1:n  
    F=[]; 
    for sheet=1:3
        F_i=xlsread(char(strcat(excel_path,DX_data_name(i))),sheet,"A1:D35");
        F=[F F_i]; 
    end
    F=[F zhonglei]; 
    K=[K; F];
end
pathout_all = 'H:\S0Xall_feature_labled.xlsx';
xlswrite(pathout_all,K,1,'A1');
 
%% ——————分离训练数据和测试数据————————————
Train=[K(1:5:end,:);K(2:5:end,:);K(5:5:end,:);K(4:5:end,:)];
Test=K(3:5:end,:); 
pathout_train = 'H:\Train_dataset.xlsx';
xlswrite(pathout_train,Train,1,'A1');
pathout_test = 'H:\Test_dataset.xlsx';
xlswrite(pathout_test,Test,1,'A1');

%% ————————————SVM 多分类(一对一)————————————
X_train=Train(:,1:12);%训练数据
y_train=Train(:,13);%训练标签
X_test=Test(:,1:12);%测试数据


classifier =fitcecoc(X_train,y_train,'OptimizeHyperparameters','all', ...
'HyperparameterOptimizationOptions', ...
struct('AcquisitionFunctionName', 'expected-improvement-plus'));

CVSVMModel = crossval(classifier); % 10-fold by default
loss = kfoldLoss(CVSVMModel) %估算泛化误差

y_predict = predict(classifier, X_test);
disp('multi class problem')
key=Test(:,13);
% disp([key y_predict]);

percentage=length(find(y_predict==key))/0.63;

p=['分类准确率为', num2str(percentage) , '%'];
disp(p);

ConfMat=confusionchart(key, y_predict)
ConfMat.InnerPosition = [0.10 0.10 0.85 0.85];

 

代码流程图:

 

多分类(一对一,一对多)

 自动优化超参数:

 总结:

 参考文献:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值