海量数据分类 liblinear使用总结

2023-11-17


liblinear是libsvm的线性核的改进版本,专门适用于百万数据量的分类。正好适用于我这次数据挖掘的实验。

 

liblinear用法和libsvm很相似,我是用的是.exe文件,利用python的subprocess向控制台发送命令即可完成本次试验。

 

其中核心两句即

train train.txt

predict test.txt train.txt.model output.txt

 

由于是线性核,没有设置参数c、g

 

对于50W篇文章模型训练仅需340秒,50W篇文章的预测仅需6秒

 

  1 from subprocess import *
  2 import time
  3 
  4 time = time.time
  5 
  6 start_time = time()
  7 print("训练")
  8 cmd = "train train.txt"
  9 Popen(cmd, shell = True, stdout = PIPE).communicate()
 10 print("训练结束",str(time() - start_time))
 11 
 12 
 13 start_time = time()
 14 print("预测")
 15 cmd = "predict test.txt train.txt.model output.txt"
 16 Popen(cmd, shell = True).communicate()
 17 print("预测结束",str(time() - start_time))
 18 
 19 
 20 #进行统计
 21 #读测试集真实label
 22 start_time = time()
 23 print("统计")
 24 test_filename = "test.txt"
 25 f = open(test_filename,"r",encoding = "utf-8")
 26 real_class = []
 27 for line in f:
 28     real_class.append(line[0])
 29 
 30 #总样本
 31 total_sample = len(real_class)
 32 
 33 #读预测结果label
 34 predict_filename = "output.txt"
 35 f_predict = open(predict_filename,"r",encoding = "utf-8")
 36 s = f_predict.read()
 37 predict_class = s.split()
 38 
 39 #对预测正确的文章进行计数
 40 T = 0
 41 for real, predict in zip(real_class,predict_class):
 42     if int(real) == int(predict):
 43         T += 1
 44 accuracy  = T / total_sample * 100
 45 print("正确率 为", str(accuracy) + "%")
 46 
 47 
 48 # class_label = ["0","1","2","3","4","5","6","7","8","9"]
 49 num_to_cate = {0:"it",1:"体育",2:"军事",3:"金融",4:"健康",5:"汽车",6:"房产",7:"文化",8:"教育",9:"娱乐"}
 50 
 51 class_label = ["it","体育","军事","金融","健康","汽车","房产","文化","教育","娱乐"]
 52 
 53 predict_precision = dict.fromkeys(class_label,1.0)
 54 predict_true = dict.fromkeys(class_label,1.0)
 55 
 56 predict_recall = dict.fromkeys(class_label,1.0)
 57 predict_F = dict.fromkeys(class_label,0.0)
 58 # print(str(predict_precision))
 59 # print(str(predict_precision))
 60 # print(str(predict_recall))
 61 # print(str(predict_true))
 62 mat = dict.fromkeys(class_label,{})
 63 for k,v in mat.items():
 64     mat[k] = dict.fromkeys(class_label,0)
 65 
 66 # print(str(mat))
 67 
 68 for real, predict in zip(real_class,predict_class):
 69     real = int(real)
 70     predict = int(predict)
 71     # print(num_to_cate[real])
 72     # print(num_to_cate[predict])
 73     mat[num_to_cate[real]][num_to_cate[predict]] += 1
 74     predict_precision[num_to_cate[predict]] += 1
 75     predict_recall[num_to_cate[real]] += 1
 76 
 77     if int(real) == int(predict):
 78         predict_true[num_to_cate[predict]] += 1
 79 
 80 # print(str(predict_precision))
 81 # print(str(predict_recall))
 82 # print(str(predict_true))
 83 
 84 #输出混淆矩阵
 85 for k, v in mat.items():
 86     print(k + ":" + str(v))
 87 
 88 #计算精确率和召回率
 89 for x in range(len(class_label)):
 90     # x =  str(x)
 91     predict_precision[num_to_cate[x]] = predict_true[num_to_cate[x]] / predict_precision[num_to_cate[x]]
 92     predict_recall[num_to_cate[x]] = predict_true[num_to_cate[x]] / predict_recall[num_to_cate[x]]
 93 
 94 # print(str(predict_precision))
 95 # print(str(predict_recall))
 96 # print(str(predict_true))
 97 
 98 #计算F测度
 99 for x in range(len(class_label)):
