dlib库中svm 例程解析

这篇博客详细解析了如何使用dlib库训练支持向量机(SVM),包括样本归一化、选择核函数、超参数调整、交叉验证、训练决策函数以及保存和加载模型的过程。
摘要由CSDN通过智能技术生成
int main()
{
    // svm函数使用列向量,这里我们先定义一个方面的typedef
    // 这个 typedef 声明了一个2行1列的矩阵。如果你像包含更多维,把2修改成更多即可。
    //如果你不知道特征有多少维,你可以先把这个值设置为零,然后用的时候,用matrix.set_size()函数即可。 
    typedef matrix<double, 2, 1> sample_type;


    // 核函数的定义
    //我选择了一个radial basis kernel,这个核适合我们的2维的样本。
    //你也可以使用自己定义的任何kernels,可以参考 custom_trainer_ex.cpp
    typedef radial_basis_kernel<sample_type> kernel_type;


    // 现在我们声明 samples和labels表示样本和其对应的标记
    std::vector<sample_type> samples;
    std::vector<double> labels;




    // 给samples和labels赋值。用一个循环生成一系列的点,然后一句他们到圆心的距离来标记
    for (int r = -20; r <= 20; ++r)
    {
        for (int c = -20; c <= 20; ++c)
        {
            sample_type samp;
            samp(0) = r;
            samp(1) = c;
            samples.push_back(samp);




            //如果到圆心的距离小于10
            if (sqrt((double)r*r + c*c) <= 10)
                labels.push_back(+1);
            else
                labels.push_back(-1);




        }
    }








    // 归一化样本,减去均值,除以标准差。这是去除数值稳定性问题的好办法,防止某些值过大。
    // 做这一步,对本例的问题来说,并不是那么重要。下面的代码会教你怎么做归一化。  
    vector_normalizer<sample_type> normalizer;
    // 计算均值和方差,放入normalizer的成员变量中
    normalizer.train(samples);
    // 然后分别归一
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值