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

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

其中核心两句即

train train.txt

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

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

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

 from subprocess import *
import time time = time.time start_time = time()
print("训练")
cmd = "train train.txt"
Popen(cmd, shell = True, stdout = PIPE).communicate()
print("训练结束",str(time() - start_time)) start_time = time()
print("预测")
cmd = "predict test.txt train.txt.model output.txt"
Popen(cmd, shell = True).communicate()
print("预测结束",str(time() - start_time)) #进行统计
#读测试集真实label
start_time = time()
print("统计")
test_filename = "test.txt"
f = open(test_filename,"r",encoding = "utf-8")
real_class = []
for line in f:
real_class.append(line[0]) #总样本
total_sample = len(real_class) #读预测结果label
predict_filename = "output.txt"
f_predict = open(predict_filename,"r",encoding = "utf-8")
s = f_predict.read()
predict_class = s.split() #对预测正确的文章进行计数
T = 0
for real, predict in zip(real_class,predict_class):
if int(real) == int(predict):
T += 1
accuracy = T / total_sample * 100
print("正确率 为", str(accuracy) + "%") # class_label = ["0","1","2","3","4","5","6","7","8","9"]
num_to_cate = {0:"it",1:"体育",2:"军事",3:"金融",4:"健康",5:"汽车",6:"房产",7:"文化",8:"教育",9:"娱乐"} class_label = ["it","体育","军事","金融","健康","汽车","房产","文化","教育","娱乐"] predict_precision = dict.fromkeys(class_label,1.0)
predict_true = dict.fromkeys(class_label,1.0) predict_recall = dict.fromkeys(class_label,1.0)
predict_F = dict.fromkeys(class_label,0.0)
# print(str(predict_precision))
# print(str(predict_precision))
# print(str(predict_recall))
# print(str(predict_true))
mat = dict.fromkeys(class_label,{})
for k,v in mat.items():
mat[k] = dict.fromkeys(class_label,0) # print(str(mat)) for real, predict in zip(real_class,predict_class):
real = int(real)
predict = int(predict)
# print(num_to_cate[real])
# print(num_to_cate[predict])
mat[num_to_cate[real]][num_to_cate[predict]] += 1
predict_precision[num_to_cate[predict]] += 1
predict_recall[num_to_cate[real]] += 1 if int(real) == int(predict):
predict_true[num_to_cate[predict]] += 1 # print(str(predict_precision))
# print(str(predict_recall))
# print(str(predict_true)) #输出混淆矩阵
for k, v in mat.items():
print(k + ":" + str(v)) #计算精确率和召回率
for x in range(len(class_label)):
# x = str(x)
predict_precision[num_to_cate[x]] = predict_true[num_to_cate[x]] / predict_precision[num_to_cate[x]]
predict_recall[num_to_cate[x]] = predict_true[num_to_cate[x]] / predict_recall[num_to_cate[x]] # print(str(predict_precision))
# print(str(predict_recall))
# print(str(predict_true)) #计算F测度
for x in range(len(class_label)):
# x = str(x)
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]]) print("统计结束",str(time() - start_time))
print("精确率为",str(predict_precision))
print("召回率为",str(predict_recall))
print("F测度为",str(predict_F)) print("保存结果")
final_result_filename = "./finalresult.txt"
f = open(final_result_filename,"w",encoding = "utf-8")
for k, v in mat.items():
f.write(k + ":" + str(v) + "\n") f.write("\n")
f.write("正确率为" + str(accuracy) + "%" + "\n\n")
f.write("精确率为" + str(predict_precision) + "\n\n")
f.write("召回率为" + str(predict_recall) + "\n\n")
f.write("F测度为" + str(predict_F) + "\n\n")
print("保存结果结束") # cate_to_num = {"it":0,"体育":1,"军事":2,"华人":3,"国内":4,"国际":5,"房产":6,"文娱":7,"社会":8,"财经":9}
# num_to_cate = {0:"it",1:"体育",2:"军事",3:"华人",4:"国内",5:"国际",6:"房产",7:"文娱",8:"社会",9:"财经"}

