社会焦点

【独家】周志华教授gcForest(多粒度级联森林)算法预测股指期货涨跌(3)

字号+ 作者: 来源: 2017-04-27

fromsklearn importpreprocessingema = ta.EMA(close, timeperiod= 30).tolist()macd = ta.MACD(close, fastperiod= 12, slowperiod= 26, signalperiod = 9)[ 0].tolist()momentum = ta.MOM(close, timeperiod= 10)

  fromsklearn importpreprocessingema = ta.EMA(close, timeperiod= 30).tolist()macd = ta.MACD(close, fastperiod= 12, slowperiod= 26, signalperiod = 9)[ 0].tolist()momentum = ta.MOM(close, timeperiod= 10).tolist()rsi = ta.RSI(close, timeperiod= 14).tolist()linreg = ta.LINEARREG(close, timeperiod= 14).tolist()var = ta.VAR(close, timeperiod= 5, nbdev= 1).tolist() #获取当前的收盘价的希尔伯特变换

  cycle = ta.HT_DCPERIOD(close).tolist() #获取平均真实波动范围指标ATR,时间段为14

  atr = ta.ATR(high, low, close, timeperiod= 14).tolist() #把每根k线的指标放入数组X中,并转置

  X = np.array([open,close,high,low,volume,ema, macd, linreg, momentum, rsi, var, cycle, atr]).T #输出可知数组X包含了ema, macd, linreg等13个指标数值

  X[ 2] array([ 3215. , 3267.2, 3281.2, 3208. , 114531. , nan, nan, nan, nan, nan, nan, nan, nan])y=[]c=close[ 0]

  #用i遍历整个数据集

  fori inrange( 1, len(X)):

  #如果高点突破参考线的1.0015倍,即上涨if(close[i]>close[i- 1]):

  #把参考点加到列表basicLine里,并且新参考点变为原来的1.0015倍,y.append( 1) elif(close[i]<close[i- 1]): y.append( 0) elif(close[i]==close[i- 1]): y.append( 2)

  #添加最后一个数据的标签为1

  y.append( 1)

  #把y转化为ndarray数组

  y=np.array(y)

  #输出验证标签集是否准确

  print(len(y))

  fori inrange( 1, 10): print(close[i],y[i],i) 16633214.6 1 13267.2 0 23236.2 0 33221.2 0 43219.6 0 53138.8 0 63129.0 0 73083.8 1 83107.0 0 9#把数据集分解成随机的训练和测试子集, 参数test_size表示测试集所占比例

  X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size= 0.33)

  #输出可知测试特征集为维度是50*4的数组ndarray

  X_te.shape

  (549, 13)

首先调用和训练算法. 参数shape_1X在这里是指某一样本的维度。

  我把维度也作为图像特征输入到机器里. 显然,它与iris数据集并不是很相关,但仍然需要定义 .

0.1.3版本可输入整数作为 shape_1X参数。

  gcForest参数说明

shape_1X:

  单个样本元素的形状[n_lines,n_cols]。 调用mg_scanning时需要!对于序列数据,可以给出单个int。

n_mgsRFtree:

  多粒度扫描期间随机森林中的树木数量。

window:int(default = None)

  多粒度扫描期间使用的窗口大小列表。如果“无”,则不进行切片。

stride:int(default = 1)

  切片数据时使用的步骤。

cascade_test_size:float或int(default = 0.2)

  级联训练集分裂的分数或绝对数。

n_cascadeRF:int(default = 2)

  级联层中随机森林的数量,对于每个伪随机森林,创建完整的随机森林,因此一层中随机森林的总数将为2 * n_cascadeRF。

n_cascadeRFtree:int(default = 101)

  级联层中单个随机森林中的树数。

min_samples_mgs:float或int(default = 0.1)

  节点中执行拆分的最小样本数 在多粒度扫描随机森林训练期间。 如果int number_of_samples = int。 如果float,min_samples表示要考虑的初始n_samples的分数。

min_samples_cascade:float或int(default = 0.1)

  节点中执行拆分的最小样本数 在级联随机森林训练期间。 如果int number_of_samples = int。 如果float,min_samples表示要考虑的初始n_samples的分数。

cascade_layer:int(default = np.inf)

  允许的最大级联级数。 有用的限制级联的结构。

tolerance:float(default= 0.0)

  联生长的精度差,整个级联的性能将在验证集上进行估计, 如果没有显着的性能增益,训练过程将终止

n_jobs:int(default = 1)

  任意随机森林适合并预测的并行运行的工作数量。 如果为-1,则将作业数设置为核心数。

  #shape_1X样本维度,window为多粒度扫描(Multi-Grained Scanning)算法中滑动窗口大小,

  #用于扫描原始数据,tolerance为级联生长的精度差,整个级联的性能将在验证集上进行估计,

  #如果没有显着的性能增益,训练过程将终止#gcf = gcForest(shape_1X=4, window=2, tolerance=0.0)

  #gcf = gcForest(shape_1X=[13,13], window=2, tolerance=0.0)

  gcf = gcForest(shape_1X= 13, n_mgsRFtree= 100, window= 6, stride= 2, cascade_test_size= 0.2, n_cascadeRF= 4, n_cascadeRFtree= 101, cascade_layer=np.inf, min_samples_mgs= 0.1, min_samples_cascade= 0.1, tolerance= 0.0, n_jobs= 1)gcf.fit(X_tr, y_tr)

  Slicing Sequence...Training MGS Random Forests...Adding/Training Layer, n_layer=1Layer validation accuracy = 0.5577889447236181Adding/Training Layer, n_layer=2Layer validation accuracy = 0.521608040201005

  #shape_1X样本维度,window为多粒度扫描(Multi-Grained Scanning)算法中滑动窗口大小,

  #用于扫描原始数据,tolerance为级联生长的精度差,整个级联的性能将在验证集上进行估计,

  #如果没有显着的性能增益,训练过程将终止#gcf = gcForest(shape_1X=4, window=2, tolerance=0.0)

  #gcf = gcForest(shape_1X=[13,13], window=2, tolerance=0.0)

  gcf = gcForest(shape_1X=[ 1, 13], window=[ 1, 6],)gcf.fit(X_tr, y_tr)

转载请注明出处。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章