【问题标题】:Logistic regression - multiclass classification with categorical variables逻辑回归 - 具有分类变量的多类分类
【发布时间】:2018-02-06 08:56:07
【问题描述】:

我目前正在使用具有分类和连续特征的数据框,如下所示:

https://ibb.co/bKJwSQ

我想运行逻辑回归来预测目标值。本例中的目标值是种族,可以是“A”、“W”、“B”、“H”、“N”或“O”,分别代表“亚洲人”、“白人”、“黑人” ”、“西班牙裔”、“美国原住民”或“其他”。

我已将所有特征转换为虚拟变量(“种族”列除外),位于一个名为“虚拟”的新数据框中。为了训练模型,我使用以下代码:

from sklearn import linear_model, metrics

X = dummies.drop("race", axis=1)
y = dummies["race"]

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


from sklearn.linear_model import LogisticRegression

logmodel = LogisticRegression()
logmodel.fit(X_train, y_train)

predictions = logmodel.predict(X_test)

我没有得到任何错误,但是,当我查看分类矩阵时,我的准确率、召回率和 f1 分数都得到了 1.00 的满分。这似乎有点好得令人难以置信……我做错了什么吗?

这是我用来转换假人的代码:

dummies = pd.get_dummies(df[["date", "armed", "age", "gender", "city", "state", "signs_of_mental_illness", "threat_level", "flee", "body_camera", "total_population"]], drop_first=True)
dummies = pd.concat([df, dummies], axis=1)

dummies.drop(df[["date", "armed", "age", "gender", "city", "state", "signs_of_mental_illness", "threat_level", "flee", "body_camera", "total_population"]], axis=1, inplace=True)

【问题讨论】:

标签: python scikit-learn logistic-regression


【解决方案1】:

您获得完美 1.0 的分类分数的原因是因为您将数值数据视为分类数据。当您在数据框的所有列上使用 pandas.get_dummies 时,您实际上是在转换所有日期、年龄等(即数字数据)到虚拟变量指示符不正确。这是因为这样做时,您正在为数据集中的所有年龄创建虚拟变量。对于您的小型数据集,可以这样做,但在现实世界的场景中,这意味着对于 1-100 岁,您将有 100 种不同的可能组合! pandas.get_dummies的描述如下:

将分类变量转换为虚拟/指标变量

这是使用分类的错误方式。我建议您仅使用 pandas.get_dummies() 转换分类变量,然后验证您的结果。 至于为什么你会得到 100% 的准确率:这是因为你可以通过使用这种不正确的技术将数字列转换为分类类型来考虑所有可能的情况(因为你的数据集很小,所以这种技术赢了'不是太多的过载。但是,对于现实世界的场景,它是不正确的)。

如果您想了解其他一些对数据进行编码的方法,请check out this link。

您的数据也包含数字列。考虑到这一点,只有这样你才能得到正确的结果。

【讨论】:

    【解决方案2】:

    您应该使用 LabelEncoder 将分类特征转换为数字:http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

    现在您实际上将目标数据(尽管形式不同)放入训练和测试数据中,因此您获得了满分 - 模型只需将虚拟列转换回单列。当然,它是 100% 准确的。

    另外,请看这里:Multi-Class Logistic Regression in SciKit Learn

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 2019-08-03
      • 2011-08-05
      • 2011-02-09
      • 2012-11-19
      相关资源
      最近更新 更多