liblinear使用总结的更多相关文章

  1. LibLinear(SVM包)使用说明之(一)README

    转自:http://blog.csdn.net/zouxy09/article/details/10947323/ LibLinear(SVM包)使用说明之(一)README zouxy09@qq.c ...

  2. LibLinear(SVM包)使用说明之(三)实践

    LibLinear(SVM包)使用说明之(三)实践 LibLinear(SVM包)使用说明之(三)实践 zouxy09@qq.com http://blog.csdn.net/zouxy09 我们在U ...

  3. LibLinear(SVM包)使用说明之(二)MATLAB接口

    LibLinear(SVM包)使用说明之(二)MATLAB接口 LibLinear(SVM包)使用说明之(二)MATLAB接口 zouxy09@qq.com http://blog.csdn.net/ ...

  4. LibLinear(SVM包)的MATLAB安装

    LibLinear(SVM包)的MATLAB安装 1 LIBSVM介绍 LIBSVM是众所周知的支持向量机分类工具包(一些支持向量机(SVM)的开源代码库的链接及其简介),运用方便简单,其中的核函数( ...

  5. Liblinear and Libsvm-rank训练数据的bash代码

    Liblinear and Libsvm-rank训练数据的bash代码: for j in "amazon_mp3" "video_surveillance" ...

  6. 学习笔记23—window10 64位 python2.7 安装liblinear

    最近在使用pythin,因为要使用libsvm,所以到官网去下载libsvm.官网地址为libsvm(https://www.csie.ntu.edu.tw/~cjlin/libsvm/)结果下载下来 ...

  7. liblinear和libsvm区别

    来源于知乎: 1. LibLinear是线性核,LibSVM可以扩展到非线性核(当也能用线性核,但同样在线性核条件下会比LibLinear慢很多).2. 多分类:LibLinear是one vs al ...

  8. liblinear参数及使用方法(原创)

    开发语言:JAVA 开发工具:eclipse (下载地址 http://www.eclipse.org/downloads/) liblinear版本:liblinear-1.94.jar (下载地址 ...

  9. Libsvm和Liblinear的使用经验谈

    原文:http://blog.sina.com.cn/s/blog_5b29caf7010127vh.html Libsvm和Liblinear都是国立台湾大学的Chih-Jen Lin博士开发的,L ...

随机推荐

  1. IO库----IO类,文件输入输出,string流

    一.IO类 1.IO库类型和头文件表: 头文件 类型 iostream istream,wistream 从流读取数据 ostream,wostream 向流写入数据 iostream,wiostre ...

  2. Maven常见jar包依赖

    <!-- servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactI ...

  3. LY.JAVA面向对象编程.工具类中使用静态、说明书的制作过程、API文档的使用过程

    2018-07-08 获取数组中的最大值 某个数字在数组中第一次出现时的索引 制作说明书的过程 对工具类的使用 获取数组中的最大值 获取数字在数组中第一次出现的索引值 API的使用过程 Math

  4. VMware workstation 14 Pro下载、安装及激活码

    虚拟机安装 1.百度搜索VMware应用程序 2.功能介绍 3.下载完成 4.开始安装 双击应用程序开始安装 5.点击“下一步” 6.勾选“我接受” 选择“下一步” 7.安装文件的选择:1.默认安装路 ...

  5. Win10系列:JavaScript综合实例3

    实现主页面的功能之后,接下来实现分类页面.分类页面中显示一种菜肴类别的详细信息,包括类别名称.图片.描述信息以及属于该类别的一些菜肴.在pages文件夹中添加一个名为classDetail的文件夹,并 ...

  6. IO多路复用,select、poll、epoll 编程主要步骤

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  7. 使用MYSQL数据库实现编程----第二章第三章课堂知识小总结

    第二章1:创建数据库create database myschool 2.数据类型  1.整型 int  2.小数 double  精确度要求高的 ----Decimal(18,4)  2222222 ...

  8. Mysql找回丢失密码

    (先进入root权限):# /etc/init.d/mysql stop# mysqld_safe --user=mysql --skip-grant-tables --skip-networking ...

  9. ArrayList和LinkedList有什么区别?

    ---恢复内容开始--- ArrayList和LinkedList都实现了List接口,但是: ArrayList是基于索引的数据接口,底层是数组,能够以O(1)时间复杂度随机访问元素.而Linked ...

  10. 实现html转png

    公司要求将一些重要数据全部以图片的形式放在官网上,防止网络爬虫. 之前都是UI作图,人工上传,为了解放生产力,于是我们程序处理. 步骤: 1.html得到与原图一致的图片(交给前端处理) 2.html ...