【问题标题】:How to handle missing data in machine learning?如何处理机器学习中的缺失数据?
【发布时间】:2017-06-23 23:29:05
【问题描述】:

我有一个数据框,它总是在周五晚上 9 点到周一凌晨 0 点之间丢失信息。我正在使用这些数据通过线性回归算法进行预测,所以这个 jump 会提高我的预测:

                    date   timestamp   liters  next_liters
...
3442 2017-02-03 19:00:00  1486148400  0.86261      0.86354
3443 2017-02-03 20:00:00  1486152000  0.86354      0.86356
3444 2017-02-03 21:00:00  1486155600  0.86356      1.86330
3445 2017-02-06 00:00:00  1486339200  1.86330      1.86305
3446 2017-02-06 01:00:00  1486342800  1.86305      1.86321
3447 2017-02-06 02:00:00  1486346400  1.86321      1.86352
3448 2017-02-06 03:00:00  1486350000  1.86352      1.86311
3449 2017-02-06 04:00:00  1486353600  1.86311      1.86271
...

我想知道如何处理这个问题,以便在算法处理数据时不考虑周五到周一。

我虽然将这些值转换为 NaN,但如您所知,sklearn 不允许此类信息。

这是我当前的代码:

df = df[['date', 'epoch', 'liters']]
df['next_liters'] = df['liters'].shift(-1)

df.dropna(inplace=True)

X = np.array(df.drop(['next_liters'], 1))
X = preprocessing.scale(X)

y = np.array(df['next_liters'])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

clf = LinearRegression(fit_intercept=True, n_jobs=-1)
clf.fit(X_train, y_train)

print ("LinearRegression (" + str(clf.score(X_test, y_test)) + ")")
print (clf.predict(X_test))

【问题讨论】:

  • 如果在最后一个值和第一个值之间投影一条线,看看结果是什么样的。这是一种适用于许多机器学习系统的技术。如果它没有接近(你可以期待的最好的),请尝试调整线条的比例,甚至尝试曲线。

标签: python pandas machine-learning scikit-learn linear-regression


【解决方案1】:

我们可以使用 pandas 内置函数获取工作日,从中创建一个新列,过滤 df 以排除“saturday”和“sunday”,然后再次过滤以丢弃任何大于 20:59:59 的日期星期五。

这当然与 ML 无关,而只是与 pandas 的一些索引。

df['weekday'] = df['date'].dt.dayofweek
df = df[(df['date'] <5)]

现在我们需要过滤周五 21:00:00 之后的任何内容(工作日 = 4)。我们可以通过从时间戳中提取小时来做到这一点(不优雅,但我需要再次创建一个新列,但我相信有一种更清洁的方法!)

def hr_func(ts):
    return ts.hour

df['hour'] = df['date'].apply(hr_func)

df = df[(df['weekday'] !=4 ) | (df['hour'] <21)
df.head()

换句话说,如果不是星期五,就保留它,如果是星期五但晚上 9 点之前,保留它。

我很确定这应该可行!

http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing

“星期几,星期一=0,星期日=6”来自: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DatetimeIndex.weekday.html

Get weekday/day-of-week for Datetime column of DataFrame

【讨论】:

  • 非常感谢!现在我知道如何选择它,但是,我该如何处理数据,这样算法就不必考虑这种跳跃?
  • 啊,我明白了。我想我误解了原来的问题。我读过它是因为您想要一种过滤周六、周日和周五晚上 9 点之后的方法,但是您希望有一种方法可以在线性回归中处理缺失的时间。很遗憾,我没有答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2018-08-18
  • 1970-01-01
  • 2023-03-26
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多