设为首页 收藏本站
查看: 1276|回复: 0

[经验分享] PyMining

[复制链接]

尚未签到

发表于 2017-5-8 08:28:25 | 显示全部楼层 |阅读模式
  http://code.google.com/p/python-data-mining-platform/
  里面有介绍一些关于机器学习的一些算法。
  从搜狗实验室下载语料
  http://www.sogou.com/labs/dl/c.html
  注:这些都是分好类别的 http://code.google.com/p/python-data-mining-platform/wiki/Additional_Tools
  解压到d盘。
  检出pymining代码 http://python-data-mining-platform.googlecode.com/svn/trunk/
  将整个代码复制到一个python的项目。
  
DSC0000.jpg
  将搜狗的语料转换成pymining的语料格式。
  tools/sogou_importer.py

#encoding=utf-8
import dircache
import sys
import os
if __name__ == "__main__":
#    if len(sys.argv) <> 3:
#        print "python sogou_importer.py sogou_path output_file_path"
#        sys.exit()
dirNameDict = { \
"C000008":0, \
"C000010":1, \
"C000013":2, \
"C000014":3, \
"C000016":4, \
"C000020":5, \
"C000022":6, \
"C000023":7, \
"C000024":8, \
}
#    outputPath = sys.argv[2]
#    inputDir = sys.argv[1]
outputPath = "sougou_train.txt"
inputDir = "D:\Reduced";
ofs = open(outputPath, "w")
if inputDir[len(inputDir) - 1] != "/":
inputDir += "/"
for dirName in dirNameDict.keys():
newDir = inputDir + dirName + "/"
if (not os.path.exists(newDir)):
continue
fileList = dircache.listdir(newDir)
for fileName in fileList:
filePath = newDir + fileName
if (not os.path.exists(filePath)):
continue
ifs = open(filePath, "r")
fileContent = ifs.read()
fileContent = fileContent.decode("gb18030", "ignore")
fileContent = fileContent.replace("\n", " ")
fileContent = fileContent.replace("\t", " ")
ofs.write(fileContent.encode("utf-8") + "\t" + str(dirNameDict[dirName]) + "\n")
ifs.close()
ofs.close()

   一共8个类别,自行判断每个文件夹的新闻类别
  将格式化后的语料复制到项目的example/data/目录下。在example目录下新建mining目录
  开始测试分类的准确性:
  在example/data/sougou_train.txt中复制一个语料保存到example/data/sougou_test.txt中(后面带一个数字,这个数字代表的一个新闻的类别)。格式要与sougou_train.txt的格式保持一致。
  运行 example/naive_bayes_only_test.py

#coding: utf8
import sys, os
sys.path.append(os.path.join(os.getcwd(), '../'))
from pymining.math.matrix import Matrix
from pymining.math.text2matrix import Text2Matrix
from pymining.nlp.segmenter import Segmenter
from pymining.common.global_info import GlobalInfo
from pymining.common.configuration import Configuration
from pymining.preprocessor.chisquare_filter import ChiSquareFilter
from pymining.classifier.naive_bayes import NaiveBayes
if __name__ == "__main__":
config = Configuration.FromFile("conf/test.xml")
GlobalInfo.Init(config, "__global__")
txt2mat = Text2Matrix(config, "__matrix__")
[trainx, trainy] = txt2mat.CreateTrainMatrix("data/sougou_train.txt")
chiFilter = ChiSquareFilter(config, "__filter__")
chiFilter.TrainFilter(trainx, trainy)
[trainx, trainy] = chiFilter.MatrixFilter(trainx, trainy)
nbModel = NaiveBayes(config, "naive_bayes")
nbModel.Train(trainx, trainy)
[testx, testy] = txt2mat.CreatePredictMatrix("data/sougou_test.txt")
[testx, testy] = chiFilter.MatrixFilter(testx, testy)
[resultY, precision] = nbModel.Test(testx, testy)
print precision


  一会就输出准确率了 
  
