《集体智慧编程》关于婚介数据集的SVM分类

转自:http://muilpin.blog.163.com/blog/static/165382936201131875249123/

作者写这本书的年代已经很久远了,于是里面使用到的LIBSVM接口与现在也非常不一样:

1.书本上提高的官方下载svm已经更新至3.x版本,不适合(研究了很久,发现接口很大不一样,建议阅读者不要使用最新版本,如果实在需要请参考本文第4点)
2.网上有人用libsvm2.89在Python2.6成功。(一定要libsvm2.89搭配python2.6,其他版本都不能成功,我就是浪费了大量时间在这里!)
两步:
1.将libsvm-2.89\windows\python目录下的svmc.pyd文件复制到C:\Python26\DLLs;
2.将libsvm-2.89\python目录下的svm.py放到C:\Python26\Lib目录里。
from svm import * 成功(本点非本人总结,但附上libsvm2.89的下载地址:http://ishare.iask.sina.com.cn/f/6344231.html)
 
from svm import *prob  = svm_problem([1,-1] ,[[1,0,1] , [-1,0,-1]] )
param = svm_parameter(kernel_type = LINEAR , C = 10)
## training the model
m = svm_model(prob ,param)
#testing the model
m.predict( [1, 1 , 1] )

3.如果想要超级简单的了解关于SVM的知识,可以参考书籍提供下载svm官网中的guide文件,写的挺精辟的;
 
4.本人花了一个下午的时间使用了svm3.19版本,如果你实在坚持使用3.x版本,可以参考以下的方法:
(1)下载libsvm代码包,解压后将文件夹Window下的libsvm\window\libsvm.dll文件  复制到C:\WINDOWS\System32路径下;
(2)将代码包里面的文件夹Python中的svmutil.py文件复制到你的工作目录(如果想用svm.py,同理操作,以下以svmutil.py举例,区别请看python文件夹下的README!)
  即把svmutil.py和svm.py两个文件拉到eclipse工程目录里
(3)与书上不同的地方在于:svm_parameter()函数的使用方法更新了,方法如下说明:
用法:param = svm_parameter('Training Opition')
实例:param = svm_parameter('-s 3 -c 5 -h 0')
其中里面的参数如下详细说明:
options:
-s svm_type : set type of SVM (default 0)
0 -- C-SVC
1 -- nu-SVC
2 -- one-class SVM
3 -- epsilon-SVR
4 -- nu-SVR
-t kernel_type : set type of kernel function (default 2)
0 -- linear: u'*v
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_set_file)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
-v n: n-fold cross validation mode
-q : quiet mode (no outputs)

(4)svm_model已经成为一个类,不能直接调用,但可以通过以下两种方法实现对数据集的建模:
>>> model = svm_train(prob, param)
>>> model = svm_load_model('model_file_name') #从保存的model中获取模型
from svm import *
from svmutil import *#构造svm训练数据和svm参数(包括核函数和交叉验证)
data = svm_problem([1,-1] ,[[1,0,1] , [-1,0,-1]] )      #元组第一个列表表示分类种类,第二个列表表示数据
# param = svm_parameter(kernel_type = 'LINEAR' ,C = 10)     #使用线性核函数,交叉验证用10#对svm模型训练
'''
参数-t表示kernel函数,-c表示交叉验证用多少
-t kernel_type : set type of kernel function (default 2)0 -- linear: u'*v1 -- polynomial: (gamma*u'*v + coef0)^degree2 -- radial basis function: exp(-gamma*|u-v|^2)
'''
param = svm_parameter('-c 10 -h 0') #默认选择RBF核函数
model = svm_train(data, param)#测试
svm_predict([1],[[1,1,1]],model) #predict有三个参数,第一个参数是你预测的类型,第二个是你输入要预测的数据,最后一个参数就是训练模型

结果是:
optimization finished, #iter = 1
nu = 0.107467
obj = -1.074672, rho = 0.000000
nSV = 2, nBSV = 0
Total nSV = 2
Accuracy = 100% (1/1) (classification)

(5)另外有一定需要特别注意的是,书本上的这种写法已经不合适了:
>>> newrow=[28.0,-1,-1,26.0,-1,1,2,0.8] # Man doesn't want children, woman does
>>> m.predict(scalef(newrow))

可以更新为:
>>>newrow=[(28.0,-1,-1,26.0,-1,1,2,0.8)]   #注意里面多了一个元组符号'()'
>>>svm_predict([0]*len(newrow),newrow,m)   #注意m代表svm_train出来的模型,第一个参数的解释如下:
a list/tuple of l true labels (type must be int/double). It is used for calculating the accuracy. Use [0]*len(x) if true labels are unavailable.  即第一个参数表示你对newrow的预测值。
 
5.如果你下载了svm3.x版本,就需要详细看下载包里面的README文件,里面有提到各种函数的用法,但解释感觉不全面;
 
