有没有一种方法可以将令牌插入可以忽略的数据框中的空值?

时间:2019-07-23 01:42:56

标签: python pandas scikit-learn

我不确定如何正确地表达它,因此在这里将对其进行描述。我正在尝试从一些数据中预测使用scikit是/否。

我目前有4个数据框,每个数据框代表不同的年份。较旧的几列为空,但在较新的列中填充。这些列的数据类型定性-大,小,主要,辅助。基本上,您无法计算数据。我无法使用Null值运行代码,因此我想引入一个在训练中可以忽略的令牌或可以实现同一目标的令牌。

对于我尝试过的事情,我找不到与我的问题类似的在线信息。我是机器学习的新手,所以我不熟悉这些术语。

我将使用数据的方式如下

from sklearn import preprocessing
def encode_features(df_train, df_test,column):

    features = column;
    df_combined = pd.concat([pub2016[features], pub2017[features], pub2018[features], pub2015[features]])

    for feature in features:
        le = preprocessing.LabelEncoder()
        le = le.fit(df_combined[feature])
        df_train[feature] = le.transform(df_train[feature])
        df_test[feature] = le.transform(df_test[feature])
    return df_train, df_test

traindf, testdf = encode_features(traindf, testdf,columnnames)
traindf.head()

#splitting into training sets code
#using RandomForestClassifier 

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您的问题的核心是一个常见的问题-“我该如何处理缺失的价值观?”当其他人从屋顶大声喊叫时,只需将值替换为“虚拟”或“令牌”值(如-9999)即可。这会伤害到您(https://stats.stackexchange.com/questions/225175/why-do-some-people-use-999-or-9999-to-replace-missing-values)。如果您确实决定添加域外令牌(例如您可以代表的最负数),请务必对数据进行规范化或标准化。您还应该添加另一列,指定用该令牌填充哪些值以及观察到哪些值(对于决策树尤其有用)。

听起来您正在执行二进制分类,这意味着您可能正在使用逻辑回归或决策树来处理此分类。您使用的技术确定了筛选出丢失数据的正确方法。但是这里有一些需要考虑的原则:

1)这个功能有那么重要吗?如果在您拥有的年份中这并不重要,请考虑将其完全删除。如果确实如此,请决定一种策略来填补缺失的值。

2)如果必须填写/估算值,可以用均值或中位数代替吗?通常,此方法假定您的数据在样本范围内足够稳定(即,相对于时间或数据的其他维度而言是固定的),可以简单地通过集中趋势来描述缺失值。但是平稳性是一个很大的假设,替换所有这些值肯定会改变您的总体分布。

3)如果您不想使用均值,中位数或模态填充等广泛方法,请考虑对缺失值进行估算。 Scikit-learn有许多估算缺失值的方法,并且正如其他人所建议的,您可以使用诸如蒙特卡洛模拟的技术估算缺失数据。不过,这会给您的数据增加大量差异,因为现在您由于将这些缺失值(以及它们可能与实际值不同的分布WRT)进行估算而产生了错误。

通常,有两件事向我建议您应该完全放弃此功能,除非它具有极高的预测性。首先,您有很多丢失的数据。其次,您缺失的数据是结构化的-它不是随机选择的。您在训练开始的几年中就丢失了数据,但是在训练结束时却没有丢失。您可能会在缺少数据的要素与其他变量(尤其是时间)之间进行交互,这使得在时间上较早地推断该要素的价值成为问题。例如,考虑此功能是否是学生的标准化考试成绩。如果评分方法在缺少数据的时间段内发生了变化,该怎么办?如果无法在两种计分方法之间进行转换,则会生成不合适的值。再举一个例子,如果此功能是平均油耗呢?如果在缺少数据的期间内对这些数据进行抽样的国家/地区对最低汽油行驶里程提出了一些新要求,那么您可能会希望下楼活动,这可能会大大改变此功能的分布,从而从根本上破坏了您估算功能的能力。

可以肯定地说,如果是我,并且此功能不是绝对关键的,我可能会放弃。如果您不能删除它,我会考虑仅根据您拥有此数据的年份做出预测(并拟合模型)。

机器学习的令人不安的事实是,有时数据只是不存在。