我是机器学习的新手,我正在运行一个代码,它将使用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?请帮助
答案 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())