SVM认知
    2016年12月26日 星期一
    19:37

    说到scale,建议不要用libsvm里自带的scale,因为一旦使用这个工具,它就会把原来稀疏的数据,变成非稀疏的格式,这样不但会生成非常大的数据文件,而且liblinear对稀疏数据快速处理的优势就不能体现出来了。因此,要scale,就自己写一个,以保持原来稀疏的格式。链接




    Run SVM 俗称 开火车


    Model 文件参数详解 链接


    SVM 模型训练所需存储空间与训练样本数的平方成正比,时间复杂度与训练样本数的立方成正比。 链接

    Grid.py 使用与存在原因 链接 使用方法


    Svm.cpp 的基本思路 链接
    #include
    //需要加入的功能:更改 Model 数组 、传入读取数据
    void predict(int test[10], float result[3]){
    //构建预测模型:一个103的数组
    float model[10][3]={
    {32392.6380368100,-95303.1816236300,51583.6781281200},
    {-21539.4492795000,6592.95191896000,-70851.7620202600},
    {157185.047795690,-70129.8330717600,-130613.496932520},
    {78948.4947924100,-25050.6491653600,-123163.076045080},
    {58256.5273220100,-7712.94050506000,-92638.0368098200},
    {-164428.591810530,81816.2362676600,114441.432444000},
    {79191.0400913100,-6040.80467970000 -133936.367527460},
    {-41476.6728491900,-50597.8028249400,100156.941075760},
    {-116197.745755460,243093.165929520,-87240.6905407300},
    {40917.3919246700,-104531.316878300,73027.5360251100}
    };
    //进行预测并将结果保存到 result 数组中
    for (int j = 0; j <3; j++)
    for(int k=0;k<10;k++)
    result[j]+=test[k]
    model[k][j];
    }

    int main(int argc, char const argv[])
    {
    /
    code */
    //构建测试数据数组 —> 未来需要从传感器中读取
    int testData[10]={5273,6382,4216,0404,294,2540,187,1936,3962,6461};
    //构建预测结果数组,包含对应几种标签的值
    float result[3]={0,0,0};
    //运用预测函数将预测的值传到 result 数组中
    predict(testData,result);
    //打印输出result 数组的值
    printf(“array result:\n”);
    for(int i=0; i<3; i++)
    {
    printf(“%10f”, result[i]);
    printf(“\n”);
    }
    //查找并打印result最大值,同时打印其标签也就是预测的类型
    float resultMax= 0;
    int index;
    for(int i=0; i<3; i++){
    if(resultMax
    resultMax=result[i];
    index=i;
    }
    }
    printf(“\nresultMax:\n”);
    printf(“%10f”, resultMax);
    printf(“\n”);
    printf(“index:\n”);
    printf(“%10d”, index);
    return 0;
    }
    成龙哥告知的 SVM 训练方法

    下载anaconda
    anaconda

    sklearn.svm
    在terminal 输入 ipython
    导入数据包
    from sklearn.datasets import loadsvmlight_file
    from sklearn.linear_model import SGDClassifier
    载入数据集
    x, y = load_svmlight_file(“/Users/steve/Desktop/traindata”)
    进行训练
    clf = SGDClassifier(loss=”hinge”, penalty=”l2”)
    clf.fit(x, y)
    获得 模型参数
    clf.coef



    array([[ 32392.63803681, -21539.4492795 , 157185.04779569,
    78948.49479241, 58256.52732201, -164428.59181053,
    79191.04009131, -41476.67284919, -116197.74575546,
    40917.39192467],
    [ -95303.18162363, 6592.95191896, -70129.83307176,
    -25050.64916536, -7712.94050506, 81816.23626766,
    -6040.8046797 , -50597.80282494, 243093.16592952,
    -104531.3168783 ],
    [ 51583.67812812, -70851.76202026, -130613.49693252,
    -123163.07604508, -92638.03680982, 114441.432444 ,
    -133936.36752746, 100156.94107576, -87240.69054073,
    73027.53602511]])

    测试集
    xT, yT = load_svmlight_file(“/Users/steve/Desktop/testdata”)
    测试准确率方法
    clf.score


    已使用 Microsoft OneNote 2016 创建。