业余时间学习下深度学习,个人理解就是对已有的数据进行非线性映射,然后再映射的空间内找出数据的特征(个人理解可能不准,请指正)。
源码地址:https://github.com/yu-bo/stock
然后想着找一些数据练习下,网上的教程例子很多,个人想着预测下股票信息,大概的过程如下:
1、使用tushare获取stock信息,
2、对数据进行处理
3、训练和预测
获取信息:
def getStockInfo(symbol, ts_code, start_time,end_time):
df_list=[]
while start_time!= end_time:
df_t = pro.daily(ts_code=ts_code, start_date=start_time, end_date=end_time)
df_list.append(df_t)
end_time = df_t.tail(1)["trade_date"].values[0]
if len(df_list) != 0:
data = pd.concat(df_list, join="inner")
else:
data =None
return data
对数据处理:
首先读取数据,然后分离出训练数据和预测数据,之后形成序列供模型使用
def getTrainData(stockInfo,only_untrain=False):
"""
获取单只股票的训练数据
:param stockInfo: stock 信息
:param only_untrain: 只使用未训练的数据
:return: 如果数据不够返回None
"""
symbol = stockInfo["symbol"]
path = stock_sql.getFilePath(symbol)
df=stock_sql.getStockData(path)
if only_untrain :
df= parseUntrainedData(symbol,df)
if len(df) <= SEQUENCE_LEN:
return None
# 对数据进行训了测试的分离处理
x,y = dataProcess(df)
#形成训练数据
train_x, scaler_x = dataSequence(x)
# y只取最后一位
train_y, scaler_y = dataSequence_y(y)
return train_x,scaler_x,train_y, scaler_y
建立模型:
我的模型比较简单,后面边学边改,目前也不太知道该怎么改。
def model_1(shape):
model = keras.Sequential()
model.add(keras.Input(shape=shape))
#model.add(keras.layers.Dense(units=100, activation="tanh"))
model.add(keras.layers.LSTM(units=500, activation='tanh',return_sequences=True))
model.add(keras.layers.LSTM(units=500, activation='tanh', return_sequences=True))
model.add(keras.layers.LSTM(units=200,activation='tanh',return_sequences= False))
model.add(keras.layers.Dense(units=200, activation="tanh"))
model.add(keras.layers.Dense(units=20, activation="tanh"))
model.add(keras.layers.Dense(units=1))
model.compile(optimizer=keras.optimizers.Adam(),
loss="mse",
metrics=[keras.metrics.mae])
model.summary()
return model
下面是一个预测的结果,不是很准确,智能看个大概趋势,有严重的滞后,希望有懂的大神给点指导意见。