function [ knnacc, lsacc, svmacc, parameters ] = crossvalidation( X, y)
disp 'crossvalidation';
[n,d] = size(X);
m = floor(0.1*n);
fold5 = floor(m/5);
mod5 = 0;
if(fold5*5 ~= m)
mod5 = m-fold5*5;
fold5 = fold5+1;
end
knn_acc = zeros(10,1);
ls_acc = zeros(10,1);
svm_acc = zeros(10,1);
knn_k = [1 3 5 10 15];
knn_accu = zeros(size(knn_k,2),1);
ls_lambda = [0.01 0.1 0.5 1 5 10 100];
ls_accu = zeros(size(ls_lambda,2),1);
svm_C = [1 2 5 10 20 50];
svm_C_accu = zeros(size(svm_C,2),1);
svm_sigma = [0.1 0.2 0.4 0.6 0.8 1];
svm_C_sigma_accu = zeros(size(svm_C,2),size(svm_sigma,2));
parameters = zeros(4,10);
for i = 1:10
i
randomArr = randperm(n);
traindata = X(randomArr(1:m),:);
ytrain = y(randomArr(1:m),:);
testdata = X(randomArr(m+1:end),:);
ytest = y(randomArr(m+1:end),:);
for j = 1:5
if(j == 5)
testj = traindata(m+2-fold5:end,:);
ytestj = ytrain(m+2-fold5:end,:);
trainj = traindata(1:m+1-fold5,:);
ytrainj = ytrain(1:m+1-fold5,:);
else if(j <= mod5 | mod5 == 0)
testj = traindata(fold5*(j-1)+1:fold5*j,:);
ytestj = ytrain(fold5*(j-1)+1:fold5*j,:);
trainj = traindata([1:fold5*(j-1) fold5*j+1:end],:);
ytrainj = ytrain([1:fold5*(j-1) fold5*j+1:end],:);
else
testj = traindata(fold5*mod5+fold5*(j-1-mod5)+1:fold5*mod5+fold5*(j-mod5)-1,:);
ytestj = ytrain(fold5*mod5+fold5*(j-1-mod5)+1:fold5*mod5+fold5*(j-mod5)-1,:);
trainj = traindata([1:fold5*mod5+fold5*(j-1-mod5) fold5*mod5+fold5*(j-mod5):end],:);
ytrainj = ytrain([1:fold5*mod5+fold5*(j-1-mod5) fold5*mod5+fold5*(j-mod5):end],:);
end
end
%knn
for k = 1:size(knn_k,2)
[ ypred, accuracy ] = knnclassifier( trainj, testj, ytrainj, ytestj, knn_k(k) );
knn_accu(k) = accuracy;
end
%ls
for k = 1:size(ls_lambda, 2)
[ ypred, traccuracy, tetaccuracy ] = lsclassifier( trainj, ytrainj, testj, ytestj, ls_lambda(k) );
ls_accu(k) = tetaccuracy;
end
%svm
for k = 1:size(svm_C,2)
[ ypred, accuracy ] = softsvm( trainj, ytrainj, testj, ytestj, 0, svm_C(k) );
svm_C_accu(k) = accuracy;
end
for k = 1:size(svm_C,2)
for ll = 1:size(svm_sigma,2)
[ ypred, accuracy ] = softsvm( trainj, ytrainj, testj, ytestj, svm_sigma(ll), svm_C(k) );
svm_C_sigma_accu(k,ll) = accuracy;
end
end
end %for j = 1:5
%knn
knn_maxacc = 0;
knn_maxacc_k = 1;
for jj = 1:size(knn_accu,2)
if(knn_maxacc < knn_accu(jj))
knn_maxacc = knn_accu(jj);
knn_maxacc_k = knn_k(jj);
end
end
[ ypred, accuracy ] = knnclassifier( traindata, testdata, ytrain, ytest, knn_maxacc_k );
knn_acc(i) = accuracy;
%ls
ls_maxacc = 0;
ls_maxacc_lambda = 0;
for jj = 1:size(ls_lambda,2)
if(ls_maxacc < ls_accu(jj))
ls_maxacc = ls_accu(jj);
ls_maxacc_lambda = ls_lambda(jj);
end
end
[ ypred, traccuracy, tetaccuracy ] = lsclassifier( traindata, ytrain, testdata, ytest, ls_maxacc_lambda );
ls_acc(i) = tetaccuracy;
%svm
svm_maxacc = 0;
svm_maxacc_C = 0;
svm_maxacc_sigma = 0;
for jj = 1:size(svm_C,2)
if(svm_maxacc < svm_C_accu(jj))
svm_maxacc = svm_C_accu(jj);
svm_maxacc_C = svm_C(jj);
end
end
for jj = 1:size(svm_C,2)
for kk = 1:size(svm_sigma,2)
if(svm_maxacc < svm_C_sigma_accu(jj,kk))
svm_maxacc = svm_C_sigma_accu(jj,kk);
svm_maxacc_C = svm_C(jj);
svm_maxacc_sigma = svm_sigma(kk);
end
end
end
[ ypred, accuracy ] = softsvm( traindata, ytrain, testdata, ytest, svm_maxacc_sigma, svm_maxacc_C );
svm_acc(i) = accuracy;
parameters(1,i) = knn_maxacc_k;
parameters(2,i) = ls_maxacc_lambda;
parameters(3,i) = svm_maxacc_C;
parameters(4,i) = svm_maxacc_sigma;
end %for i = 1:10
knnacc = mean(knn_acc);
lsacc = mean(ls_acc);
svmacc = mean(svm_acc);
end
没有合适的资源?快使用搜索试试~ 我知道了~
基于MATLAB实现的knn,最小二乘,softsvm分类器 以及简单的交叉验证等+使用说明文档.rar
共7个文件
m:6个
md:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 113 浏览量
2024-05-22
17:11:03
上传
评论
收藏 8KB RAR 举报
温馨提示
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的knn,最小二乘,softsvm分类器 以及简单的交叉验证等+使用说明文档.rar 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于MATLAB实现的knn,最小二乘,softsvm分类器 以及简单的交叉验证等+使用说明文档.rar (7个子文件)
src
difftrainratio.m 2KB
knnclassifier.m 935B
crossvalidation.m 5KB
main.m 500B
softsvm.m 1KB
lsclassifier.m 640B
使用说明文档.md 13KB
共 7 条
- 1
资源评论
IT狂飙
- 粉丝: 4779
- 资源: 2658
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功