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 创建。