100     # x = str(x)
101     predict_F[num_to_cate[x]] = 2 * predict_recall[num_to_cate[x]] * predict_precision[num_to_cate[x]] / (predict_precision[num_to_cate[x]] + predict_recall[num_to_cate[x]])
102 
103 print("统计结束",str(time() - start_time))
104 print("精确率为",str(predict_precision))
105 print("召回率为",str(predict_recall))
106 print("F测度为",str(predict_F))
107 
108 print("保存结果")
109 final_result_filename = "./finalresult.txt"
110 f = open(final_result_filename,"w",encoding = "utf-8")
111 for k, v in mat.items():
112     f.write(k + ":" + str(v) + "\n")
113 
114 f.write("\n")
115 f.write("正确率为" + str(accuracy) + "%" + "\n\n")
116 f.write("精确率为" + str(predict_precision) + "\n\n")
117 f.write("召回率为" + str(predict_recall) + "\n\n")
118 f.write("F测度为" + str(predict_F) + "\n\n")
119 print("保存结果结束")
120 
121 
122 # cate_to_num = {"it":0,"体育":1,"军事":2,"华人":3,"国内":4,"国际":5,"房产":6,"文娱":7,"社会":8,"财经":9}
123 # num_to_cate = {0:"it",1:"体育",2:"军事",3:"华人",4:"国内",5:"国际",6:"房产",7:"文娱",8:"社会",9:"财经"}

原文:https://www.cnblogs.com/anqiang1995/p/7955672.html


liblinear是一个适用于大规模数据集的线性分类器,可处理多分类问题。

参考:使用教程英文版:点击打开链接

          使用案例(代码):点击打开链接

          libsvm使用:点击打开链接

介绍:

        关于参数以及什么时候该使用:点击打开链接

        github地址:点击打开链接

        readme翻译:点击打开链接

 建议的训练步骤(来源于libSVM,感觉对这个也有帮助,所以也标记在这):

1)将我们的训练数据和测试数据转换为该SVM软件包支持的格式;

2)对数据进行简单的尺度化scale;

3)先考虑用RBF核;

4)使用交叉检验方法去寻找最优的参数C和γ;

5)使用找到的最好的参数C和γ来训练整个训练集;

6)在测试集上测试。



需要注意的是,一定要先把数据处理成要求的格式,即如下这种格式:

标签 1:特征1值 2:特征2值

一个简单的例子:

1 from liblinearutil import *

2 读取数据

  y,x  =  svm_read_problem('data_path')

3 训练

  m = train(y,x,'option')#option为设置 比如: -s 2 -c 5 -q

3 也可以做交叉验证

  CV_ACC = train(y, x, '-v 3')
  # -v 3 是指进行3-fold的交叉验证
  # 返回的是交叉验证的准确率

4 预测并输出准确率

  frbs, p_acc, p_vals = predict(y, x, m, '-b 0')

其中:

# y是testing data的真实标签,用于计算准确率
# x是待预测样本
# p_labs: 预测出来的标签
# p_acc: tuple类型,包括准确率,MSE,Squared correlation coefficient(平方相关系数)
# p_vals: list, 直接由模型计算出来的值,没有转化成1,0的值,也可以看做是概率估计值



备注:

在结果中,#iter表示迭代次数,Objective value 为SVM文件转换为的二次规划求解得到的最小值,nSV 为标准支持向量个数(0<a[i]<c)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

海量数据分类 liblinear使用总结 的相关文章

  • 台式计算机的配置怎么看,台式电脑配置怎么看

    电脑的性能 价格决定于电脑的配置 很多人电脑新手在购买电脑的时候对电脑配置的相关情况不太了解 导致新买的电脑频频出问题 所以了解自己电脑配置是很重要的 这里我们就简单的来说说台式电脑配置怎么看 电脑配置一般CPU 显卡 主板 内存 硬盘 显
  • lambda表达式二之Stream流

    Stream流 是数据渠道 用于操作数据源 集合 数组等 所生成的元素序列 集合讲的是数据 流讲的是计算 Stream自己不会存储元素 Stream不会改变源对象 会返回一个持有结果的新Stream Stream操作是延迟执行的 意味着会等
  • LeetCode312. 戳气球 (分治,记忆化搜索,动态规划)

    LeetCode312 戳气球 解题思路 记忆化搜索 动态规划 解题思路 官方题解 参考题解 核心思想 由于戳气球的操作会导致两个气球从不相邻变成相邻 使得后续操作难以处理 于是我们倒过来看这些操作 将全过程看成每次添加一个气球 solve