DSC0001.jpg
  example/mining目录下会生成一些文件,这是pymining的一些学习模型,分类的时候可以加载这些文件来判别新的新闻来分类,或者直接在线的学习不加载这些文件。
  参考http://code.google.com/p/python-data-mining-platform/wiki/Tutorial 

比如ClassifiterMatrix类初始化的时候,将读取标签为matrix的信息(某些模块如果不需要读取某种标签的信息,这个标签下面将是无内容的,具体请见后面的xml)。
初始化的时候,需要指定最后一个布尔参数(isFromFile),表示是否这个模块从配置类中指定的文件中载入得到。
一般在训练的时候,指定这个参数为False,而在单独测试的时候,需要指定这个参数为True,因为需要从训练的时候生成的文件中载入训练的模型才能够进行测试。
   开始分类:
  我们选择不加载学习模型的文件来分类,从百度的新闻中找一个新闻。
  运行example/naive_bayes_train_test_bysample.py

#encoding=utf8
import sys, os
sys.path.append(os.path.join(os.getcwd(), '../'))
from pymining.math.matrix import Matrix
from pymining.math.text2matrix import Text2Matrix
from pymining.nlp.segmenter import Segmenter
from pymining.common.global_info import GlobalInfo
from pymining.common.configuration import Configuration
from pymining.preprocessor.chisquare_filter import ChiSquareFilter
from pymining.classifier.naive_bayes import NaiveBayes

if __name__ == "__main__":
config = Configuration.FromFile("conf/test.xml")
GlobalInfo.Init(config, "__global__")
txt2mat = Text2Matrix(config, "__matrix__")
[trainx, trainy] = txt2mat.CreateTrainMatrix("data/sougou_train.txt")
chiFilter = ChiSquareFilter(config, "__filter__")
chiFilter.TrainFilter(trainx, trainy)
nbModel = NaiveBayes(config, "naive_bayes")
nbModel.Train(trainx, trainy)
inputStr = "朝鲜人民军总参谋长李英浩被解职后,美韩不断猜测朝鲜内幕。据环球网报道,韩国《京乡新闻》22日分析称,“炸铜像事件可能成为朝鲜半岛紧张的新火种”,甚至揣测朝鲜可能借此牵制美国并实施第三次核试验。据京华时报报道,7月19日,朝方当天在首都平壤召开记者会,一名嫌疑人自称受韩国和美国情报机构指使,企图炸毁朝鲜建国领袖金日成的铜像。朝鲜外务省发言人20日表示,由于美国不改变其对朝敌视政策,朝鲜“不得不全面重新考虑核问题”。"
[cols, vals] = txt2mat.CreatePredictSample(inputStr.decode("utf-8"))
[cols, vals] = chiFilter.SampleFilter(cols, vals)
probTuple = nbModel.TestSample(cols, vals)
print probTuple

   输出这个新闻的每个类别的相似概率。

朝鲜人民军总参谋长李英浩被解职后,美韩不断猜测朝鲜内幕。
据环球网报道,韩国《京乡新闻》22日分析称,“炸铜像事件可能成为朝鲜半岛紧张的新火种”,甚至揣测朝鲜可能借此牵制美国并实施第三次核试验。
据京华时报报道,7月19日,朝方当天在首都平壤召开记者会,一名嫌疑人自称受韩国和美国情报机构指使,企图炸毁朝鲜建国领袖金日成的铜像。
朝鲜外务省发言人20日表示,由于美国不改变其对朝敌视政策,朝鲜“不得不全面重新考虑核问题”。
((0, 3.9413063433550935e-60), (1, 1.5063156437023602e-39), (2, 6.35241774643204e-48), (3, 2.2260167379491118e-68), (4, 7.13553884486322e-30), (5, 7.708008674579432e-40), (6, 1.5767993409024485e-48), (7, 0.06578001159339009), (8, 0.9342199884066099))

  (8, 0.9342199884066099)从这个可以看出,这个新闻属于我们的新闻类别中的第8类。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-374412-1-1.html 上篇帖子: Python:通过远程监控用户输入来获取淘宝账号和密码的实验(二) 下篇帖子: Google 实验Python和C++的杂交语言--GO的多核编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表