Python 多类分类:一行中多列的SMOTE过采样

Python 多类分类:一行中多列的SMOTE过采样,python,text-classification,oversampling,Python,Text Classification,Oversampling,我有一个不平衡的数据集,包含在一个名为city_country的数据框中,该数据框由5列组成: 推特内容=预处理 事件类型(例如,tweet涉及地震=‘地震’、台风=‘台风’等)=事件类型 发送推文的纬度=lat 发送推文的经度=long 事件标签(例如,tweet与地震=1、台风=2等相关)=事件id 在名为city\u country的数据框架中,类(事件id)是不平衡的。在测试不同文本分类器的预测能力之前,为了从tweet(预处理)的内容预测事件id,我想对少数类进行过采样 重要的是,当我

我有一个不平衡的数据集,包含在一个名为city_country的数据框中,该数据框由5列组成:

  • 推特内容=预处理
  • 事件类型(例如,tweet涉及地震=‘地震’、台风=‘台风’等)=事件类型
  • 发送推文的纬度=lat
  • 发送推文的经度=long
  • 事件标签(例如,tweet与地震=1、台风=2等相关)=事件id
  • 在名为city\u country的数据框架中,类(事件id)是不平衡的。在测试不同文本分类器的预测能力之前,为了从tweet(预处理)的内容预测事件id,我想对少数类进行过采样

    重要的是,当我复制属于少数类的条目时,我会复制所有5列

    到目前为止,我所做的(错误的)只是对tweet内容(预处理的事件id进行了过采样。在下面的代码中,我将tweet转换为向量(我不想这样做,但据我所知,我必须这样做),然后对少数类进行过采样。这只是对向量化tweet(x_单词)进行了过采样以及事件id(y)

    据我所知,在imblearn.over_采样中使用SMOTE需要输入真实值(不是字符串)和2个值-一个“x”和一个“y”。在这种情况下,“x”是我的矢量化训练推文集,“y”是我的事件标签


    有没有一种方法可以让我简单地将我的数据框拆分为训练集和测试集,然后对少数类的所有5列进行过采样,这样输出的数据框就更大了,包含了所有5列?然后我可以用它来预测事件id,并希望执行与vlookup等价的操作,这样我就可以加入推特了ive lat和long值。

    在IMBREARN中进行SMOTE。过采样可以接受稀疏向量作为输入。您可以进行过采样,然后拆分为测试/训练集

    如果我对你的问题理解正确,以下几点对我来说很有用

    尝试以下方法:

    from sklearn.feature_extraction.text import Tfidfvectorizer
    from imblearn.over_sampling import SMOTE
    
    strings = city_country.preprocessed
    
    def create_vec(strings):
    
        tf = TfidfVectorizer(analyzer = 'char_wb',ngram_range=(2,3))
        tf.fit(strings)
        X = tf.transform(strings)
    
        return X
    
    vecs = create_vec(strings)
    
    y = city_country.event_id
    
    sm = SMOTE(random_state=42)
    X_res, y_res = sm.fit_resample(X, y)
    
    然后可以根据输出进行拆分

    from sklearn.feature_extraction.text import Tfidfvectorizer
    from imblearn.over_sampling import SMOTE
    
    strings = city_country.preprocessed
    
    def create_vec(strings):
    
        tf = TfidfVectorizer(analyzer = 'char_wb',ngram_range=(2,3))
        tf.fit(strings)
        X = tf.transform(strings)
    
        return X
    
    vecs = create_vec(strings)
    
    y = city_country.event_id
    
    sm = SMOTE(random_state=42)
    X_res, y_res = sm.fit_resample(X, y)