【问题标题】:How to do Multi label classification or Multi class classification of the below problem? Pandas Python如何对以下问题进行多标签分类或多类分类?熊猫蟒
【发布时间】:2021-12-04 15:52:00
【问题描述】:

我的原始数据是这样的。

    id  season   home_team  away_team  home_goals  away_goals result winner
 0  0   2006-07  Shu        Liv        1           1          D      NaN
 1  1   2006-07  Ars        Avl        1           1          D      NaN
 2  2   2006-07  Eve        Wat        2           1          H      Eve
 3  3   2006-07  New        Wig        2           1          H      New
 4  4   2006-07  Por        Bla        3           0          H      Por

目的是建立一个模型来预测 即

Home Team Win 55%

Draw          13%

Away Team Win 32%

我选择了这 3 列并对其进行了标签编码

home_team, away_team, winner

然后我创建了这些新的类/标签。

df.loc[df["winner"]==df["home_team"],"home_team_win"]=1
df.loc[df["winner"]!=df["home_team"],"home_team_win"]=0

df.loc[df["result"]=='D',"draw"]=1
df.loc[df["result"]!='D',"draw"]=0

df.loc[df["winner"]==df["away_team"],"away_team_win"]=1
df.loc[df["winner"]!=df["away_team"],"away_team_win"]=0

现在编码后的数据是这样的,

    home_team   away_team   home_team_win   away_team_win   draw
0   28          19          0               0               1
1   1           2           0               0               1
2   14          34          1               0               0
3   23          37          1               0               0
4   25          4           1               0               0

最初,我将下面的代码用于单个标签 'home_team_win',效果很好,但它不支持多类/标签。

X = prediction_df.drop(['home_team_win'] ,axis=1)

y = prediction_df['home_team_win']

logReg=LogisticRegression(solver='lbfgs')

rfe = RFE(logReg, 20)

rfe = rfe.fit(X, y.values.ravel())

这个问题怎么做多标签分类或多类分类?

【问题讨论】:

    标签: python pandas logistic-regression


    【解决方案1】:

    目标二进制变量home_team_winaway_team_windraw是互斥的。在这个问题中使用多标签方法似乎不是一个好主意,因为一般来说,它们旨在利用标签之间的依赖关系,这在这个数据集中是不存在的。

    我建议将其建模为最常见形式的多类问题,其中有一列包含三个类:0、1 和 2(代表 home_team_loss、draw、away_team_win)。 scikit-learn 中的许多分类器实现都可以直接以这种方式工作。逻辑回归就是其中之一:

    from sklearn.linear_model import LogisticRegression
    
    logReg=LogisticRegression(solver='lbfgs', multi_class='ovr')
    logReg.fit(X,Y)
    logReg.predict_proba(X)
    

    此代码将为X 的每一行的每个类输出所需的概率。 特别是,这段代码分别为每个类训练一个 Logistic 回归(这就是 multi_class='ovr' 参数所做的)。

    查看https://scikit-learn.org/stable/supervised_learning.html,了解其他直接在我建议的这种多类数据集形式中工作的分类器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-26
      • 2020-03-15
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 2023-04-03
      • 2018-10-12
      相关资源
      最近更新 更多