2017-08-29 168 views
2

我目前正在与既有分类和连续特征的数据帧的工作多分类,看起来像这样:Logistic回归 - 与分类变量

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) 

我没有得到任何错误,但是,当我在看分类矩阵我得到的1.00都准确率,召回和f1-分满分。这似乎有点太好,不能成为真的...我做错了什么?

这是我用假人转换代码:

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) 
+0

你可以分享你的数据,你使用的代码将其转换为虚拟变量? –

+0

@VivekKumar,把它放在问题的最后。 –

+1

和数据?请做一个完整的[mvce示例](https://stackoverflow.com/help/mcve) –

回答

0

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

转换分类变量成虚设/指示器变量

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

如果您想查看一些其他方式来编码您的数据,check out this link

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