基于sklearn的文本特征提取与分类

简介:
本文呢是根据自己参加中移动垃圾短信基于文本内容识别竞赛而写的 基于文本内容识别竞赛 ,由于比赛结果不太好,就记录一下用sklearn做文本特征提取这一块吧,当时也参考许多的博文,如Feature
extraction - sklearn文本特征提取 和 应用scikit-learn做文本分类  以及 文本挖掘之特征选择(python 实现)  等文章。

题目是80万条短信作为训练数据,10%的垃圾短信(label = 1),90%正常短信(label = 0),然后在20万条数据作为测试对象,找出垃圾短信与正常短信。我最终的评分是0.985,相对于第一0.997还是有很大差距,排名59/339。具体竞赛内容可以参考中国好创意比赛官网。

文本分类大致可以分为:出本处理,特征提取,特征选择,分类,预测几个步骤,其中前三步占用80%的工作量。

1.文本处理

分词,去除停用词等。文本处理要做的内容很多,如果需要请参考其他文献。

分词我采用结巴分词,有比较好用的python包, Python中文分词组件 以供参考

去除停用词需要根据实际情况作考虑,一般情况是需要的。

文本处理后,得到的应该是每条短信对应的分词表,如:原”商业秘密的秘密性那是维系其商业价值和垄断地位的前提条件之一“经过处理后为”商业秘密 秘密性 维系 商业价值 垄断 地位 前提条件 之一 “

核心代码:

#   (i not in stopWords) and    
def cutWords(msg,stopWords):
    seg_list = jieba.cut(msg,cut_all=False)
    #key_list = jieba.analyse.extract_tags(msg,20) #get keywords 
    leftWords = [] 
    for i in seg_list:
        if (i not in stopWords):
            leftWords.append(i)        
    return leftWords

#获取停用词表
def loadStopWords(): 
    stop = [line.strip().decode('utf-8')  for line in open('../data/stopWord.txt').readlines() ] 
    return stop
2.特征提取,特征选择

这里呢就需要参考上面的提到的两个参考博文了,具体API的用法可以参考 sklearn官网  这里使用的是tfidf特征

核心代码举例,具体参考附录的完整工程:

#navie bayes classifier
def nbClassifier(trainData,testData,trainLabel,testLabel):
    vectorizer = CountVectorizer(binary=True)
    fea_train = vectorizer.fit_transform(trainData)
    fea_test = vectorizer.transform(testData);  
#     tv=TfidfVectorizer()#该类会统计每个词语的tf-idf权值    
#     fea_train = tv.fit_transform(trainData)    #return feature vector 'fea_train' [n_samples,n_features]  
#     fea_test = tv.transform(testData);  
    print 'Size of fea_train:' + repr(fea_train.shape) 
    print 'Size of fea_test:' + repr(fea_test.shape) 
    print fea_train.nnz
    print fea_test.nnz

    clf = MultinomialNB(alpha = 0.01)   
    clf.fit(fea_train,np.array(trainLabel))
    pred = clf.predict(fea_test)
    totalScore(pred,testData,testLabel)


3.分类,预测

这个不多说,常见的方法就那么几种,相差不会很大。如果需要达到很高的分数还需要算法上的修改优化。

工程代码请到我的github主页下载 点击打开链接
目录
相关文章
|
4月前
|
机器学习/深度学习 算法 数据库
KNN和SVM实现对LFW人像图像数据集的分类应用
KNN和SVM实现对LFW人像图像数据集的分类应用
79 0
|
存储 索引
文本特征提取-TfidfVectorizer和CountVectorizer
文本特征提取-TfidfVectorizer和CountVectorizer
230 0
文本特征提取-TfidfVectorizer和CountVectorizer
|
4月前
|
机器学习/深度学习 算法 C++
选择适合的SVM模型进行分类任务
选择SVM模型时需考虑数据线性可分性、问题类型(二分类或多分类)、优化算法(凸优化优势)及性能指标(如准确率、召回率)。数据非线性可分时可使用核技巧。针对多分类,有OVO、OVA和DAG方法。同时,利用交叉验证评估模型泛化能力。
31 4
|
4月前
|
机器学习/深度学习 算法 TensorFlow
【视频】神经网络正则化方法防过拟合和R语言CNN分类手写数字图像数据MNIST|数据分享
【视频】神经网络正则化方法防过拟合和R语言CNN分类手写数字图像数据MNIST|数据分享
|
10月前
|
机器学习/深度学习 人工智能 数据挖掘
基于神经网络——鸢尾花识别(Iris)
鸢尾花识别是学习AI入门的案例,这里和大家分享下使用Tensorflow 2框架,编写程序,获取鸢尾花数据,搭建神经网络,最后训练和识别鸢尾花。
162 0
|
机器学习/深度学习 文字识别 监控
使用 HOG 功能和多类 SVM 分类器对数字进行分类
使用 HOG 功能和多类 SVM 分类器对数字进行分类。
120 0
|
机器学习/深度学习 并行计算
探索用卷积神经网络实现MNIST数据集分类
探索用卷积神经网络实现MNIST数据集分类
130 0
|
机器学习/深度学习 自然语言处理 算法
SnowNLP使用自定义语料进行模型训练(情感分析)
SnowNLP使用自定义语料进行模型训练(情感分析)
1540 1
SnowNLP使用自定义语料进行模型训练(情感分析)
|
算法
【文本分类】基于改进CHI和PCA的文本特征选择
【文本分类】基于改进CHI和PCA的文本特征选择
130 0
【文本分类】基于改进CHI和PCA的文本特征选择
|
机器学习/深度学习 算法 数据可视化
Python 实现BP 神经网络分类算法,根据鸢尾花的 4 个特征,实现 3 种鸢尾花的分类
Python 实现BP 神经网络分类算法,根据鸢尾花的 4 个特征,实现 3 种鸢尾花的分类
543 0
Python 实现BP 神经网络分类算法,根据鸢尾花的 4 个特征,实现 3 种鸢尾花的分类