随机推荐

  • CMake入门实践(一) 什么是cmake

    一 CMake简介 CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 特性 类似UNIX下的automake 只是
  • mac AE 快捷键

    项目窗口 新项目 Ctrl Alt N 打开项目 Ctrl O 打开项目时只打开项目窗口 按住Shift键 打开上次打开的项目 Ctrl Alt Shift P 保存项目 Ctrl S 选择上一子项 上箭头 选择下一子项 下箭头 打开选择的
  • Flink + Hudi 实现多流拼接(大宽表)

    1 背景 经典场景 Flink 侧实现 业务侧通常会基于实时计算引擎在流上做多个数据源的 JOIN 产出这个宽表 但这种解决方案在实践中面临较多挑战 主要可分为以下两种情况 维表 JOIN 场景挑战 指标数据与维度数据进行关联 其中维度数据
  • .net 配置网关(使用Ocelot)

    本文演示一个最简单的demo 来模拟如何通过网关来访问服务 而不是直接访问服务 创建三个asp net core web api项目 一个作为网关 两个作为服务 分别配置项目的访问路径 网关的项目使用https localhost 5001
  • MQTT-java使用说明

    MQTT java使用说明 本文的资料下载 链接 https pan baidu com s 1OCfsQ NqcehKy86kYkA wg pwd 1234 提取码 1234 MQTT基本介绍 MQTT是一个客户端服务端架构的发布 订阅模
  • DNS在架构设计中的巧用

    DNS在架构设计中的巧用 一 缘起 一个http请求从客户端到服务端 整个执行流程是怎么样的呢 一个典型流程如上 1 客户端通过域名daojia com请求dns server 2 dns server返回域名对应的外网ip 1 2 3 4
  • python拟合二次函数_Python 最小二乘法 拟合 二次曲线

    最小二乘 Python 二次拟合 随机生成数据 并且加上噪声干扰 构造需要拟合的函数形式 使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as np import matplotl
  • 讯飞aiui的webapi+python使用记录

    1 demo一直不能出语义理解 我以为是我的问题 直到 当前页面配置修改仅在测试环境生效 设备端体验需要SDK传参时在情景模式后加 box 或 更新发布 至生产环境体验 这不坑爹吗 记得在情景模式后加 box
  • BFS的常见算法题-二叉树的最小深度

    背景 对某个二叉树 我们除了用肉眼可以看出其深度 还可以用算法来计算出它的深度 比如 下面的二叉树 一共有三层 它的深度就是3 如果某个分支的叶子结点没有左右子节点 就是它深度中较小的一个 leetcode中 有一题求最小深度 如下图 最小
  • 各种日志关系

    slf4j是日志的门面 也是会说是日志框架
  • 【Unity开发】Unity获取设备屏幕分辨率

    using UnityEngine using System Collections public class ExampleClass MonoBehaviour void Start Resolution resolutions Scr
  • Vscode ssh远程连接失败解决办法

    问题描述 Vscode 通过remote ssh连接远程ubuntu时出现 192 168 x x has fingerprint SHA256 如下图所示 按照提示选择 continue 然后输入正确密码却显示Permission Den
  • java md5 解密_“实用”的JAVA开发工具类库

    简介 Hutool是一个小而全的Java工具类库 通过静态方法封装 降低相关API的学习成本 提高工作效率 使Java拥有函数式语言般的优雅 让Java语言也可以 甜甜的 Hutool中的工具方法来自于每个用户的精雕细琢 它涵盖了Java开
  • 免费的 AI 代码辅助工具-codeium

    不是标题党 是真免费 几天之前 GitHub 发布了 GitHub Copilot X 这是一款基于 OpenAI 的 GPT 4 模型开发的 AI 代码辅助工具 看介绍应该是和 Microsoft 365 Copilot 很像的产物 属于
  • ChatGLM-6B部署笔记

    前言 本笔记基于ChatGLM 6B开源网站 https github com THUDM ChatGLM 6B 完成ChatGLM的本地部署 首先电脑已经安装python3 10 anaconda pycharm2022 3 如若使用本地
  • Application.targetFrameRate安卓apk上设置帧率问题

    一般游戏为了更好的适配各种机型 会对游戏进行锁帧 就会使用Application targetFrameRate这个方法设置帧率 pc上测试是没问题的 但是安卓机上面测试就会发现 设置的帧率只能在30和60帧两个数值来回跳动 参考了unit
  • 21-angular.merge

    通过从src对象 s 复制自己的可枚举属性到dst 深度扩展了目标对象的dst 您可以指定多个src对象 如果您想保留原始对象 那么可以通过将空对象作为目标来实现 var object angular merge object1 objec
  • 睿智的seq2seq模型1——利用seq2seq模型对数字进行排列

    睿智的seq2seq模型1 利用seq2seq模型对数字进行排列 学习前言 seq2seq简要介绍 利用seq2seq实现数组排序 实现方式 一 对输入格式输出格式进行定义 二 建立神经网络 1 神经网络的输入 2 语义编码c的处理 3 输
  • 【English】十大词性之感叹词(感叹句)

    感叹词 文章目录 感叹词 前言 一 十大高频感叹词 1 1 Oh 表示惊讶 指责 痛苦 称赞 懊恼等 可译为 哦 哎呀 噢 啊 呀 等 1 2 Ah 表示惊奇 高兴 讨厌 懊悔 藐视 威胁等 可译为 呀 啊 等 1 3 come 表示鼓励
  • 海量数据分类 liblinear使用总结

    liblinear使用总结 liblinear是libsvm的线性核的改进版本 专门适用于百万数据量的分类 正好适用于我这次数据挖掘的实验 liblinear用法和libsvm很相似 我是用的是 exe文件 利用python的subproc