当前位置:   article > 正文

python进行文本分类,基于word2vec,sklearn-svm对微博性别分类_sklearn中word2vec文本特征提取并分类预测

sklearn中word2vec文本特征提取并分类预测

第一个分类任务,记录一下
语料库下载

一、进行手工分类
导师给的数据是两个文件夹,一个包含了以用户ID名为标题的一大堆txt(未分类),还有一个文件夹里面是已经分类好的男女性别ID的集合txt。
这里写图片描述

这里写图片描述

先要做的任务就是将未分类的txt分成两类(根据给的已经分类的id集合txt),这个分为三步:
1、新建男女分类的空文件夹。
2、提取id集合中的id,存在两个list里面.
3、提取未分类txt的文件名,对它们进行分类,如果是女的,将其复制txt到女文件夹。否则放到男文件夹。
最后得到结果如下:
这里写图片描述

其中female 和male文件夹中是已经分类好的txt文件。

二、进行分词

利用Jieba分词和去除停用词(这里我用的是全模式分词),每一篇文档为一行 用换行拼接,得到result.txt

fobj = open(new_folder_path + '//' + file, 'r', encoding='utf-8')  # 打开样本
raw = fobj.read()  # 读样本
word_cut = jieba.cut(raw,cut_all=True)  # 对样本进行结巴分词
stopwords=stopwordslist('D:/pycharm/project1/tingyongci.txt')  # 这里加载停用词的路径
  • 1
  • 2
  • 3
  • 4

三、用gensim.word2vec得到词向量模型

对result.txt进行模型训练

如何使用word2vec见这篇文章

得到train.model(我用的维度50,min_count=1)

四、求和求平均得到文档向量
对每一篇文章的词向量进行求和,然后除以词数量,得到文档向量(维度为50的向量)。
其中70%划分到train_set,30%划分到test
利用numpy里面的sum函数对列求和

 a=np.sum(ce,axis=0)
 a.tolist()
 a=[i/number for i in a] #求平均值后的文档向量
  • 1
  • 2
  • 3

五、利用sklearn-svm进行分类

输入的是训练数据和训练标签(对应每一个文档向量的类别标签),进行训练。
预测则输入测试数据,得到测试标签(即测试分类结果)
如下:

核函数为rbf的时候效果最好。


  clf=svm.SVC()
    train_data_x = [d for (d, c) in train_set]
    train_data_y = [c for (d, c) in train_set]
    test_data_x = [d  for (d, c) in test_set]
    test_data_y = [c for (d, c) in test_set]

print("开始训练")
    clf.fit(train_data_x,train_data_y)
    result=clf.predict(test_data_x)
    acc = accuracy_score(test_data_y,result)
    print(acc)
    print(classification_report(test_data_y, result,labels=class_list,target_names=class_name))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果如下:
这里写图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/353480
推荐阅读
相关标签
  

闽ICP备14008679号