基于协同训练的半监督文本分类算法

lookfor404 lookfor404     2023-01-09     619

关键词:


半监督学习文本分类系列

用半监督算法做文本分类(sklearn)
sklearn半监督学习(sklearn)
基于自训练的半监督文本分类算法


一. 摘要

本文主要讲述基于协同训练的半监督算法做文本分类,用三个差异性比较大的分类器对未标注数据进行标注,它们可以进行交叉验证,大大提升了对未标注数据标记的置信度(简单理解就是三个分类器同时对一个未标注数据标记一样的标签,那么这个标签就可信了),从而提高分类器标注的准确率

二. 操作流程

1. 文本预处理

这里就不再赘述,参考这篇文章:中文文本预处理流程
这上面的流程很完整,而且有代码,你只需要按着那个操作来即可

2. 协同训练的操作方法

操作思路:

  1. 数据data平均分成三份data1,data2,data3(也就是把上面操作之后得到的文本向量均分成三份)
  2. 写一个函数:包含三个分类算法。就是构建三个差异性较大的分类器,我采用的是SVM,贝叶斯,xgboost三种算法。
  3. 用data1训练SVM分类器,用data2训练贝叶斯分类器,用data3训练xgboost分类器。这样我们就得到了三个初步训练好的分类器。
  4. 接下来就是对剩下的所有未标注数据进行操作了,未标注数据一条一条过
    操作思路:假设有10条未标注数据,第一条取出来了,三个分类器对它进行预测。有以下三种可能:

    • 如果大家预测的都一样,那就把它连同预测的标签加入到总的训练集data里。
    • 如果有两个预测的一样,另外一个分类器预测的不一样,比如SVM和贝叶斯预测的一样,xgboost的不一样,就把它们俩的标注结果放到data3里,然后再让xgboost对更新的data3进行训练。
    • 如果大家都预测的不一样,就把它放回未标注数据中

这样操作的目的就是为了不断地训练三个分类器,让它们最终对未标注数据预测的结果一样。这样一条一条未标注数据地过,直到未标注数据为空,最终过完。

3. 测试结果

我选了5000条数据进行预测。

测试的操作流程

  1. 把测试数据用同样的方法转化成文本向量
  2. 上面训练过程中会保存模型,怎么操作可以看这篇文章 :
    如何保存sklearn训练好的算法模型
  3. 你把所有的模型都保存到一个目录下了,那么我们进行预测的时候怎么批量地读取这些模型呢?简单地说就是怎么把目录下所有的文件的文件名读取到一个列表上。看这里—— python如何获取目录下的所有文件名
  4. 读取模型,调用sklearn里的函数计算精度。因为保存的模型太多了,我是每种模型取100个左右,做测试,然后画折线图,看看精度的变化情况。

先放图,看结果

1)这是svm的结果,我们发现训练到后面,模型的效果在降低

技术分享图片

2)这是bayes的结果,一开始有点诡异,但后面趋于稳定

技术分享图片

3)这是xgboost的结果,很鬼畜,不知道为什么会如此波动

技术分享图片

从模型效果上来讲,我选出了每种模型效果最好的情况

SVM:0.62
bayes:0.67
xgboost:0.75

4.结论

从图中观察,我们发现:svm先升后降,bayes先升后稳定,而xgboost很鬼畜。但是效果xgboost是最强的。这里面的原因我知识有限,暂时无法解释,大伙要是有什么想法可以在底下评论,我们可以交流交流








详解使用em算法的半监督学习方法应用于朴素贝叶斯文本分类

...使用的是多项式朴素贝叶斯作为分类器,通过EM算法进行训练,使用有标记数据以及未标记的数据。研究了多类分类准确率与训练集中未标记数据的比例之间的关系。并 查看详情

基于k-means和label+propagation的半监督网页分类

1.问题描述: 首先“K均值算法”和“基于局部和全局一致性算法”的整合,并不是两个算法的简单拼凑,这里,实际上结合了“K均值算法”和“基于局部和全局一致性算法”两者算法的思想。根据你提供的算法思想,算法... 查看详情

用半监督算法做文本分类(代码片段)

