sklearn中文文本分类 贝叶斯分类支持中文吗

一种基于朴素贝叶斯算法的中文文本分类系统--《信息技术与信息化》2015年10期
一种基于朴素贝叶斯算法的中文文本分类系统
【摘要】:本文针对中文文本分类的特点,采用中科院汉语词法分析系统ICTCLAS对文档进行分词,并进行数据清洗和过滤停用词,运用信息增益和文档频率特征选择算法对文档进行特征选取。
【作者单位】:
【关键词】:
【分类号】:TP391.1【正文快照】:
由于中文在构词成句上比英文要复杂的多,因此中文文本分类与英文文本分类在文本预处理阶段等,都存在一定的差别。本文基于朴素贝叶斯算法和汉语词法分析系统ICTCLAS,设计一种适用于中文的文本分类系统。1 中文文本预处理1.1 分词预处理在文本的组织上,中文与以英语为代表的
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【参考文献】
中国期刊全文数据库
余芳;[J];计算机工程与应用;2004年13期
【共引文献】
中国期刊全文数据库
屈军;;[J];赤峰学院学报(自然科学版);2013年13期
宗永升;张祎;;[J];计算机仿真;2010年09期
崔丽杰;刘伟;;[J];计算机与现代化;2008年07期
杜卫卫;;[J];电子测试;2015年03期
中国重要会议论文全文数据库
李军辉;朱巧明;李培峰;;[A];第二届全国信息检索与内容安全学术会议(NCIRCS-2005)论文集[C];2005年
马杰;孟宪元;梅顺良;;[A];第八届全国信号和智能信息处理与应用学术会议会刊[C];2014年
中国博士学位论文全文数据库
王树梅;[D];南京理工大学;2007年
赵朋朋;[D];苏州大学;2008年
中国硕士学位论文全文数据库
吴惠雄;[D];中南林业科技大学;2009年
史德增;[D];太原理工大学;2011年
刘超;[D];安徽大学;2011年
刘星;[D];广西师范大学;2011年
冯波;[D];哈尔滨工业大学;2011年
贾珍;[D];辽宁工程技术大学;2011年
张海龙;[D];华东理工大学;2012年
周鸣;[D];北京邮电大学;2012年
张海龙;[D];中国农业大学;2005年
崔彩霞;[D];山西大学;2005年
【相似文献】
中国期刊全文数据库
曹锐;;[J];电脑开发与应用;2009年09期
赖英旭;杨震;;[J];北京工业大学学报;2011年05期
陈凯星;陈建英;;[J];福建电脑;2014年03期
李欣;;[J];山东省农业管理干部学院学报;2011年05期
皮靖;邵雄凯;肖雅夫;;[J];计算机与数字工程;2012年06期
杨忠强;秦亮曦;;[J];信息技术;2013年12期
丁岳伟;潘涛;;[J];上海理工大学学报;2008年01期
李森;赵洁;;[J];农业网络信息;2012年05期
陈福志,史杏荣;[J];计算机工程;2003年20期
汪明;张征;;[J];河北软件职业技术学院学报;2011年03期
中国重要会议论文全文数据库
顾蕊;;[A];第七届全国信息获取与处理学术会议论文集[C];2009年
许小林;唐文忠;;[A];计算机技术与应用进展——全国第17届计算机科学与技术应用(CACIS)学术会议论文集(上册)[C];2006年
彭小明;辛阳;;[A];第九届中国通信学会学术年会论文集[C];2012年
中国硕士学位论文全文数据库
杨忠强;[D];广西大学;2013年
Emmanuel Kayitaba 阿玛尼;[D];中南大学;2010年
刘大雷;[D];江西理工大学;2015年
孙源泽;[D];湖南大学;2008年
朱强;[D];中南大学;2013年
王刚刚;[D];大连理工大学;2008年
曾志中;[D];北京邮电大学;2009年
林士杰;[D];内蒙古大学;2013年
陈培;[D];电子科技大学;2010年
刘永昌;[D];华中科技大学;2012年
&快捷付款方式
&订购知网充值卡
400-819-9993
《中国学术期刊(光盘版)》电子杂志社有限公司
同方知网数字出版技术股份有限公司
地址:北京清华大学 84-48信箱 知识超市公司
出版物经营许可证 新出发京批字第直0595号
订购热线:400-819-82499
服务热线:010--
在线咨询:
传真:010-
京公网安备75号8307人阅读
机器学习(45)
C/C++编程(17)
Python机器学习库scikit-learn实践&一、概述& & & &机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得其中各算法理论,叫你喊上一两个著名算法的名字,你也能昂首挺胸脱口而出。当然了,算法之林虽大,但能者还是有限,能适应某些环境并取得较好效果的算法会脱颖而出,而表现平平者则被历史所淡忘。随着机器学习社区的发展和实践验证,这群脱颖而出者也逐渐被人所认可和青睐,同时获得了更多社区力量的支持、改进和推广。& & & &以最广泛的分类算法为例,大致可以分为线性和非线性两大派别。线性算法有著名的逻辑回归、朴素贝叶斯、最大熵等,非线性算法有随机森林、决策树、神经网络、核机器等等。线性算法举的大旗是训练和预测的效率比较高,但最终效果对特征的依赖程度较高,需要数据在特征层面上是线性可分的。因此,使用线性算法需要在特征工程上下不少功夫,尽量对特征进行选择、变换或者组合等使得特征具有区分性。而非线性算法则牛逼点,可以建模复杂的分类面,从而能更好的拟合数据。& & & &那在我们选择了特征的基础上,哪个机器学习算法能取得更好的效果呢?谁也不知道。实践是检验哪个好的不二标准。那难道要苦逼到写五六个机器学习的代码吗?No,机器学习社区的力量是强大的,码农界的共识是不重复造轮子!因此,对某些较为成熟的算法,总有某些优秀的库可以直接使用,省去了大伙调研的大部分时间。& & & &基于目前使用python较多,而python界中远近闻名的机器学习库要数莫属了。这个库优点很多。简单易用,接口抽象得非常好,而且文档支持实在感人。本文中,我们可以封装其中的很多机器学习算法,然后进行一次性测试,从而便于分析取优。当然了,针对具体算法,超参调优也非常重要。&二、Scikit-learn的python实践2.1、Python的准备工作& & & &Python一个备受欢迎的点是社区支持很多,有非常多优秀的库或者模块。但是某些库之间有时候也存在依赖,所以要安装这些库也是挺繁琐的过程。但总有人忍受不了这种繁琐,都会开发出不少自动化的工具来节省各位客官的时间。其中,个人总结,安装一个python的库有以下三种方法:1)Anaconda& & & &这是一个非常齐全的python发行版本,最新的版本提供了多达195个流行的python包,包含了我们常用的numpy、scipy等等科学计算的包。有了它,妈妈再也不用担心我焦头烂额地安装一个又一个依赖包了。Anaconda在手,轻松我有!下载地址如下:2)Pip& & & &使用过Ubuntu的人,对apt-get的爱只有自己懂。其实对Python的库的下载和安装可以借助pip工具的。需要安装什么库,直接下载和安装一条龙服务。在pip官网下载安装即可。未来的需求就在#pip install xx 中。3)源码包& & & &如果上述两种方法都没有找到你的库,那你直接把库的源码下载回来,解压,然后在目录中会有个setup.py文件。执行#python setup.py install 即可把这个库安装到python的默认库目录中。2.2、Scikit-learn的测试& & & &已经包含在Anaconda中。也可以在官方下载源码包进行安装。本文代码里封装了如下机器学习算法,我们修改数据加载函数,即可一键测试:classifiers = {'NB':naive_bayes_classifier,
'KNN':knn_classifier,
'LR':logistic_regression_classifier,
'RF':random_forest_classifier,
'DT':decision_tree_classifier,
'SVM':svm_classifier,
'SVMCV':svm_cross_validation,
'GBDT':gradient_boosting_classifier
}train_test.py#!usr/bin/env python
#-*- coding: utf-8 -*-
import sys
import time
from sklearn import metrics
import numpy as np
import cPickle as pickle
reload(sys)
sys.setdefaultencoding('utf8')
# Multinomial Naive Bayes Classifier
def naive_bayes_classifier(train_x, train_y):
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB(alpha=0.01)
model.fit(train_x, train_y)
return model
# KNN Classifier
def knn_classifier(train_x, train_y):
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()
model.fit(train_x, train_y)
return model
# Logistic Regression Classifier
def logistic_regression_classifier(train_x, train_y):
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(penalty='l2')
model.fit(train_x, train_y)
return model
# Random Forest Classifier
def random_forest_classifier(train_x, train_y):
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=8)
model.fit(train_x, train_y)
return model
# Decision Tree Classifier
def decision_tree_classifier(train_x, train_y):
from sklearn import tree
model = tree.DecisionTreeClassifier()
model.fit(train_x, train_y)
return model
# GBDT(Gradient Boosting Decision Tree) Classifier
def gradient_boosting_classifier(train_x, train_y):
from sklearn.ensemble import GradientBoostingClassifier
model = GradientBoostingClassifier(n_estimators=200)
model.fit(train_x, train_y)
return model
# SVM Classifier
def svm_classifier(train_x, train_y):
from sklearn.svm import SVC
model = SVC(kernel='rbf', probability=True)
model.fit(train_x, train_y)
return model
# SVM Classifier using cross validation
def svm_cross_validation(train_x, train_y):
from sklearn.grid_search import GridSearchCV
from sklearn.svm import SVC
model = SVC(kernel='rbf', probability=True)
param_grid = {'C': [1e-3, 1e-2, 1e-1, 1, 10, 100, 1000], 'gamma': [0.001, 0.0001]}
grid_search = GridSearchCV(model, param_grid, n_jobs = 1, verbose=1)
grid_search.fit(train_x, train_y)
best_parameters = grid_search.best_estimator_.get_params()
for para, val in best_parameters.items():
print para, val
model = SVC(kernel='rbf', C=best_parameters['C'], gamma=best_parameters['gamma'], probability=True)
model.fit(train_x, train_y)
return model
def read_data(data_file):
import gzip
f = gzip.open(data_file, &rb&)
train, val, test = pickle.load(f)
train_x = train[0]
train_y = train[1]
test_x = test[0]
test_y = test[1]
return train_x, train_y, test_x, test_y
if __name__ == '__main__':
data_file = &mnist.pkl.gz&
thresh = 0.5
model_save_file = None
model_save = {}
test_classifiers = ['NB', 'KNN', 'LR', 'RF', 'DT', 'SVM', 'GBDT']
classifiers = {'NB':naive_bayes_classifier,
'KNN':knn_classifier,
'LR':logistic_regression_classifier,
'RF':random_forest_classifier,
'DT':decision_tree_classifier,
'SVM':svm_classifier,
'SVMCV':svm_cross_validation,
'GBDT':gradient_boosting_classifier
print 'reading training and testing data...'
train_x, train_y, test_x, test_y = read_data(data_file)
num_train, num_feat = train_x.shape
num_test, num_feat = test_x.shape
is_binary_class = (len(np.unique(train_y)) == 2)
print '******************** Data Info *********************'
print '#training data: %d, #testing_data: %d, dimension: %d' % (num_train, num_test, num_feat)
for classifier in test_classifiers:
print '******************* %s ********************' % classifier
start_time = time.time()
model = classifiers[classifier](train_x, train_y)
print 'training took %fs!' % (time.time() - start_time)
predict = model.predict(test_x)
if model_save_file != None:
model_save[classifier] = model
if is_binary_class:
precision = metrics.precision_score(test_y, predict)
recall = metrics.recall_score(test_y, predict)
print 'precision: %.2f%%, recall: %.2f%%' % (100 * precision, 100 * recall)
accuracy = metrics.accuracy_score(test_y, predict)
print 'accuracy: %.2f%%' % (100 * accuracy)
if model_save_file != None:
pickle.dump(model_save, open(model_save_file, 'wb'))
四、测试结果& & & &本次使用手写体库进行实验:。共5万训练样本和1万测试样本。& & & &代码运行结果如下:reading training and testing data...
******************** Data Info *********************
#training data: 50000, #testing_data: 10000, dimension: 784
******************* NB ********************
training took 0.287000s!
accuracy: 83.69%
******************* KNN ********************
training took 31.991000s!
accuracy: 96.64%
******************* LR ********************
training took 101.282000s!
accuracy: 91.99%
******************* RF ********************
training took 5.442000s!
accuracy: 93.78%
******************* DT ********************
training took 28.326000s!
accuracy: 87.23%
******************* SVM ********************
training took s!
accuracy: 94.35%
******************* GBDT ********************
training took s!
accuracy: 96.18%
& & & &在这个数据集中,由于数据分布的团簇性较好(如果对这个数据库了解的话,看它的t-SNE映射图就可以看出来。由于任务简单,其在deep learning界已被认为是toy dataset),因此KNN的效果不赖。GBDT是个非常不错的算法,在kaggle等大数据比赛中,状元探花榜眼之列经常能见其身影。三个臭皮匠赛过诸葛亮,还是被验证有道理的,特别是三个臭皮匠还能力互补的时候!& & & &还有一个在实际中非常有效的方法,就是融合这些分类器,再进行决策。例如简单的投票,效果都非常不错。建议在实践中,大家都可以尝试下。&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4514429次
积分:24657
积分:24657
排名:第156名
原创:116篇
转载:11篇
评论:3128条
关注:机器学习、计算机视觉、人机交互和人工智能等领域。
交流请发邮件,不怎么看博客私信^-^
(4)(2)(1)(1)(2)(2)(1)(7)(5)(4)(4)(9)(2)(6)(1)(10)(5)(8)(14)(7)(8)(25)&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!查看: 8331|回复: 36|关注: 0
求助!怎样用贝叶斯网络工具箱实现朴素贝叶斯分类
本人正在尝试用贝叶斯网络工具箱实现朴素贝叶斯分类,在论坛里找了许多相关的帖子,但问题还是得不到解决。
流程大概是这样:
有四种地形 比如 沙地 土地 碎石 沥青
现用仪器在四种地形上各采集数据一组,作为四种地形的先验信息;
然后再在随机的一种地形上采集一组数据,要求把这组数据分类为以上四种地形之一。
通过对贝叶斯工具箱的学习,我觉得该使用朴素贝叶斯分类,好像不需要用结构学习,只需要进行参数学习就可以了,但是程序总也调试不出来,也找不到有关朴素贝叶斯分类的相关信息,很是着急。有没有大侠能够帮我提出一些思路,感激不胜!
关注者: 7
提供一个程序给楼主参考下,我做过的贝叶斯分类,两类分类
11:50 上传
点击文件名下载附件
812.59 KB, 下载次数: 918
谢谢二楼,我看一下能不能给我一点参考。
我怎么下不了 啊
我不能发帖,我不能下载!!!
下下来看看先
下下来看看先,不错
·······················
下不了。。。。。。。
站长推荐 /2
Powered by}

我要回帖

更多关于 sklearn文本分类 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信