精华内容
下载资源
问答
  • SVM的两个参数 C 和 gamma

    万次阅读 2018-09-06 12:11:33
    SVM模型有两个非常重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差  gamma是选择RBF函数作为kernel后,该...

     

    https://blog.csdn.net/lujiandong1/article/details/46386201

    SVM模型有两个非常重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差

               gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。

              此外大家注意RBF公式里面的sigma和gamma的关系如下:

        

            这里面大家需要注意的就是gamma的物理意义,大家提到很多的RBF的幅宽,它会影响每个支持向量对应的高斯的作用范围,从而影响泛化性能。我的理解:如果gamma设的太大,会很小,很小的高斯分布长得又高又瘦, 会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,存在训练准确率可以很高,(如果让无穷小,则理论上,高斯核的SVM可以拟合任何非线性数据,但容易过拟合)而测试准确率不高的可能,就是通常说的过训练;而如果设的过小,则会造成平滑效应太大,无法在训练集上得到特别高的准确率,也会影响测试集的准确率。

     

    此外,可以明确的两个结论是:

    结论1:样本数目少于特征维度并不一定会导致过拟合,这可以参考余凯老师的这句评论:

    “这不是原因啊,呵呵。用RBF kernel, 系统的dimension实际上不超过样本数,与特征维数没有一个trivial的关系。”

     

    结论2:RBF核应该可以得到与线性核相近的效果(按照理论,RBF核可以模拟线性核),可能好于线性核,也可能差于,但是,不应该相差太多。

    当然,很多问题中,比如维度过高,或者样本海量的情况下,大家更倾向于用线性核,因为效果相当,但是在速度和模型大小方面,线性核会有更好的表现。

     

    老师木还有一句评论,可以加深初学者对SVM的理解:

    “须知rbf实际是记忆了若干样例,在sv中各维权重重要性等同。线性核学出的权重是feature weighting作用或特征选择 。”

    以上摘录了:http://blog.sina.com.cn/s/blog_6ae183910101cxbv.html

     

     

     

    Grid Search

    Grid Search是用在Libsvm中的参数搜索方法。很容易理解:就是在C,gamma组成的二维参数矩阵中,依次实验每一对参数的效果。

     

                                                        

     

     

    使用grid Search虽然比较简单,而且看起来很naïve。但是他确实有两个优点:

    1. 可以得到全局最优
    2. (C,gamma)相互独立,便于并行化进行

     

    展开全文
  • SVMtrain的参数c和g的优化

    千次阅读 2017-06-07 18:51:43
    hit2015spring晨凫追风\frac{hit2015spring}{晨凫追风}在svm训练过程中,需要对惩罚参数c和核函数的参数g进行优化,选取最好的参数知道测试集标签的情况下 是让两个参数c和g在某一范围内取离散值,然后,取测试集...

    hit2015spring

    在svm训练过程中,需要对惩罚参数c和核函数的参数g进行优化,选取最好的参数

    知道测试集标签的情况下
    是让两个参数c和g在某一范围内取离散值,然后,取测试集分类准确率最佳的参数

    不知道测试集标签的情况下

    (1)利用交叉验证的方法:(k-fold cross validation)

    Start
    bestAccuracy = 0
    bestc = 0
    bestg = 0
    
    //n1 , n2 ,k都是事先给定的值
    for c = 2^(-n1) : 2^(n1)
         for g = 2^(-n2) : 2^(n2)
         将训练集平均分为k部分,设为
         train(1),train(2), ... ,train(k).
         分别让每一部分作为测试集进行预测(剩下的k-1部分作为训练集对分类器进行训练)取得最后得到的所有分类的准确率的平均数,设为cv
         if(cv>bestAccuracy)
              bestAccuracy = cv; bestc = c; bestg = g
              end
        end
    end
    over

    (2)leave-one-out cross validation(loo交叉验证)

    设原始数据有N个样本,那么LOO-CVj就是N-CV,即每一个样本作为验证集,其余的N-1个样本作为训练集,所以在LOO-CV下会得到N个模型,用N个模型的最终验证集的分类准确率的平均数做为在LOO-CV下分类器的性能指标

    ** 但是LOO-cv计算量太大,每个样本都要建立一个模型,计算成本太大

    当计算出所有的c和g时,这时候这些c和g有可能会出现的是:某些成对出现的c和g验证准确率一样高,这时候选择的是惩罚参数最小的c和g,认为c小的那个对象是最佳的选择

    伪代码如下

    bestAccuracy = 0
    bestc = 0
    bestg = 0
    //将c和g划分为网格进行搜索
    for c = 2 ^(cmin):2^(cmax)
            for c = 2 ^(gmin):2^(gmax)
            %%采用K-CV方法
    将train大致分为K组,记为train(1)train(2)........train(k)
    相应的标签也要分离出来记为train_label(1),train_label(2).....................train_label(k)
                           for run = 1:k
                           让train(run),作为验证集,其他的作为训练集,记录此时的验证准确率为acc(run)
                           end
            cv = (acc(1)+acc(2)+............acc(k))/k
            if (cv>bestAccuracy)
                bestAccury = cv;bestc=c;bestg=g;
            end
        end
    end
    over

    福利答谢大家!

    感谢您阅读本篇文章,对此特别发放一个无门槛的现金红包,打开支付宝扫码领取!
    这里写图片描述

    展开全文
  • libsvm中参数c与g的调整

    万次阅读 2015-03-30 10:39:27
    libsvm中参数c与g的调整 采用交叉验证选择最佳参数C与g 通常而言,比较重要的参数是 gamma (-g) 跟 cost (-c) 。而 cross validation (-v) 的参数常用5。那么如何去选取最优的参数c和g呢?libsvm 的 python 子目录...

    Libsvm使用心得

    首先下载LibsvmPythonGnuplot

    l         libsvm的主页http://www.csie.ntu.edu.tw/~cjlin/libsvm/上下载libsvm (我自己用2.86版本)

    l         python的主页http://www.python.org下载 python (我自己用2.5版本)

    l         gnuplot的主页http://www.gnuplot.info/下载gnuplot  (我用4.0版本)

    LIBSVM 使用的一般步骤是:

    1)按照LIBSVM软件包所要求的格式准备数据集;                                    

    2)对数据进行简单的缩放操作;                                   

    3)首要考虑选用RBF 核函数;

    4)采用交叉验证选择最佳参数C与g ;

    5)采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型;

    6)利用获取的模型进行测试与预测。

    1LIBSVM使用的数据格式

        该软件使用的训练数据和检验数据文件格式如下:

    [label] [index1]:[value1] [index2]:[value2] ...

    [label] [index1]:[value1] [index2]:[value2] ...

    一行一条记录数据,如:

    +1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1

    这里(x,y)à((0.708,1,1, -0.320, -0.105, -1), +1)

    label 或说是class, 就是你要分类的种类,通常是一些整数。

    index 是有順序的索引,通常是连续的整数。

    value 就是用来 train 的数据,通常是一堆实数。

     

    2)对数据进行简单的缩放操作

        扫描数据. 因为原始数据可能范围过大或过小, svmscale可以先将数据重新scale (縮放) 到适当范围使训练与预测速度更快。

        svmscale.exe的用法:svmscale.exe feature.txt feature.scaled

    默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,feature.txt是输入特征文件名 输出的归一化特征名为feature.scaled

     

    3 考虑选用RBF 核函数

    训练数据形成模型(model),实质是算出了wx+b=0中的w,b.

     Svmtrain的用法:svmtrain [options] training_set_file [model_file]

     

    其中options涵义如下:

    -s svm类型:设置SVM 类型,默认值为0,可选类型有:

    0 -- C- SVC

    1 -- nu - SVC

    2 -- one-class-SVM

    3 -- e - SVR

    4 -- nu-SVR

    -t 核函数类型:设置核函数类型,默认值为2,可选类型有:

    0 -- 线性核:u'*v

    1 -- 多项式核:(g*u'*v+ coef0)degree

    2 -- RBF 核:exp(-||u-v||*||u-v||/g*g)

    3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

    -d degree:核函数中的degree设置,默认值为3

    -g r(gama):核函数中的函数设置(默认1/ k);

    -r coef 0:设置核函数中的coef0,默认值为0;

    -c cost:设置C- SVCe - SVRn - SVR中从惩罚系数C,默认值为1

    -n nu :设置nu - SVC、one-class-SVM 与nu - SVR 中参数nu ,默认值0.5;

    -p e :核宽,设置e - SVR的损失函数中的e ,默认值为0.1;

    -m cachesize:设置cache内存大小,以MB为单位(默认40):

    -e e :设置终止准则中的可容忍偏差,默认值为0.001;

    -h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

    -b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

    -wi weight:对各类样本的惩罚系数C加权,默认值为1;

    -v nn折交叉验证模式。

     

    其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值training_set_file是要进行训练的数据集model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。举个例子如下:

    C:/libsvm-2.85/windows>svmtrain heart_scale

    *

    optimization finished, #iter = 162

    nu = 0.431029

    obj = -100.877288, rho = 0.424462

    nSV = 132, nBSV = 107

    Total nSV = 132

    现简单对屏幕回显信息进行说明:

    #iter为迭代次数,

    nu 与前面的操作参数-n nu 相同,

    obj为SVM文件转换为的二次规划求解得到的最小值,

    rho 为判决函数的常数项b,

    nSV 为支持向量个数,

    nBSV为边界上的支持向量个数,

    Total nSV为支持向量总个数。

    训练后的模型保存为文件*.model,用记事本打开其内容如下:

    svm_type c_svc % 训练所采用的svm类型,此处为C- SVC

    kernel_type rbf %训练采用的核函数类型,此处为RBF核

    gamma 0.0769231 %设置核函数中的g ,默认值为1/ k

    nr_class 2 %分类时的类别数,此处为两分类问题

    total_sv 132 %总共的支持向量个数

    rho 0.424462 %决策函数中的常数项b

    label 1 -1%类别标签

    nr_sv 64 68 %各类别标签对应的支持向量个数

    SV %以下为支持向量

    1 1:0.166667 2:1 3:-0.333333 4:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-1 13:1

    0.5104832128985164 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5

    1 1:0.333333 2:1 3:-1 4:-0.245283 5:-0.506849 6:-1 7:-1 8:0.129771 9:-1 10:-0.16129 12:0.333333 13:-1

    1 1:0.208333 2:1 3:0.333333 4:-0.660377 5:-0.525114 6:-1 7:1 8:0.435115 9:-1 10:-0.193548 12:-0.333333 13:1

    4)采用交叉验证选择最佳参数Cg

        通常而言,比较重要的参数是 gamma (-g) 跟 cost (-c) 。而 cross validation (-v)

    的参数常用5。那么如何去选取最优的参数c和g呢?libsvm 的 python 子目录下面的 grid.py 可以帮助我们。 此时。其中安装python2.5需要(一般默认安装到c:/python25

    下),将gnuplot解压。安装解压完毕后,进入/libsvm/tools目录下,用文本编辑器(记事

    本,edit都可以)修改grid.py文件,找到其中关于gnuplot路径的那项(其默认路径为

    gnuplot_exe=r"c:/tmp/gnuplot/bin/pgnuplot.exe"),根据实际路径进行修改,并保存。然

    后,将grid.py和C:/Python25目录下的python.exe文件拷贝到libsvm/windows目录下,键入以下命令:$ python grid.py train.1.scale 执行后,即可得到最优参数c和g。

        另外,至于下libsvm和python的接口的问题,在libsvm2.86中林老师已经帮助我们解决,在/libsvm/windows/python目录下自带了svmc.pyd这个文件,将该文件文件复制到

    libsvm/python目录下,同时,也将python.exe文件复制到该目录下,键入以下命令以检验效

    果(注意:.Py文件中关于gnuplot路径的那项路径一定要根据实际路径修改):

    python svm_test.py

        如果能看到程序执行结果,说明libsvm和python之间的接口已经配置完成,以后就可以直接在python程序里调用libsvm的函数了!

    5 采用最佳参数C对整个训练集进行训练获取支持向量机模型

       $ svmtrain –c x –g x –v x training_set_file [model_file]

       x为上述得到的最优参数c和g的值,v的值一般取5。

    6)利用获取的模型进行测试与预测

    使用Svmtrain训练好的模型进行测试。输入新的X值,给出SVM预测出的Y值

     $ Svmpredict  test_file  model_file  output_file

    如:./svm-predict heart_scale heart_scale.model heart_scale.out

    Accuracy = 86.6667% (234/270) (classification)

    这里显示的是结果

    一个具体使用的例子。

        以libsvm中的heart_scale作为训练数据和测试数据,同时已经将python安装至c盘,并将grid.py文件中关于gnuplot路径的默认值修改为实际解压缩后的路径,将

    heart_scale、grid.py和python.exe拷贝至/libsvm/windows文件夹下。

    ./svm-train heart_scale

    optimization finished, #iter = 162

    nu = 0.431029

    obj = -100.877288, rho = 0.424462

    nSV = 132, nBSV = 107

    Total nSV = 132

    此时,已经得到heart_scale.model,进行预测:

    ./svm-predict heart_scale  heart_scale.model  heart_scale.out

    Accuracy = 86.6667% (234/270) (classification)

    正确率为Accuracy = 86.6667%。

    ./python grid.py heart_scale

    得到最优参数c=2048,g=0.0001220703125.

    ./svm-train -c 2048 -g 0.0001220703125 heart_scale得到model后,由./svm-predict heart_scale  heart_scale.model heart_scale.out得到的正确

    率为Accuracy = 85.1852%.这块还有点迷惑?为什么正确率降低了?

    当然也可以结合subset.py 和 easy.py 实现自动化过程。

    如果要训练多次,可以写个批处理程序省好多事。

    这里举个例子:

    ::@ echo off
    cls
    :: split the data and output the results
    for /L %%i in (1,1,1000) do python subset.py b59.txt 546 b59(%%i).in8 b59(%%i).out2

    for /L %%i in (1,1,1000) do python easy.py b59(%%i).in8 b59(%%i).out2 >> result89.txt

    这段批处理代码首先调用subset.py对文件b59.txt执行1000次分层随机抽样(对数据进行80-20%分割)然后调用easy.py 进行1000次参数寻优,把记录结果写到result89.txt中

    (包括1000次训练的分类准确率和参数对)。

    还可以调用fselect.py进行特征选择,调用plotroc.py进行roc曲线绘制。

    先写到这里吧,希望能和大家一起学习libsvm,进一步学好svm。


    展开全文
  • SVM的两个参数 C 和 gamma的解析

    千次阅读 2018-09-29 17:05:01
    SVM模型有两个非常重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差  gamma是选择RBF函数作为kernel后,该...

    转载于:https://blog.csdn.net/lujiandong1/article/details/46386201

    SVM模型有两个非常重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差

               gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。

              此外大家注意RBF公式里面的sigma和gamma的关系如下:

       

            这里面大家需要注意的就是gamma的物理意义,大家提到很多的RBF的幅宽,它会影响每个支持向量对应的高斯的作用范围,从而影响泛化性能。我的理解:如果gamma设的太大,会很小,很小的高斯分布长得又高又瘦, 会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,存在训练准确率可以很高,(如果让无穷小,则理论上,高斯核的SVM可以拟合任何非线性数据,但容易过拟合)而测试准确率不高的可能,就是通常说的过训练;而如果设的过小,则会造成平滑效应太大,无法在训练集上得到特别高的准确率,也会影响测试集的准确率。

     

    此外,可以明确的两个结论是:

    结论1:样本数目少于特征维度并不一定会导致过拟合,这可以参考余凯老师的这句评论:

    “这不是原因啊,呵呵。用RBF kernel, 系统的dimension实际上不超过样本数,与特征维数没有一个trivial的关系。”

     

    结论2:RBF核应该可以得到与线性核相近的效果(按照理论,RBF核可以模拟线性核),可能好于线性核,也可能差于,但是,不应该相差太多。

    当然,很多问题中,比如维度过高,或者样本海量的情况下,大家更倾向于用线性核,因为效果相当,但是在速度和模型大小方面,线性核会有更好的表现。

     

    老师木还有一句评论,可以加深初学者对SVM的理解:

    “须知rbf实际是记忆了若干样例,在sv中各维权重重要性等同。线性核学出的权重是feature weighting作用或特征选择 。”

    以上摘录了:http://blog.sina.com.cn/s/blog_6ae183910101cxbv.html

     

     


    Grid Search

    Grid Search是用在Libsvm中的参数搜索方法。很容易理解:就是在C,gamma组成的二维参数矩阵中,依次实验每一对参数的效果。

     

                                                        

     

     

    使用grid Search虽然比较简单,而且看起来很naïve。但是他确实有两个优点:

    1. 可以得到全局最优
    2. (C,gamma)相互独立,便于并行化进行

    --------------------- 本文来自 BYR_jiandong 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/lujiandong1/article/details/46386201?utm_source=copy

    展开全文
  • LibSVM的两个参数 C 和 gamma

    千次阅读 2018-01-05 10:04:18
    SVM模型有两个非常重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差  gamma是选择RBF函数作为kernel后,...
  • import matplotlib.pyplot as plt x = [1, 2, 3,4, 5, 6] y = [0,0,1,1,2,2] plt.scatter(x, y, c=y) plt.ylim(-1, 3) plt.xlim(0,7) ...说明,参数c就是color,赋值为可迭代参数对象,长度与x,y...
  • 采用交叉验证选择最佳参数C与g

    千次阅读 2015-01-23 20:02:14
    在svm_train中-c和-g是最常用...那么如何去选取最优的参数c和g呢?libsvm 的 python 子目录下面的 grid.py 可以帮助我们  1.解压gnuplot,如果没有的话,可以在网上下载,网址为http://www.gnuplot.info/download.ht
  • MATLAB画图SURF函数颜色控制参数C用法

    万次阅读 2016-11-02 11:58:21
    MATLAB画图SURF函数颜色控制参数C用法 专业今年开了MATLAB的课程(土木工程学MATLAB?),老师给出了保过题,为了不挂科也是苦逼百度+谷歌了半天,加上自己的琢磨,总算是明白些surf颜色控制方法了,在这里...
  • 写了个程序来选取SVM中参数c和g的最佳值.[写这个的目的是方便大家用这个小程序直接来寻找c和g的最佳值,不用再另外编写东西了.] 其实原本libsvmC语言版本中有相应的子程序可以找到最佳的c和g,需装载python语言然后用...
  • 在libsvm中如何求最佳参数c和gamma

    千次阅读 2016-07-22 09:54:44
    一、 如何用grip.py求最佳参数 c、γ 1. 需要安装python及gnuplot两个软件。 2. 修改libsvm-3.2所在目录下的tools中的grip.py,不可以双击点开grip.py,需要点击右键,用“Edit with IDLE”打开,修改第25行中的...
  • libsvm 参数调整 并行选择最优参数 c g SVMcg强化版

    千次阅读 热门讨论 2018-10-24 20:12:32
    以下代码是SVMcg强化版,事实上,原版本一点都没有进行作者提到的并行grid参数计算,所以有效代码恕我直言大概只有一句...function [bestacc,bestc,bestg,cg] = SVMcgPP(train_label,train,cmin,cmax,gmin,gmax,v,c...
  • SVM中惩罚参数C的理解

    万次阅读 2018-05-03 19:57:57
    C理解为调节优化方向中两个指标(间隔大小,分类准确度)偏好的权重 soft-margin SVM针对hard-margin SVM容易出现的过度拟合问题,适当放宽了margin的大小,容忍一些分类错误(violation),把这些样本当做噪声处理...
  • cmd命令之参数 c

    千次阅读 2013-07-09 11:35:08
    前言,通过VBA代码,我们可以执行cmd命令 ========================================...cmdStr = "cmd /c D:\bat\getAllPathWithFileName.bat " + fileName + " " + projectPathStr 'バッチを実行する RetVal = Shel
  • SVM的高斯kernel 参数c和gamma说明

    千次阅读 2014-06-10 11:21:22
    ,是否有更佳的参数,有待考证。...The SVM with a Gaussian kernel function has two such training parameters: C which controls overfitting of the model, and gamma (γ) which controls the degree of nonlinea
  • language:C# 框架:.NET Framework 4   这句话把method中的“,10”去掉就行了。 int dd = Convert.ToInt32(b[0]);  
  • 写了个程序 来选取SVM中参数 c和g的最佳值. [写这个的目的是方便大家用这个小程序直接来寻找 c和g的最佳值,不用再另外编写东西了. ]  其实原本libsvm C语言版本中有相应的子程序可以找到最佳的c和g,需装载...
  • 但是想优化分类效果,libsvm的matlab接口中没有这个功能函数,可以使用libsvm中的Python接口,它带有交叉验证,可以帮助我们优化训练model的参数,即一般是取最优损失函数的系数c和RBF中的gamma参数g.  1、先...
  • 还有个小诀窍就是不用每次都等这个算法迭代结束,先固定一个C值,然后小范围修改gamma值,观测在哪个小范围准确率高。确定了gamma的小范围,再去找C的范围。这样初始化就会在一个很高的水平上进行,最后的效果也会好...
  • c之命令行参数

    千次阅读 2018-02-09 15:57:17
    C 命令行参数执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。命令行参数是使用 main() ...
  • C/C++参数(默认参数、占位符参数)

    千次阅读 2015-04-20 17:49:48
    //在C/C++中表示空的参数列表 void test(void) { } //在C中表示不确定的参数数目,C++中表示空的参数列表; void test1() { } //在C中编译失败,必须至少有一个显示参数;在C++中表示可变的参数数目 void test2(.....
  • PYthon——plt.scatter各参数详解

    万次阅读 多人点赞 2017-03-29 21:22:47
    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道...3、其中颜色参数c如下: 4、基本的使用方法如下: [python] view plain copy #导入必要的模块  import numpy as np  import mat...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 129,056
精华内容 51,622
关键字:

参数c