python 使用libsvm分析数据

一. 将数据格式转换为libsvm

用libsvm分析数据,首先要把csv格式的数据转换成libsvm格式,网上搜到的方法如下:

1. 网上有一个xls文FormatDataLibsvm.xls具有宏命令,可以利用其中的宏命令来实现。对于属性数据只有一二百的,这种工具简单方便。

2. 可以利用weka来转换,用weka打开csv文件,再将文件重新保存为libsvm格式。

由于我的数据有180万左右,所以使用了第二种方法。去weka官网下载最新版本,我的是weka-3-9-2-oracle-jvm,转换前需要提前下载libsvm的包。打开GUI界面,点击tools下的package manager,按如下界面搜索并下载。

python 使用libsvm分析数据_第1张图片
python 使用libsvm分析数据_第2张图片

然后就可以转换了数据了。需要注意的是,保存时有可能没有存为.libsvm的选项,这是因为数据格式只能是numerical或者nominal,修改或移除之后就可以了。

二. Mac电脑配置python(PyCharm)的libsvm

1. 首先下载libsvm.zip文件  

2. unzip一下libsvm.zip文件,用终端进入libsvm文件夹  

3. 输入make

4. 进入libsvm下的python文件夹  

5. make一次libsvm->python文件夹  ,上层文件夹会出现一个libsvm.so.2文件

现在已经编译好libsvm了,值得注意的是:libsvm.so.2是unix系统所需要的链接库,而且存在于python上一个文件夹中(即libsvm主文件夹中,而且在svmutil.py中引用libsvm.so.2时,都是看做在上一个目录下进行引入的)

6. 进入系统所使用的python的site-packages文件夹,将libsvm.so.2复制到site-packages文件夹中(本机为/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages)

7. 在该文件夹下建立文件夹libsvm,进入libsvm文件夹,新建__init__.py文件(这一步十分重要,因为libsvm.so.2在上一层文件夹中,因此该libsvm文件夹将会被看做一个python工作区,而__init__.py对于python工作区来说是必须的)

8. 将libsvm->python文件夹下的svm.py、svmutil.py都复制到这个新建的libsvm文件夹中。

按道理说,这样就成功了,但是当我用PyCharm运行from libsvm import svmutil时,出现了如下问题:

ModuleNotFoundError: No module named 'svm'

查看svmutil.py,发现有如下代码:

from svm import *  

from svm import __all__ as svm_all 

因为当前路径不在系统路径下,编译器不知道去哪里找svm.py,所以修改上述代码为:

from libsvm.svm import *  

from libsvm.svm import __all__ as svm_all 


就可以用from libsvm.svmutilimport *运行啦。

三、一个简单例子

这里使用了一个最简单的栗子。

from libsvm.svmutil import *

y,x=svm_read_problem('train.libsvm')  # 训练数据

yt,xt=svm_read_problem('test.libsvm')  # 测试数据

m = svm_train(y[:37000], x[:37000])  # 使用前37000个数据训练

p_label,p_acc,p_val=svm_predict(y[-1700:],x[-1700:],m)  # 使用后1700个数据测试

你可能感兴趣的:(python 使用libsvm分析数据)