qq_35324994 2017-12-21 14:00 采纳率: 50%
浏览 6101
已结题

求支持向量机算法MATLAB代码

目标是:对98个样本,1000个属性的Excel数据进行二分类,求最佳支持向量机。
图片说明

  • 写回答

4条回答 默认 最新

  • Coral Gajic 2018-01-03 08:39
    关注

    clear all;
    close all;
    clc;
    % 确保libsvm_317工具包在当前文件夹
    addpath('.\libsvm_317\matlab'); % 引入\libsvm_317\matlab\子文件夹中的子函数

    %% SVR 基本使用示例

    % 产生初始训练样本和训练输出量
    P=-1:0.1:1; % 训练样本输入, 1*N
    T=sin(pi*P); % 训练样本输出, 1*N

    % 确保libsvm工具包输入函数格式
    P1 = P'; % 确保训练样本矩阵为 N*m, N表示有多少个样本, m表示一个样本有多少属性量(也叫特征量),本示例中 m=1
    T1 = T'; % 确保训练样本输出为 N*1, N表示样本个数, 1表示SVR的输出为1维量

    %% 调用SVM训练函数, 部分参数定义如下, 详细请参考\libsvm_317\matlab\子文件夹中的svmtrain.c文件
    % 这些参数的具体物理意义, 请参考 http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 网站
    % ------------------------------------------------
    % "-s svm_type : set type of SVM (default 0)"
    % " 0 -- C-SVC (multi-class classification)"
    % " 1 -- nu-SVC (multi-class classification)"
    % " 2 -- one-class SVM"
    % " 3 -- epsilon-SVR (regression)"
    % " 4 -- nu-SVR (regression)"
    % --------------------------------------------------
    % "-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)"
    % --------------------------------------------------
    % "-t kernel_type : set type of kernel function (default 2)"
    % " 0 -- linear: u'*v\n"
    % " 1 -- polynomial: (gamma*u'*v + coef0)^degree"
    % " 2 -- radial basis function: exp(-gamma*|u-v|^2)"
    % " 3 -- sigmoid: tanh(gamma*u'*v + coef0)"
    % " 4 -- precomputed kernel (kernel values in training_instance_matrix)"
    % ---------------------------------------------------
    model = svmtrain(T1, P1, '-s 3 -p 0.1 -t 2'); % SVM(SVR)训练结果保存在model类结构下

    % 校验当前参数下,SVR模型的训练误差量, 即将训练样本P1和其输出T1输入, model参数集输入,
    % 计算训练样本P1在拟合曲线上的输出, 与真实输出T1的误差量
    [~, accuracy, ~] = svmpredict(T1, P1, model); % test the training data
    accuracy(3) % 输出训练误差量

    %% 利用训练得到的SVR模型, 预测未知量的拟合输出值
    P_test = [0.1,0.2,0.3]; % 1*k, k个未知量
    P_test1 = P_test'; % 确保测试样本矩阵为 k*m, k表示有多少个测试样本, m表示一个样本有多少属性量(也叫特征量),本示例中 m=1

    % 将测试样本输入, 计算拟合输出量
    [test_label, ~, ~] = svmpredict(ones(size(P_test1,1),1), P_test1, model);
    %
    % 由于训练样本是按照 sin(pi*x)函数产生的,所以测试样本集 P_test1 的真实期望输出为 sin(pi*P_test1)
    disp('测试样本集P_test1的真实期望输出为:');
    T_test1 = sin(pi*P_test1)
    disp('测试样本集P_test1的拟合期望预测为:');
    test_label

    
    

    clear all; % 清楚所有变量缓存
    close all; % 关闭所有打开Figure窗口
    clc; % 清除命令窗口无关内容

    %% 变量输入
    a = [1, 2, 3]; % 行向量
    b = [1; 2; 3]; % 列向量
    % Excel中copy
    c = [];
    % 变量空间中paste
    d = [];
    f = magic(4)

    [f_max_lab1, f_max_lab2]=find(f==min(min(f))) % 找出矩阵f中最小值对应的坐标

    %% 变量保存
    save(['data_a_b.mat'],'a','b'); % 将Matlab数据进行保存

    clear all; % 删除所有变量
    load('data_a_b.mat'); % 直接引入, 可看到变量 a b 重新出现
    D0 = load('data_a_b.mat'); % 以类的形式进行引入, a和b以类结构出现

    %%
    clear all;
    % close all;
    clc;
    %
    %% 作图
    x_value = [7.5, 6, 5.5, 5, 4.5, 4, 3];
    y_value = [0.51, 0.67, 0.721, 0.80, 0.754, 0.721, 0.601];
    %
    figure(1);

    % '*'为星号形, '+'为加号形, 'x'为叉号形状....
    % 'Color'有多种颜色, blue,green,red,cyan,magenta,yellow,black
    plot(x_value, y_value, '-*','MarkerSize',10,'LineWidth',2, 'Color','blue');

    xxl = xlabel('隐层节点数'); %横标题
    set(xxl,'Fontsize',16); %调节标题大小
    yyl = ylabel('数据值'); %纵标题
    set(yyl,'Fontsize',16); %调节标题大小

    % 有两种结果需要比较,如下
    x_value1 = x_value - 1;
    y_value1 = [0.51, 0.67, 0.721, 0.80,... % 代码比较长, 可以用连续3个点号回车换行
    0.754, 0.721, 0.601] + 0.1;

    hold on; % 如果多个结果图在一个Figure里面, 需要 hold on 命令
    plot(x_value1, y_value1, '-+','MarkerSize',10,'LineWidth',2, 'Color','red');

    % 需要标注区分两个结果图
    table = legend('结果1','结果2');

    grid on; % 打开网格命令

    % hold off;

    %% 多项式拟合
    clear all;
    % close all;
    clc;

    x = [26.3, 33.5, 39.1, 43.1, 47.0, 50.0, 54.5, 56.8, 64.9, 72.0, 77.0];
    y = [8.85, 8.17, 7.49, 7.16, 6.81, 6.58, 6.21, 5.91, 5.48, 5.11, 5.98];
    %多项式拟合
    n = 1;
    A = polyfit(x,y,n); % n是给定的多项式的次数,拟合出来的结果A是系数向量
    y1 = polyval(A,x); % 计算出拟合的y值
    figure, plot(x,y,'*','MarkerSize',10,'LineWidth',2, 'Color','blue'); %
    hold on;
    plot(x,y1,'-','MarkerSize',10,'LineWidth',2, 'Color','red'); % 画出数据对比图,黑点是原始数据,红线是拟合曲线
    gtext('y=kx+b'); %将拟合得到的直线方程式画到当前Figure图里面

    %% 直方图绘制
    clear all;
    % close all;
    clc;
    RE_value = rand(1000,1); % 随机生成1000个随机数
    % 统计这1000个随机数的概率直方图, 标出直方图变化曲线(红色),并规定好X轴和Y轴的坐标范围
    figure,histfit(RE_value), axis([-0.1 1.1 0 60]);
    % 定义Title名字
    ttl = title('Model1'); set(ttl,'Fontsize',20,'FontWeight','bold');
    % 定义X和Y坐标的名字
    xxl = xlabel('RE'); set(xxl,'Fontsize',20);
    yyl = ylabel('Frequency'); set(yyl,'Fontsize',20);
    set(gca, 'FontSize', 15);

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!