Liblinear机器学习库教程详解(基于Python API)

前言

Liblinear机器学习库主要实现SVM算法,在处理大规模数据时速度快,但也有缺点,就是太吃内存,博客 https://blog.csdn.net/roguesir/article/details/79793569 中介绍了在Mac Python3环境下安装,这篇博客介绍使用教程。

数据集要求

liblinear与libsvm类似,都要求使用libsvm格式数据,下面用库自带的heart_scale数据集进行介绍,数据集如下:

$ head heart_scale
+1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.419847 9:-1 10:-0.225806 12:1 13:-1
-1 1:0.583333 2:-1 3:0.333333 4:-0.603774 5:1 6:-1 7:1 8:0.358779 9:-1 10:-0.483871 12:-1 13:1
+1 1:0.166667 2:1 3:-0.333333 4:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-1 13:1
-1 1:0.458333 2:1 3:1 4:-0.358491 5:-0.374429 6:-1 7:-1 8:-0.480916 9:1 10:-0.935484 12:-0.333333 13:1
-1 1:0.875 2:-1 3:-0.333333 4:-0.509434 5:-0.347032 6:-1 7:1 8:-0.236641 9:1 10:-0.935484 11:-1 12:-0.333333 13:-1
-1 1:0.5 2:1 3:1 4:-0.509434 5:-0.767123 6:-1 7:-1 8:0.0534351 9:-1 10:-0.870968 11:-1 12:-1 13:1
+1 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5
+1 1:0.25 2:1 3:1 4:-0.698113 5:-0.484018 6:-1 7:1 8:0.0839695 9:1 10:-0.612903 12:-0.333333 13:1
+1 1:0.291667 2:1 3:1 4:-0.132075 5:-0.237443 6:-1 7:1 8:0.51145 9:-1 10:-0.612903 12:0.333333 13:1
+1 1:0.416667 2:-1 3:1 4:0.0566038 5:0.283105 6:-1 7:1 8:0.267176 9:-1 10:0.290323 12:1 13:1

数据形式为:label+(index:value)
第一列表示样本标签,随后是libsvm格式数据集,这种数据集为了避免稀疏情况,默认未显示的索引值为0,如第一行所示,1:0.708333表示索引为1的属性值为0.708333,而未出现的索引为11的属性值为0。
以上这种数据格式并不是必须的,也可以使用one-hot编码的列表,如:

# Dense data
 y, x = [1,-1], [[1,0,1], [-1,0,-1]]
# Sparse data
 y, x = [1,-1], [{1:1, 3:1}, {1:-1,3:-1}]

算法实现

支持向量机原理在这里不做赘述,之前有一篇博文写得比较详细:https://blog.csdn.net/roguesir/article/details/78659645 ,这节介绍算法实现。

>>> from liblinearutil import *
>>> y, x = svm_read_problem('../heart_scale', return_scipy = True)  # 生成训练集
>>> m1 = train(y[:200], x[:200, :], '-v 5 -c 4')  # 训练模型,这里使用了交叉验证
........................*....*
optimization finished, #iter = 288
Objective value = -273.047815
nSV = 116
.........................*.***.**
optimization finished, #iter = 274
Objective value = -305.012970
nSV = 124
.........................*...*.*.*
optimization finished, #iter = 301
Objective value = -271.645969
nSV = 109
.........................*.*.*
optimization finished, #iter = 275
Objective value = -253.467882
nSV = 108
........................*.***
optimization finished, #iter = 259
Objective value = -284.334805
nSV = 119
Cross Validation Accuracy = 83%
>>> m2 = train(y[:200], x[:200, :], '-c 4')  # 训练模型,未使用交叉验证
.........................*......**
optimization finished, #iter = 319
Objective value = -357.115226
nSV = 145
>>> p_label, p_acc, p_val = predict(y[200:], x[200:, :], m2)  # 测试
Accuracy = 81.4286% (57/70) (classification)
>>> save_model('model_file', m2)  # 保存模型
>>> model_ = load_model('model_file')  # 加载训练好的模型

Liblinear库使用非常简单,简单几步就可以实现SVM算法,而且速度超快~

参数详解

在训练和测试时,需要设置很多参数来提升模型性能,比如上面代码中的-v、-c等,下面进行详细介绍。

参数名作用描述
-w正则化可选-w1和-w2,分别为 L 1 L_1 L1 L 2 L_2 L2 正则罚项
-c正则化项参数控制正则化的效果,大多的损失函数都会加上正则化项防止过拟合,即 $ Loss=loss + regularizer$ 的形式,参数C控制了二者之间的比重,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值