- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做文本分类,并且我有非常不平衡的数据,例如
Category | Total Records
Cate1 | 950
Cate2 | 40
Cate3 | 10
现在我想对 Cate2 和 Cate3 进行过度采样,因此它至少有 400-500 条记录,我更喜欢使用 SMOTE 而不是随机采样,代码
from sklearn.model_selection import train_test_split
from imblearn.over_sampling import SMOTE
X_train, X_test, y_train, y_test = train_test_split(fewRecords['text'],
fewRecords['category'])
sm = SMOTE(random_state=12, ratio = 1.0)
x_train_res, y_train_res = sm.fit_sample(X_train, y_train)
它不起作用,因为它无法生成示例合成文本,现在当我将其转换为矢量时,如
count_vect = CountVectorizer(analyzer='word', token_pattern=r'\w{1,}')
count_vect.fit(fewRecords['category'])
# transform the training and validation data using count vectorizer object
xtrain_count = count_vect.transform(X_train)
ytrain_train = count_vect.transform(y_train)
当我想预测分类后的真实类别时,我不确定这是否是正确的方法以及如何将向量转换为真实文本
最佳答案
我知道这个问题已有 2 年多了,希望您能找到解决方案。如果您仍然感兴趣,可以使用 imblearn 管道轻松完成此操作。
我将假设您将使用 sklearn 兼容的估计器来执行分类。让我们说多项式朴素贝叶斯。
请注意我如何从 imblearn 而不是 sklearn 导入 Pipeline
from imblearn.pipeline import Pipeline, make_pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
按照您在代码中所做的那样导入 SMOTE
from imblearn.over_sampling import SMOTE
按照您在代码中所做的那样进行训练测试拆分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(fewRecords['text'],
fewRecords['category'],stratify=fewRecords['category'], random_state=0
)
创建一个以 SMOTE 作为组件之一的管道
textclassifier =Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('smote', SMOTE(random_state=12)),
('mnb', MultinomialNB(alpha =0.1))
])
根据训练数据训练分类器
textclassifier.fit(X_train, y_train)
然后您可以使用该分类器执行任何任务,包括评估分类器本身、预测新的观察结果等。
例如预测新样本
textclassifier.predict(['sample text'])
将返回预测类别。
为了获得更准确的模型,请尝试将词向量作为特征,或者更方便地在管道上执行超参数优化。
关于python - SMOTE,Python 中文本分类的过采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50999596/
在imblearn , smote.fit_sample() 和 smote.fit_resample() 之间有什么区别,我们什么时候应该使用一个而不是另一个? 最佳答案 fit_sample 替换
鉴于我有一个类不平衡问题,我正在应用 SMOTE(DMwR 包)。但是,我有三个类(class)结果而不是两个。 该函数正确地对少数类进行了过采样,但我没有遵循多数/中间类的行为(即,所有类别都包含不
我刚刚使用 DMwR 包中包含的 Smote 在数据集中完成了过采样。 我的数据集由两个类组成。原始分布是 12 vs 62。因此,我编写了此过采样代码: newData <- SMOTE(Score
我刚刚使用 DMwR 包中包含的 Smote 在数据集中完成了过采样。 我的数据集由两个类组成。原始分布是 12 vs 62。因此,我编写了此过采样代码: newData <- SMOTE(Score
我正在使用 SMOTE 函数对稀疏数据集进行过采样,其中包含大约 98% 的 0 和 2% 的 1。我使用了以下代码 from imblearn.over_sampling import SMOTE
我正在尝试在 Python 中使用 imblearn 包中的 SMOTE,但我的数据有很多缺失值,并且出现以下错误: ValueError: Input contains NaN, infinity
我有一个不平衡的数据集,其中包含一个分类因变量和连续且分类的特征变量。我知道 DMwR 包中的 SMOTE 函数只能处理连续的特征。是否有可以像 Chawla 描述的那样处理分类和连续特征的包 in
我想我在下面的代码中遗漏了一些东西。 from sklearn.model_selection import train_test_split from imblearn.over_sampling
我正在尝试使用 SMOTE 来处理二进制分类中的不平衡类数据,我所知道的是:如果我们使用,例如 sm = SMOTE(ratio = 1.0, random_state=10) Before Over
我正在做文本分类,并且我有非常不平衡的数据,例如 Category | Total Records Cate1 | 950 Cate2 | 40 Cate3 | 10 现在我想对
我正在 Weka 中研究一个二元分类问题,数据集高度不平衡(一个类别 90%,另一个类别 10%)。我首先将 SMOTE ( http://www.cs.cmu.edu/afs/cs/project/
我正在尝试使用带有 SMOTE 的 FilteredClassifier 在 WEKA 上运行 5 倍交叉验证。 据我所知,我应该在每个 CV 折叠中应用 SMOTE 以获得我的 CV 错误。 有谁有
我有一个多类数据集,我想对其使用 SMOTE,但我面临着 ValueError: "sampling_strategy" can be a float only when the type oftar
我想用 2 个类进行分类。当我在没有 SMOTE 的情况下进行分类时我得到(10 次交叉验证的平均值): Precision Recall f-1 0,6409509
我有一个包含大约 130000 条记录的数据集。记录分为两类目标变量,0和1。1只占总比例的0.09%。 我在 Windows 10 上的 R-3.5.1 中运行我的分析。我使用 SMOTE 算法来处
我正在尝试按如下方式实现逻辑回归: 但是我无法得到好的预测,因为我的类输出 1 在我的数据中代表性不足。因此,我正在尝试将 SMOTE 算法应用于我的训练集以获得更好的结果。但是我收到消息错误: Er
我正在使用 Keras 和 Bert (HuggingFace) 构建多类文本分类模型,但我的数据集非常不平衡。我使用了 Sklearn 的 SMOTE 来为欠平衡类生成额外的样本(我总共有 45 个
我想同时应用交叉验证和过采样。 我从这段代码中得到以下错误: from sklearn.pipeline import Pipeline, make_pipeline imba_pipeline =
我需要将 smote-algorithm 应用到数据集,但无法让它工作。 示例: x <- c(12,13,14,16,20,25,30,50,75,71) y <- c(0,0,1,1,1,1,1,
我有一个不平衡的数据集,当我尝试使用 SMOTEENN 来平衡他时,多数类的数量减少了一半 我尝试使用提供的所有选项更改“sampling_strategy”参数,但没有帮助 from imblear
我是一名优秀的程序员,十分优秀!