chapter9

发现两个问题:

一、关于libsvm的移植

本章移植libsvm的时候提到,Python版本在变化,2.4和2.5操作已经很不一样,更别说Python3了。当时在Python2和Python3之间犹豫了一下。最后决定跟着书上程序一步一步来,所以选择了Python2。

其实libsvm版本变化也是巨大。。。操作如下:

1.作者源码中提供的svmc.pyd和svm.py在Python2.6上尝试不成功。

2.上libsvm官网下载最新的libsvm3.0,发现变动太大,接口的操作格式都不一样了,果决放弃。

3.网上有人用libsvm2.89在Python2.6成功,于是仿效。两步:将libsvm-2.89/windows/python目录下的svmc.pyd文件复制到C:/Python26/DLLs;将libsvm-2.89/python目录下的svm.py放到C:/Python26/Lib目录里。from svm import * 成功。

PS:libsvm-2.89跟原作者使用的libsvm接口还是有点点不同。比如:m.save(test.model) -> m.save('test.model')。其他的暂时还没深究,有问题出现再总结。

rm: none; color: #000000; text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px;">二、数据的缩放处理

由于上不了国外网,索性将milesdistance定义为空函数,返回0。作者也说了,如果用不了Yahoo!API的话,可以这么做。

但是接下来在缩放的时候出现的问题作者就没考虑了。这让我着实费了些功夫。

如果返回的距离都为0的话,那最后一列的最大值和最小值都为0 & high-low=0,作为分子被除的话会立马报错。主要也是我太相信作者的那句话,以至于没有觉得会是这个原因,还以为是数据的原因,里面出现了high=low的情况,调试了半天才发现是这个原因。

类似chapter7那个问题的解决方法,我就索性不处理最后一列。红色为修改了的地方:

for i in range(len(d)-1):
            if d[i]<low[i]: low[i]=d[i]
            if d[i]>high[i]: high[i]=d[i]

##############################

def scaleinput(d):
        newd = [0.0]*len(low)

        for i in range(len(low)-1):

            newd[i] = (d[i]-low[i])/(high[i]-low[i])

        return newd

初步看了下数据,应该是没有问题,只是将距离的因素去掉了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值