Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当一个主题太宽而另一个主题很窄时,如何平衡两类主题数据集?_Python_Nltk_Prediction_Text Classification - Fatal编程技术网

Python 当一个主题太宽而另一个主题很窄时,如何平衡两类主题数据集?

Python 当一个主题太宽而另一个主题很窄时,如何平衡两类主题数据集?,python,nltk,prediction,text-classification,Python,Nltk,Prediction,Text Classification,我有一个简单的预测,其中数据集由每个类别2300个样本组成,e.I.总数=4600(二元分类)。第一个类包含除另一个类之外的所有新闻类型,这是一个非常狭窄的主题。我使用了NLTK的方法来执行这个任务,分类器对样本进行一次热编码。尽管分类器在数据集的测试部分表现良好(准确率为94%),但在对爬网新闻进行分类(生产中)时却失败得很惨。 我认为这个问题是因为这两个类在现实世界中是不平衡的。如果这是原因,那么,如何克服这个问题呢?如何平衡我的数据集?假设我可以为宽类(A)另外收集许多样本,但为窄类(B)

我有一个简单的预测,其中数据集由每个类别2300个样本组成,e.I.总数=4600(二元分类)。第一个类包含除另一个类之外的所有新闻类型,这是一个非常狭窄的主题。我使用了NLTK的方法来执行这个任务,分类器对样本进行一次热编码。尽管分类器在数据集的测试部分表现良好(准确率为94%),但在对爬网新闻进行分类(生产中)时却失败得很惨。
我认为这个问题是因为这两个类在现实世界中是不平衡的。如果这是原因,那么,如何克服这个问题呢?如何平衡我的数据集?假设我可以为宽类(A)另外收集许多样本,但为窄类(B)收集很少的样本。

您可以使用合成少数过采样技术SMOTE来增加少数类的大小

from imblearn.over_sampling import SMOTE
sm = SMOTE()
x1, y1 = sm.fit_sample(X_train, Y_train)

另外,对于不平衡类,朴素贝叶斯不是一个好的算法,尝试使用随机林(无SMOTE)或梯度增强树(有SMOTE)。

那么SMOTE是一个分类器吗?不,分类器是朴素贝叶斯、梯度增强树、神经网络、支持向量机、逻辑回归、决策树,等等。SMOTE是一种考虑欧几里德距离的算法,可以在少数类中创建更多的示例,遵循现有少数类的类似分布。我已经理解了SMOTE的基本概念,但是如何将SMOTE应用于使用一种热编码表示的样本?或者我应该用不同的方式表示它们?然后你可以使用EM(期望最大化)算法。