我应该如何在分类列中估算Nan值?

时间:2018-07-21 21:06:04

标签: pandas dataframe machine-learning encoding imputation

我是机器学习的初学者,我的意思是我应该对列进行编码(分类),并在列上使用简单的标签编码,然后使用最频繁的值或其他方式来赋值NAN值。因为编码需要将我的数据帧转换为数组,然后进行插补,则需要再次将数组转换为数据帧,而所有这些都在一个列中。还有更多这样的列。

例如,我有此变量“ BsmtQual”

BsmtQual:评估地下室的高度并具有以下类别数

   Ex   Excellent (100+ inches) 
   Gd   Good (90-99 inches)
   TA   Typical (80-89 inches)
   Fa   Fair (70-79 inches)
   Po   Poor (<70 inches
   NA   No Basement
“ BsmtQual” 81中的2919个值中的

是NAN值。

2 个答案:

答案 0 :(得分:1)

对于将来遇到的不涉及编码的问题,您应该在https://datascience.stackexchange.com/上发布。

这取决于几件事。首先,此变量在您的运动中有多重要?假设您正在执行分类,则可以尝试删除所有不带NaN值的行,运行一些模型,然后删除变量并再次运行相同的模型。如果您尚未发现准确性下降,则可以考虑完全删除该变量。

如果您确实发现准确性下降或由于无人看管的问题而无法判断影响,则可以尝试其他几种方法。如果您只想快速解决问题,并且NaN或类别不太多,则可以使用最常用的值进行估算。如果满足上述条件,这不会引起太多问题。

如果您想更加精确,则可以考虑使用其他变量来预测分类变量的类别(显然,只有在分类变量与某些其他变量相关联的情况下,此方法才有效)。您可以为此使用多种算法,包括分类器或聚类。这全都取决于分类变量的分布以及要投入多少精力来解决问题。

(我也只是在学习,但是我认为这是您的大多数选择)

答案 1 :(得分:0)

  

“…或其他方法。

示例:

Ex   Excellent (100+ inches) 5 / 5 = 1.0
Gd   Good (90-99 inches)     4 / 5 = 0.8
TA   Typical (80-89 inches)  3 / 5 = 0.6
Fa   Fair (70-79 inches)     2 / 5 = 0.4
Po   Poor (<70 inches        1 / 5 = 0.2
NA   No Basement             0 / 5 = 0.0

但是,标签的精确度较低(如果与实际测量结果相结合,则会影响准确性)。

可以通过在类别范围内缩放值来解决(例如在0-69上缩放0.0-0.2英寸),也可以通过每个类别的近似值来解决(线性精度更高)。例如,如果最高值为200英寸:

Ex   Excellent (100+ inches) 100                  / 200 = 0.5000
Gd   Good (90-99 inches)     ((99 - 90) / 2) + 90 / 200 = 0.4725
TA   Typical (80-89 inches)  ((89 - 80) / 2) + 80 / 200 = 0.4225
Fa   Fair (70-79 inches)     ((79 - 70) / 2) + 70 / 200 = 0.3725
Po   Poor (<70 inches        (69 / 2)             / 200 = 0.1725
NA   No Basement             0                    / 200 = 0.0000

Actual measurement 120 inch  120                  / 200 = 0.6000

产生近似值(范围Ex之外的中点值,这是最小值)。如果在此类列上进行的计算不准确,则表示符号不精确(标签表示范围而不是值)。