zoukankan      html  css  js  c++  java
  • AlexNet运用在股票数据

    from __future__ import division
    from __future__ import print_function  
    import numpy as np
    import pandas as pd
    import matplotlib.pylab as plt
    import seaborn as sns
    import tensorflow as tf
    from tensorflow.python.ops import rnn, rnn_cell
    import tushare as ts
    
    def getData(id,start,end,num,flag):
        df = ts.get_hist_data(id,start,end)
        #df = (df-np.sum(df)/len(df))/(np.std(df))
        if(flag=="true"):
            df = df[1:num]
        else:
            df = df[:num]
        df1 = np.array(df)
        #df2 = np.array(df.index)
        
        ##df = df.T
        x = []
        for i in range(len(df1)):
            #temp = np.append(df2[i],df1[i])
            temp = df1[i]
            newresult = []
            for item in temp:
                newresult.append(item)
            x.append(newresult)
        x.reverse()
        return x
    
    
    def getDataR(id,start,end,num):
        df = ts.get_hist_data(id,start,end)
        df1 = np.array(df)
        x = []
        for i in range(len(df1)):
            temp = df1[i]
            newresult = []
            for item in temp:
                newresult.append(item)
            x.append(newresult)
        
        P=df['close']
        #ʵ������û��end��һ������ݣ�������Ԥ��δ��һ����������ڵ����̼�
        templist=(P.shift(1)-P)/P
        templist = templist[:num]
        templist = np.array(templist)
        templist = templist.tolist()
        templist.reverse()
        tempDATA = []
        for i in range(len(templist)):
            if((i+1)%10!=0):
                pass
            else:
                if(templist[i]>0):
                    #tempDATA.append(templist[i])
                    tempDATA.append([1,0,0])
                elif(templist[i]<=0):
                    #tempDATA.append(templist[i])
                    tempDATA.append([0,1,0])
                else:
                    #tempDATA.append(templist[i])
                    tempDATA.append([0,0,1])
                
        y=tempDATA
        return y
    
    #df_sh = ts.get_sz50s()['code']
    df_sh =["600016"]
    fac = []
    ret = []
    facT = []
    retT = []
    predFAC = []
    for ishare in df_sh:
        #ȡ�����260������
        newfac = getData(ishare,'2008-07-22','2016-08-01',601,"true")
        newret = getDataR(ishare,'2008-07-22','2016-08-01',601)
        #fac.append(newfac)
        for i in range(len(newfac)):
            fac.append(newfac[i])
        for i in range(len(newret)):
            ret.append(newret[i])
        
        newfacT = getData(ishare,'2016-08-01','2017-01-19',101,"true")
        newretT = getDataR(ishare,'2016-08-01','2017-01-19',101)
        #fac.append(newfac)
        for i in range(len(newfacT)):
            facT.append(newfacT[i])
        for i in range(len(newretT)):
            retT.append(newretT[i])
        
        newpredFAC = getData(ishare,'2016-08-01','2017-01-20',11,"false")
        for i in range(len(newpredFAC)):
            predFAC.append(newpredFAC[i])
    
    fac = np.array(fac)
    ret = np.array(ret)
    meanfac = np.sum(fac, axis=0)/len(fac)
    stdfac = np.std(fac, axis=0)
    fac = (fac-meanfac)/stdfac
    
    facT = np.array(facT)
    retT = np.array(retT)
    facT = (facT-meanfac)/stdfac
    
    
    newf = []
    newfa = []
    for i in range(len(fac)):
        if((i+1)%10!=0):
            newf.append(fac[i])
        else:
            newf.append(fac[i])
            newfa.append(newf)
            newf = []
    fac = np.array(newfa)
    newfT = []
    newfaT = []
    for i in range(len(facT)):
        if((i+1)%10!=0):
            newfT.append(facT[i])
        else:
            newfT.append(facT[i])
            newfaT.append(newfT)
            newfT = []
    facT = np.array(newfaT)
    
    predFAC = (predFAC-meanfac)/stdfac
    
    learning_rate = 0.001
    batch_size = 10
    print(int(fac.shape[0]))
    training_iters = int(fac.shape[0]/batch_size)
    display_step = 10
    
    # Network Parameters
    n_input = 14
    n_steps = 10
    n_hidden = 1024
    n_classes = 3
    dropout = 0.8
    # tf Graph input
    x = tf.placeholder('float',[None, n_steps, n_input])
    y = tf.placeholder('float',[None, n_classes])
    keep_prob = tf.placeholder(tf.float32) #dropout (keep probability)
    
    
    # �������
    def conv2d(name, l_input, w, b):
        return tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(l_input, w, strides=[1, 1, 1, 1], padding='SAME'),b), name=name)
    
    # ����²�������
    def max_pool(name, l_input, k):
        return tf.nn.max_pool(l_input, ksize=[1, k, k, 1], strides=[1, k, k, 1], padding='SAME', name=name)
    
    # ��һ������
    def norm(name, l_input, lsize=4):
        return tf.nn.lrn(l_input, lsize, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name=name)
    
    # ������������ 
    def alex_net(_X, _weights, _biases, _dropout):
        # ����תΪ����
        _X = tf.reshape(_X, shape=[-1, 10, 14, 1])
    
        # �����
        conv1 = conv2d('conv1', _X, _weights['wc1'], _biases['bc1'])
        # �²�����
        pool1 = max_pool('pool1', conv1, k=2)
        # ��һ����
        norm1 = norm('norm1', pool1, lsize=4)
        # Dropout
        norm1 = tf.nn.dropout(norm1, _dropout)
    
        # ���
        conv2 = conv2d('conv2', norm1, _weights['wc2'], _biases['bc2'])
        # �²���
        pool2 = max_pool('pool2', conv2, k=2)
        # ��һ��
        norm2 = norm('norm2', pool2, lsize=4)
        # Dropout
        norm2 = tf.nn.dropout(norm2, _dropout)
    
        # ���
        conv3 = conv2d('conv3', norm2, _weights['wc3'], _biases['bc3'])
        # �²���
        pool3 = max_pool('pool3', conv3, k=2)
        # ��һ��
        norm3 = norm('norm3', pool3, lsize=4)
        # Dropout
        norm3 = tf.nn.dropout(norm3, _dropout)
    
        # ȫ���Ӳ㣬�Ȱ�����ͼתΪ����
        dense1 = tf.reshape(norm3, [-1, _weights['wd1'].get_shape().as_list()[0]]) 
        dense1 = tf.nn.relu(tf.matmul(dense1, _weights['wd1']) + _biases['bd1'], name='fc1') 
        # ȫ���Ӳ�
        dense2 = tf.nn.relu(tf.matmul(dense1, _weights['wd2']) + _biases['bd2'], name='fc2') # Relu activation
    
        # ���������
        out = tf.matmul(dense2, _weights['out']) + _biases['out']
        return out
    
    # �洢���е��������
    weights = {
        'wc1': tf.Variable(tf.random_normal([3, 3, 1, 64])),
        'wc2': tf.Variable(tf.random_normal([3, 3, 64, 128])),
        'wc3': tf.Variable(tf.random_normal([3, 3, 128, 256])),
        'wd1': tf.Variable(tf.random_normal([1024, 1024])),
        'wd2': tf.Variable(tf.random_normal([1024, 1024])),
        'out': tf.Variable(tf.random_normal([1024, n_classes]))
    }
    biases = {
        'bc1': tf.Variable(tf.random_normal([64])),
        'bc2': tf.Variable(tf.random_normal([128])),
        'bc3': tf.Variable(tf.random_normal([256])),
        'bd1': tf.Variable(tf.random_normal([1024])),
        'bd2': tf.Variable(tf.random_normal([1024])),
        'out': tf.Variable(tf.random_normal([n_classes]))
    }
    
    # ����ģ��
    pred = alex_net(x, weights, biases, keep_prob)
    
    # ������ʧ������ѧϰ����
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
    optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
    
    # ��������
    correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1))
    accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
    
    # ��ʼ�����еĹ������
    init = tf.global_variables_initializer()
    
    # ����һ��ѵ��
    with tf.Session() as sess:
        sess.run(init)
        for tr in range(100):
        #for tr in range(3):
            for i in range(int(len(fac)/batch_size)):
                batch_x = fac[i*batch_size:(i+1)*batch_size].reshape([batch_size,n_steps,n_input])
                batch_y = ret[i*batch_size:(i+1)*batch_size].reshape([batch_size,n_classes])
                sess.run(optimizer,feed_dict={x:batch_x,y:batch_y,keep_prob:dropout})
                if(i%50==0):
                    print(i,'----',(int(len(fac)/batch_size)))
            loss, acc = sess.run([cost, accuracy], feed_dict={x: batch_x,y: batch_y, keep_prob:0.8})
            print("Iter " + str(tr*batch_size) + ", Minibatch Loss= " +"{:.26f}".format(loss) + ", Training Accuracy= " +"{:.26f}".format(acc))
        print("Optimization Finished!") 
        # ������Ծ���
        print("Accuracy in data set")
        test_data = fac[:batch_size].reshape([batch_size,n_steps,n_input])
        test_label = ret[:batch_size].reshape([batch_size,n_classes])
        loss, acc = sess.run([cost, accuracy], feed_dict={x: test_data,y: test_label, keep_prob:1.})
        print("Accuracy= " +"{:.26f}".format(acc))
        
        print("Accuracy out of data set")
        test_dataT = facT[:len(facT)].reshape([len(facT),n_steps,n_input])
        test_labelT = retT[:len(facT)].reshape([len(facT),n_classes])
        loss, acc = sess.run([cost, accuracy], feed_dict={x: test_dataT,y: test_labelT, keep_prob:1.})
        print("Accuracy= " +"{:.26f}".format(acc))
        
        pred_dataT = predFAC[:batch_size].reshape([1,n_steps,n_input])
        pred_lable = sess.run([pred],feed_dict={x: pred_dataT, keep_prob:1.})
        list_lable = pred_lable[0][0]
        maxindex = np.argmax(list_lable)
        #print("Predict_label is " + str(pred_lable[0][0]))
        if(maxindex==0):
            print("up")
        else:
            print("down")
        sess.close()

    快疯了,也存在过拟合问题,做个笔记,以后慢慢完善

  • 相关阅读:
    c#发送邮件
    时间戳转换成时间js(年-月-日,例如“2017-04-22”)
    c# 如何读取web.config中的内容(ConfigurationManager)
    fiddler抓包软件的使用--请求头--ajax
    c#之双色球
    天干地支象法
    php之属性重载和方法重载
    c#之线程随机
    C#之参数线程
    c#线程创建
  • 原文地址:https://www.cnblogs.com/yunerlalala/p/6341052.html
Copyright © 2011-2022 走看看