无法理解熊猫中的预测算法

时间:2017-06-22 03:51:21

标签: python pandas machine-learning

我是机器学习的新手,我正在运行一个代码,它将使用pandas,quandl分析一组数据,代码运行正常并提供输出但我无法理解该代码的两行,我是张贴那个

import pandas as pd
import quandl
import math

df = quandl.get('WIKI/GOOGL')
df = df[['Adj. Open','Adj. High','Adj. Low','Adj. Close','Adj. Volume',]]
df['HL_PCT'] = (df['Adj. High'] - df['Adj. Close'])/ df['Adj. Close']*100.0
df['PCT_change'] = (df['Adj. Close']  - df['Adj. Open']) / df['Adj. Open'] * 
100.0



df = df[['Adj. Close','HL_PCT','PCT_change','Adj. Volume']]

forecast_col = 'Adj. Close'
#filling the NAN datas
df.fillna(-99999,inplace=True)
// this line i am unable to understand
forecast_out = int(math.ceil(0.02*len(df)))
// this line i am unable to understand
df['label'] = df[forecast_col].shift(-forecast_out)
df.dropna(inplace=True)
print(df.head())

我无法理解ceil函数中0.1的用法以及为什么这段代码使用了shift函数,为什么他们使用了-forecast_out?因为forecast_out给出了一些不同的值。我们已经用一些数据填充了NAN位置,但是为什么我们要下降NAN?请帮助

2 个答案:

答案 0 :(得分:1)

通常在机器学习中,您将拥有数据样本,每个样本都有功能和标签(许多api期望这样,例如scikit-learn)。在您的情况下,每个样本都是您的数据帧的一行。要预测的值是forecast_col。由于您正在查看库存数据,因此您需要预测将来会发生什么。 “预测”现在发生的事情是没有意义的(你可以观察它)。 forecast_out值是一些任意值,在这种情况下,它用于表示您预先提前多长时间来预测'Adj。关闭”。

shift方法将观察值与未来值进行对齐以进行预测。然后使用此数据框,您可以轻松地使用scikit-learn来拟合模型。

lr = sklearn.linear_model.LinearRegression()
lr.fit(df[['HL_PCT','PCT_change','Adj. Volume']], df[forecast_col])

此模型将根据当前观察到的值来预测forecast_out天后将会发生的事情。

答案 1 :(得分:1)

我遵循的是同一教程,而我也陷入了同样的问题,这是我如何解决的: math_ceil():四舍五入到最大值,例如:

  math_ceil(4.5)

它将舍入为:

5

然后代码将乘以:

(0.02*len(df))  

len(df)基本上是数据集的大小,在这种情况下为3424

(print (len(df))

换句话说,我们将跟踪3424天的数据,现在以我们的情况为例,我们将预测未来会发生什么,但是显然,我们不会持续3424天的时间范围,但是我们会花一点时间深入了解未来,在我们的情况下,距离分类器中的最后一次数据还有 69天(占总数据的2%),以了解该时期的价格。

所以总结一下:

 forecast_out = int(math.ceil(0.02*len(df))) 

等于69

现在,我们将使用变量forcast_out确定标签:

  df['label'] = df[forecast_col].shift(-forecast_out)

此公式意味着我们正在向上移动数据集的列,因此我们所看到的是69天后的股价。

这是包含更多详细信息的代码,您可以尝试使用它。

forecast_col ='Adj. Close'
df.fillna(-99999,inplace=True)

forecast_out=int(math.ceil(0.02*len(df)))
print ("Dataset= " + str(len(df)))
print ("Forecasting after how many days = " + str(forecast_out))
df['label']=df[forecast_col].shift(-forecast_out)
df.dropna(inplace=True)
print(df.tail())