gpt4 book ai didi

python - 如何在 Sklearn 管道中使用 SMOTE 来解决 NLP 分类问题?

转载 作者:行者123 更新时间:2023-12-04 12:54:05 30 4
gpt4 key购买 nike

我正在处理一个多类分类问题,其中一些类非常不平衡。我的数据如下所示:

product_description                  class
"This should be used to clean..." 1
"Beauty product, natural..." 2
"Cleaning product, be careful..." 2
"Food, prepared with fruits..." 2
"T-shirt, sports, white, light..." 3
"Cleaning product, used to ..." 2
"Blue pants, two pockets, men..." 3
所以我需要做一个分类模型。这是我的管道目前的样子:
X = df['product_description']
y = df['class']

X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)

def text_process(mess):

STOPWORDS = stopwords.words("english")

# Check characters to see if they are in punctuation
nopunc = [char for char in mess if char not in string.punctuation]

# Join the characters again to form the string.
nopunc = "".join(nopunc)

# Now just remove any stopwords
return " ".join([word for word in nopunc.split() if word.lower() not in STOPWORDS])

pipe = Pipeline(
steps=[
("vect", CountVectorizer(analyzer= text_process)),
("feature_selection", SelectKBest(chi2, k=20)),
("polynomial", PolynomialFeatures(2)),
("reg", LogisticRegression()),
]
)

pipe.fit(X_train, y_train)
y_pred = pipe.predict(X_test)

print(classification_report(y_test, y_pred))
但是,我有一个非常不平衡的数据集,其分布如下:1-80%,2-10%,3-5%,4-4%,5-1%。所以我正在尝试应用 SMOTE。但是,我仍然无法理解 SMOTE 应该应用在哪里。
一开始,我想在Pipeline之前应用SMOTE,但是我得到了以下错误:
ValueError: could not convert string to float: '...'
所以我考虑将 SMOTE 与 Pipeline 一起使用。但我也遇到了错误。我尝试在第一步和第二步中使用 SMOTE(),在 CountVectorizer 之后 - 这对我来说似乎合乎逻辑 - 但两者都返回了相同的错误:
TypeError: All intermediate steps should be transformers and implement fit and transform or be the string 'passthrough' 'SMOTE()' (type <class 'imblearn.over_sampling._smote.base.SMOTE'>) doesn't
关于如何解决这个问题的任何想法?我在这里缺少什么?
谢谢

最佳答案

使用像 SMOTE 这样的重采样器需要 imblearn Pipeline 的版本.
这是因为重采样器必须同时更改 Xy ,和普通sklearn管道不这样做。 imblearn管道通过允许其中间步骤使用 transform 来适应。或 sample (而且重要的是,重采样只发生在拟合期间,在训练数据上,而不是在以后的转换/预测上发生)。否则它应该和普通的 sklearn 一样操作管道。

关于python - 如何在 Sklearn 管道中使用 SMOTE 来解决 NLP 分类问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69104280/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com