...监督算法做数字识别。先说结论,这是一个失败的例子,训练到第15000条就不行了,就报错了。如果你的数据量不是很大的话,可以操作一下。这里面有很多值得学习的地方, 查看详情

分类与监督学习,朴素贝叶斯分类算法

...就是说,这些类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。聚类——聚类是事先不知道数据会分为几类,通过分析将数据或者说用户的共同特点聚合成几个群体,... 查看详情

分类与监督学习,朴素贝叶斯分类算法

...就是说,这些类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。聚类——聚类是事先不知道数据会分为几类,通过分析将数据或者说用户的共同特点聚合成几个群体,... 查看详情

分类与监督学习,朴素贝叶斯分类算法

...就是说,这些类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。聚类——聚类是事先不知道数据会分为几类,通过分析将数据或者说用户的共同特点聚合成几个群体,... 查看详情

推荐系统笔记:基于模型的协同过滤

1介绍        基于邻域的协同过滤方法可以看作是机器学习中常用的k-最近邻分类器KNN的泛化。这些方法是基于实例的方法,因此,除了可选的预处理阶段之外,没有专门为预测预先创建模型。推荐系统笔记:... 查看详情

11.分类与监督学习,朴素贝叶斯分类算法

...的联系与区别。答:联系:聚类属于无监督学习,即模型训练过程中没有被目标标签监督。而分类属于监督学习,即其训练数据都标记了需要被预测的真实值。在很多情况下,聚类模型等价于分类模型的无监督形式。区别:分类... 查看详情

0机器学习算法分类

1、机器学习算法分类:监督学习监督学习的训练数据包含了类别信息,在监督学习中,典型的问题是分类(Classification)和回归(Regression),典型的算法有LogisticsRegression、BP神经网络算法和相性回归算法。 监督学习流程:&n... 查看详情

分类与监督学习,朴素贝叶斯分类算法

...习和无监督学习:有监督学习是在建立模型之前已经给出训练数据集,机器根据训练数据集训练出模型并对新数据进行预测。无 查看详情

11.分类与监督学习,朴素贝叶斯分类算法

...就是说,这些类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。而聚类的理解更简单,就是你压根不知道数据会分为几类,通过聚类分析将数据或者说用户聚合 查看详情

分类与监督学习,朴素贝叶斯分类算法(代码片段)

...就是说,这些类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。 简述什么是监督学习与无监督学习。监督学习:针对的是有标签的数据集,对具有概念标 查看详情

分类与监督学习,朴素贝叶斯分类算法

...先定义好类别,类别数不变。分类需要由人工标注的分类训练语料训练得到,属于有指导学习范畴。聚类则没有事先预定的类别,类别数不确定。聚类不需要人工标注和预先训练分类器, 查看详情

分类监督训练混淆

】分类监督训练混淆【英文标题】:ClassificationSupervisedTrainingConfusion【发布时间】:2017-12-2422:36:16【问题描述】:所以我是监督机器学习的新手,但我一直在阅读有关它的书籍和文章,但我遇到了一个问题。(没有卡住,但我不... 查看详情

11.分类与监督学习,朴素贝叶斯分类算法(代码片段)

...学习。 分类:根据一些给定的已知类别标号的样本,训练某种学习机器(即得到某种目标函数),使它能够对未知类别的样本进行分类。 聚类:聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似... 查看详情

推荐算法总结

参考技术A一、协同过滤基于用户协同过滤UserCF基于物品协同过滤ItemCF基于模型协同过滤Mode_based基于用户和基于物品协同过滤都称为以记忆为基础的协同过滤技术,共同缺点是资料稀疏、难以处理大数据量下的即时结果,因此发... 查看详情

监督学习--k近邻算法

...习方法,其工作机制非常简单,对某个给定的测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个‘邻居’的信息进行预测。一般来说,在分类中采用‘投票法’,即选择的这k个样本中出现最多... 查看详情

分类与监督学习,朴素贝叶斯分类算法(代码片段)

...无监督学习。监督学习:是对具有概念标记的(分类)的训练样本进行学习,对训练样本集外的的数据进行标记(分类)预测。无监督学习:是输入的数 查看详情