liblinear使用总结
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使用总结的更多相关文章
- LibLinear(SVM包)使用说明之(一)README
转自:http://blog.csdn.net/zouxy09/article/details/10947323/ LibLinear(SVM包)使用说明之(一)README zouxy09@qq.c ...
- LibLinear(SVM包)使用说明之(三)实践
LibLinear(SVM包)使用说明之(三)实践 LibLinear(SVM包)使用说明之(三)实践 zouxy09@qq.com http://blog.csdn.net/zouxy09 我们在U ...
- LibLinear(SVM包)使用说明之(二)MATLAB接口
LibLinear(SVM包)使用说明之(二)MATLAB接口 LibLinear(SVM包)使用说明之(二)MATLAB接口 zouxy09@qq.com http://blog.csdn.net/ ...
- LibLinear(SVM包)的MATLAB安装
LibLinear(SVM包)的MATLAB安装 1 LIBSVM介绍 LIBSVM是众所周知的支持向量机分类工具包(一些支持向量机(SVM)的开源代码库的链接及其简介),运用方便简单,其中的核函数( ...
- Liblinear and Libsvm-rank训练数据的bash代码
Liblinear and Libsvm-rank训练数据的bash代码: for j in "amazon_mp3" "video_surveillance" ...
- 学习笔记23—window10 64位 python2.7 安装liblinear
最近在使用pythin,因为要使用libsvm,所以到官网去下载libsvm.官网地址为libsvm(https://www.csie.ntu.edu.tw/~cjlin/libsvm/)结果下载下来 ...
- liblinear和libsvm区别
来源于知乎: 1. LibLinear是线性核,LibSVM可以扩展到非线性核(当也能用线性核,但同样在线性核条件下会比LibLinear慢很多).2. 多分类:LibLinear是one vs al ...
- liblinear参数及使用方法(原创)
开发语言:JAVA 开发工具:eclipse (下载地址 http://www.eclipse.org/downloads/) liblinear版本:liblinear-1.94.jar (下载地址 ...
- Libsvm和Liblinear的使用经验谈
原文:http://blog.sina.com.cn/s/blog_5b29caf7010127vh.html Libsvm和Liblinear都是国立台湾大学的Chih-Jen Lin博士开发的,L ...
随机推荐
- oracle函数NVL,NVL2和NULLIF之间的区别和使用
oracle用这么几个函数,可以帮助我们解决数据上null或0的处理 1.NVL()函数 1.1)介绍:NVL(expr1,expr2),若expr1为null, 返回expr2; 不为null,返回 ...
- js 复制对象的深复制与浅复制
1.潜复制(修改新对象会改变原对象) var baz = {a:'hello', b: {c:'my', d:'friend'}} var foo = baz foo.a="better&q ...
- linux磁盘管理 磁盘查看操作
df查看磁盘分区使用状况 df --显示磁盘分区使用状况 'l' 仅显示本地磁盘(默认) 'a' 显示所有文件系统的磁盘使用情况,包含比如/proc/ 'h' 以1024进制计算最合适的单位显示磁盘容 ...
- 遍历存储所有物体添加到列表中(使用GameObject.activeSelf进行判断)
//存储菜单列表 List<GameObject> subMenu = new List<GameObject>(); //存储所有子菜单 public void StoreS ...
- Leetcode 回溯法 典型例题
那些要求列举所有的情况,或者说所有的情况都要探讨一下的例题,一般都可以考虑回溯法. 当遇到一个可以用到回溯法的时候需要按照如下步骤进行: 1.确定问题一个可以用到回溯法的时候需要按照如下步骤进行: 1 ...
- 【原创】连接数据库MySQL,读取、显示、修改数据
/* Time: 2017.01.02 —— 2017.01.04 * Author: WJ * Function:连接数据库,从数据库中读取图片并显示(已成功) */ [参考链接] MySQL存入图 ...
- json解析写入mysql
import json,requests,pymysql from pprint import pprint from datetime import datetime dt=datetime.now ...
- VSTO:使用C#开发Excel、Word【5】
<Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...
- Find the Missing Number II
Giving a string with number from 1-n in random order, but miss 1 number.Find that number. Notice n & ...
- cnn 经典网络结构 解析
cnn发展史 这是imageNet比赛的历史成绩 可以看到准确率越来越高,网络越来越深. 加深网络比加宽网络有效的多,这已是公认的结论. cnn结构演化图 AlexNet 诞生于2012年,因为当时用 ...