function [X_star, Y_star, alpha_star, Rsquared_star, ...
a_star, SV_star, YSV_star, param_star] = ...
ZeroFPR_SVDD(X, Y, alpha, Rsquared, kernel, param, C1, C2, treshold, param_opt)
% Zero False Positive Rate SVM with Distance Metric (ZFPR_SVDD)函数用于计算训练集的零假阳性率SVM边界。
% 输入参数:
% X:输入样本的特征矩阵,大小为n×d。
% Y:输入样本的标签,大小为n×1。
% alpha:SVM的惩罚系数。
% Rsquared:决定训练样本重要性的权重系数。
% kernel:SVM使用的核函数类型。
% param:SVM核函数的参数。
% C1、C2、treshold、param_opt:其他参数。
% 输出参数:
% X_star、Y_star、alpha_star、Rsquared_star、a_star、SV_star、YSV_star、param_star。
% 其中,X_star和Y_star表示训练得到的支持向量机边界;alpha_star表示训练得到的SVM惩罚系数;
% Rsquared_star表示训练得到的权重系数;a_star表示训练得到的间隔参数;SV_star和YSV_star表示训练得到的支持向量;
% param_star表示训练得到的核函数参数。
maxiter=1000;% 最大迭代次数
i=0;
m = size(X,2);
% 使用SVDD_N1C_TEST函数计算测试样本到训练样本的距离,并返回距离最近的训练样本的标签
y_i= SVDD_N1C_TEST(X, Y, alpha, X, kernel, param, Rsquared);
%FPR_old=0;
while(i<maxiter)
i=i+1; % 迭代次数计数器自增1
X_pred_i=[X,Y,y_i];% 将当前迭代得到的标签y_i添加到训练样本的特征矩阵X中,形成新的训练样本特征矩阵X_pred_i
% 从X_pred_i中筛选出标签为1的样本作为正类样本,标签为-1的样本作为负类样本,分别形成XP_i和XN_i
XP_i = X_pred_i(X_pred_i(:,m+2)==1,(1:m));
XN_i = X_pred_i(X_pred_i(:,m+2)==-1,(1:m));
X_i = [XP_i;XN_i];% 将正类样本和负类样本合并,形成当前的训练样本集X_i
% 从X_pred_i中筛选出标签为1的样本的y值和标签为-1的样本的y值,分别形成YP_i和YN_i
YP_i=X_pred_i(X_pred_i(:,m+2)==1,m+1);
YN_i=X_pred_i(X_pred_i(:,m+2)==-1,m+1);
Y_i = [YP_i;YN_i];% 将正类样本和负类样本的y值合并,形成当前的标签集Y_i
if(isequal(param_opt,'Y'))% 如果param_opt等于'Y',则进行参数优化
disp('Parametr optimization started')
% 在训练集的1000个样本上进行参数优化,得到最优的核函数参数param_star等
X_opt=X_i(1:1000,:);
Y_opt=Y_i(1:1000,:);
intKerPar = linspace(0.1,5,10);
[param_star, ~, ~, ~, ~] = ...
OptimiseParam_NSVDD(X_opt, Y_opt, kernel, 0.5, 3, intKerPar, C1, C2);
else % 如果param_opt不等于'Y',则直接使用输入
param_star = param;
end
[alpha, Rsquared_i, a_i, SV_i, YSV_i] = ...
SVDD_N1C_TRAINING(X_i, Y_i, kernel, param_star, C1, C2,'off');
y_i = SVDD_N1C_TEST(X_i, Y_i, alpha, X, kernel, param_star, Rsquared_i);
M_i = [y_i Y];
N = nnz(Y_i(:,1)==-1);
FP = sum(M_i(:,1)==+1 & M_i(:,2)==-1);
FPR_i = FP/N;
if(FPR_i<treshold)% || (abs(FPR_i-FPR_old)<0.01*FPR_old))
disp('Treshold reached')
break;
end
disp(['Iteration ', num2str(i), '--> FPR = ', num2str(FPR_i)])
end
X_star = X_i;
Y_star = Y_i;
alpha_star = alpha;
Rsquared_star = Rsquared_i;
a_star = a_i;
SV_star = SV_i;
YSV_star = YSV_i;
fpga和matlab
- 粉丝: 17w+
- 资源: 2624
最新资源
- Python项目之淘宝模拟登录.zip
- 课程设计项目:python+QT实现的小型编译器.zip
- (源码)基于AVR ATmega644的智能卡AES解密系统.zip
- (源码)基于C++插件框架的计算与打印系统.zip
- (源码)基于Spring Boot和Vue的苍穹外卖管理系统.zip
- (源码)基于wxWidgets库的QMiniIDE游戏开发环境管理系统.zip
- 通过C++实现原型模式(Prototype Pattern).rar
- 学习记录111111111111111111111111
- 通过java实现原型模式(Prototype Pattern).rar
- 通过python实现原型模式(Prototype Pattern).rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