python - 使用 Embedding 和 Keras 根据前 K 天的所有新闻预测股票趋势
问题描述
我有一个新闻标题数据集,我应该通过词嵌入来预测股票趋势,特别是考虑到前 K 天的所有新闻标题。我清理了字符串,并选择使用 Keras 的 Tokenizer 来创建我的词汇表并将每个新闻标题转换为单词索引列表。
tokenizer.fit_on_texts(titlesDF["title"])
titlesDF["title"] = tokenizer.texts_to_sequences(titlesDF["title"])
max_len = titlesDF["title"].map(lambda x: len(x)).max()
padded = pad_sequences(titlesDF["title"], maxlen = max_len, dtype="int32", padding="post")
titlesDF["Title"] = padded.tolist()
titlesDF = titlesDF.reindex(columns=["Title", "date"])
我使用 yfinance 从指数中获取股票数据,以根据当天指数是上涨还是下跌来标记我的训练数据。
我的想法是将特定日期的所有新闻汇总到一个列表或二维数组中,其中每一行都是一个特定的标题。完成此操作后,我将股票数据框(按日期和标签列索引)与新闻数据框结合起来。由于我的目标是预测前几天的新闻,因此我通过移动日期(而不是行)在数据帧上创建了 K 个附加列。最后,他的 I 从未标记的行(由于股市关闭)和所有新闻值为 na 的行(当天和前 K 天没有新闻数据)中清除了数据框。
for i in range(1,K+1):
s = "Titles_n-" + str(i)
join[s]=join["Titles"].shift(i, freq="D")
join = join.reindex(columns=["Titles", "Titles_n-1", ..., "Titles_n-K","Label"])
join = join.dropna(subset=["Titles", "Titles_n-1", ..., "Titles_n-K"], thresh=1)
join = join.dropna(subset=["Label"])
我将任何 Titles* 列上的任何 na 值设置为 ndarray/零列表,其大小与包含新闻标题的 ndarray/列表一样。
我尝试建立这个模型:
input* = Input(shape=(max_len), dtype=np.int32)
embed* = Embedding(input_dim=nwords, output_dim=32, input_length=max_wid)(input3)
gru* = GRU(16)(embed0)
merge = Concatenate(axis=1)([grus])
dropout = Dropout(0.5)(merge)
dense2 = Dense(32, activation="softmax")(dropout)
output = Dense(2, activation="relu", use_bias=True)(dense2)
model = Model(inputs=[inputs], outputs=output)
任何人都可以给我任何关于更好模型的提示吗?我应该输入时间序列吗?或者我可以训练一个嵌入(因为所有嵌入层都在相同的数据上学习),然后将它用于所有输入?
解决方案
推荐阅读
- r - R - 带有ggplot2的climograph:更改降水值以适合第二轴
- c++ - 我的通用参考模板功能不起作用
- php - 分页在我的应用程序上不起作用 - CodeIgniter
- python - 从 seaborn clustermap 结果重新排序高级集群
- xml - 使用 xslt 1.0 版提取唯一属性值
- r - R 可以使用用户名/密码从 Sharepoint 下载 .xlsx 吗?
- java - 如何将大量文件从 S3 文件夹复制到另一个文件夹
- r - 基于任意多列中的字符串匹配在一列中创建一个值
- c - 阴影声明不会产生任何警告
- database - 将数据插入 Android SQLite 数据库时出现空指针异常