6.另外书中第9章还有一些错误如下:
def scaledata(rows):
low=[999999999.0]*len(rows[0].data)
high=[-999999999.0]*len(rows[0].data)
# Find the lowest and highest values
for row in rows:
d=row.data
for i in range(len(d)):
if d[i]<low[i]: low[i]=d[i]
if d[i]>high[i]: high[i]=d[i]
# Create a function that scales data
def scaleinput(d):
return [(d.data[i]-low[i])/(high[i]-low[i])for i in range(len(low))] #可能出错(1)(2)
# Scale all the data
newrows=[matchrow(scaleinput(row.data)+[row.match])for row in rows] 
# Return the new data and the function
return newrows,scaleinput
可能出错(1):如果使用作者前面计算位置距离的函数milesdistance():
def milesdistance(a1,a2):
return 0

分母则会为0出错,我的做法如下:1.产生[0,1]随机数;2.分母另外加上0.000000001;但使用Yahoo来获取距离是可以的!
出错的地方(2):d.data[i]出错,应该更改为d[i]
还有附录B中计算点积的公式有误:
def veclength(a):
return sum([a[i] for i in range(len(a))])**.5

一个多维向量的模应该为a[i]**2而非a[i];

转载于:https://www.cnblogs.com/lifegoesonitself/p/3230264.html

(转)python 搭建libsvm方法。python版本和libsvm版本匹配很重要!相关推荐

  1. python list index方法,Python List.index()方法

    Python List index()方法 Python index()方法返回传递的元素的索引.此方法接受一个参数并返回其索引.如果该元素不存在,则会引发ValueError. 如果list包含重复 ...

  2. python仿真搭建_mock搭建——python——搭建一个简单的mock服务——简单版本

    1.无聊的背景.起源: 如今的业务系统越来越复杂庞大,各个功能直接的调用也是多如牛毛,但如果在联调的时候,恰好被调的接口正在开发,怎么办? 傻傻的等么,不存在的!这时会搭建一些server来进行moc ...

  3. python搭建神经网络模型,python实现神经网络算法

    如何用 Python 构建神经网络择时模型 . importmathimportrandom(0)defrand(a,b):#随机函数return(b-a)*random.random()+adefm ...

  4. python搭建django框架,Python之Web框架Django项目搭建全过程

    Python之Web框架Django项目搭建全过程 IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 注:可通过pip fre ...

  5. python endwith_Python endswith()方法 - Python 教程 - 自强学堂

    Python endswith()方法 描述 Python endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False.可选参数"star ...

  6. python endswith_Python endswith()方法 - Python 教程 - 自强学堂

    Python endswith()方法 描述 Python endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False.可选参数"star ...

  7. python startswith_Python startswith()方法 - Python 教程 - 自强学堂

    Python startswith()方法 描述 Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False.如果参数 beg 和 ...

  8. python电脑下载方法-python 获取机器snpython下载文件的几种常用方法

    python中下载文件常用的几个模块有urllib,urllib2,requests,方法也很简单,代码如下: 002pc.com从python 获取机器snpython下载文件的几种常用方法分析来看 ...

  9. python maketrans_Python maketrans()方法 - Python 教程 - 自强学堂

    Python maketrans()方法 描述 Python maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参 ...

  10. python列表排序方法-python list排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...

最新文章

  1. linux学习笔记一
  2. 机器学习之强化学习概览
  3. 两个二进制数异或的结果
  4. linux下串口的阻塞和非阻塞操作
  5. 前端学习(3277):promise的使用
  6. 以太坊智能合约 编译脚本
  7. 事务隔离级别神话与误解
  8. MySQL安全设置命令mysql_secure_installation
  9. 198. house robber 题解
  10. 腾讯云 mysql 密码_腾讯云mysql重新设置密码解决办法
  11. C# Winform App 获取当前路径
  12. svn项目管理服务器,Apache 下SVN项目管理使用说明
  13. win10 matlab打开,win10系统启动matlab出现闪退的处理步骤
  14. python计算复数模_python 模拟casio复数计算器【施工中】
  15. 7-2 求奇数和 (5 分)
  16. 对微信卖小电影的一次内网漫游
  17. 2018-2019ICPC焦作C题Supreme Command kd-tree
  18. 1.GraphPad Prism 8软件安装
  19. SpringBoot控制配置类加载顺序
  20. 基于DS18B20温度检测

热门文章

  1. 视频预训练界的HERO!微软提出视频-语言全表示预训练模型HERO,代码已开源!...
  2. 滴滴图像技术团队招聘计算机视觉工程师和专家
  3. 黑科技DeepFake检测方法:利用心跳做信号,还能「揪出」造假模型
  4. 零基础应该先学习 java、php、前端 还是 python?
  5. 【OpenCV】OpenCV函数精讲之 -- imread()函数
  6. 保姆级计算机视觉学习路线
  7. 超强领先!Transformer图像复原效果显著!
  8. 带你自学Python系列(二):Python列表总结-思维导图
  9. oracle空间整理,ORACLE数据库空间整理心得
  10. 常见特征检测算法介绍