我目前正在进行我的第一个“真正的”深度学习项目(令人惊讶)预测股票走势。我知道我会以 1000:1 的比例去做任何有用的事情,但我很享受它,并希望坚持到底。我在几周的尝试中学到的东西比我在完成 MOOC 的前 6 个月中学到的还要多。
我正在使用 Keras 构建一个 LSTM,当前预测下一步的进展,并尝试将任务作为分类(上/下/稳定)和现在的回归问题。两者都会导致类似的障碍,因为我的验证损失从未从第 1 纪元开始改善。
我可以使模型过度拟合,使得 MSE 训练损失接近于零(如果分类则为 100% 准确率),但验证损失在任何阶段都不会减少。这对我未经训练的眼睛来说过于拟合,因此我添加了不同数量的 dropout,但所做的只是抑制了模型/训练准确性的学习,并且验证准确性没有任何改进。
我尝试更改大量的超参数 - 学习率、优化器、批量大小、回溯窗口、#layers、#units、dropout、#samples 等,还尝试了数据子集和特征子集,但我就是做不到让它发挥作用,所以我非常感谢任何帮助。
下面的代码(我知道这并不漂亮):
# Import saved full dataframe ~ 200 features
import feather
df = feather.read_dataframe('df_feathered')
df.set_index('time', inplace=True)
# Difference the dataset to make stationary
df = df.diff(periods=1, axis=0)
# MAKE LARGE SAMPLE FOR TESTING
df_train = df.loc['2017-3-1':'2017-6-30']
df_val = df.loc['2017-7-1':'2017-8-31']
df_test = df.loc['2017-9-1':'2017-9-30']
# Make x_train, x_val sets by dropping target variable
x_train = df_train.drop('close+1', axis=1)
x_val = …
Run Code Online (Sandbox Code Playgroud) 我有一个项目,在其中使用表格数据使用Gradient Boosted Trees进行回归。我想看看是否对数据使用去噪自动编码器可以更好地表示原始数据并提高原始GBT分数。灵感来自受欢迎的Kaggle获奖者。
AFAIK对于提取DAE的激活,我有两个主要选择-创建瓶颈结构并采用单个中间层激活或将每一层的激活串联在一起作为表示。
假设我要从下面的3x 512节点层激活所有层:
inputs = Input(shape=(31,))
encoded = Dense(512, activation='relu')(inputs)
encoded = Dense(512, activation='relu')(encoded)
decoded = Dense(512, activation='relu')(encoded)
decoded = Dense(31, activation='linear')(decoded)
autoencoder = Model(inputs, decoded)
autoencoder.compile(optimizer='Adam', loss='mse')
history = autoencoder.fit(x_train_noisy, x_train_clean,
epochs=100,
batch_size=128,
shuffle=True,
validation_data=(x_test_noisy, x_test_clean),
callbacks=[reduce_lr])
Run Code Online (Sandbox Code Playgroud)
我的问题是:
进行上述激活会给我x_train的新表示,对吗?我应该为x_test重复此过程吗?我都需要训练我的GBT模型。
我该如何推断?每个新数据点都需要“转换”为这种新的表示形式。我如何用Keras做到这一点?
我是不是真的需要提供validation_data=
给.fit
在这种情况呢?
我想为用户生成一个基于整数的唯一 ID(在我的 df 中)。
假设我有:
index first last dob
0 peter jones 20000101
1 john doe 19870105
2 adam smith 19441212
3 john doe 19870105
4 jenny fast 19640822
Run Code Online (Sandbox Code Playgroud)
我想像这样生成一个 ID 列:
index first last dob id
0 peter jones 20000101 1244821450
1 john doe 19870105 1742118427
2 adam smith 19441212 1841181386
3 john doe 19870105 1742118427
4 jenny fast 19640822 1687411973
Run Code Online (Sandbox Code Playgroud)
10 位 ID,但它基于字段的值(john doe 相同的行值获得相同的 ID)。
我研究了散列、加密、UUID,但找不到与这个特定的非安全用例有太多关系。它只是生成一个内部标识符。
感觉我可能以错误的方式解决这个问题,因为我找不到太多关于它的文献!
谢谢
我有一个像这样的熊猫专栏:
index colA
1 10.2
2 10.8
3 11.6
4 10.7
5 9.5
6 6.2
7 12.9
8 10.6
9 6.4
10 20.5
Run Code Online (Sandbox Code Playgroud)
我想搜索当前行值并从前几行中找到匹配项。例如, index4 (10.7) 将返回 1 匹配,因为它接近 index2 (10.8)。类似地,index8 (10.6) 将返回匹配项 2,因为它接近于 index2 和 4。
在此示例中使用 +/- 5% 的阈值将输出以下内容:
index colA matches
1 10.2 0
2 10.8 0
3 11.6 0
4 10.7 2
5 9.5 0
6 6.2 0
7 12.9 0
8 10.6 3
9 6.4 1
10 20.5 0
Run Code Online (Sandbox Code Playgroud)
对于大型数据帧,我想将其限制为要搜索的前 X(300?)行数,而不是整个数据帧。
我有一个时间序列DataFrame,我想复制我的200个功能/列中的每一个作为额外的滞后功能.所以目前我在时间t有功能,想要在时间步t-1,t-2等创建功能.
我知道这最好用df.shift()完成,但我完全无法完成它.我还想将列重命名为'feature(t-1)','feature(t-2)'.
我的伪代码尝试将是这样的:
lagged_values = [1,2,3,10]
for every lagged_values
for every column, make a new feature column with df.shift(lagged_values)
make new column have name 'original col name'+'(t-(lagged_values))'
Run Code Online (Sandbox Code Playgroud)
最后,如果我有200列和4个滞后时间步,我会得到一个新的df,其中有1,000个特征(t,t-1,t-2,t-3和t-10分别为200个).
我找到了类似的东西,但它并没有按照机器学习掌握保留原始列名(重命名为var1,var2等).不幸的是,我不太清楚它是否足以将其修改为我的问题.
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
"""
Frame a time series as a supervised learning dataset.
Arguments:
data: Sequence of observations as a list or NumPy array.
n_in: Number of lag observations as input (X).
n_out: Number of observations as output (y).
dropnan: Boolean whether or not to drop rows …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 websocket 数据并将其保存到 Pandas DataFrame 以供其他功能使用。但是,我对它们非常不熟悉,最初出现错误是因为我试图将 df 参数直接传递给 on_message()。此链接建议使用partial
添加参数,但我仍然收到error from callback <function on_message at 0x000002A098207510>: local variable 'df' referenced before assignment
错误消息。
我意识到有更好的方法来处理数据而不是数据框,但我只想先让它工作。谢谢。
import websocket
import pandas as pd
import json
from functools import partial
# create empty df
df = pd.DataFrame(columns=['foreignNotional','grossValue','homeNotional','price','side','size','symbol','tickDirection',
'timestamp','trdMatchID'])
def on_message(ws, message):
msg = json.loads(message)
print(msg)
df = df
df = df.append(msg)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
return
func = partial(on_message, df)
ws.on_message = func …
Run Code Online (Sandbox Code Playgroud) 我有一个跟踪问题状态的 df。从“打开”、“进行中”到“关闭”,如下所示:
T1 T2 T3 T4 T5
1 Open In Progress Closed
2 In Progress Closed
3 Open In Progress Open Closed
4 Open In Progress Closed Open Closed
5 Open In Progress Closed
Run Code Online (Sandbox Code Playgroud)
基本上我想找到所有重新打开的问题。这可以通过具有Closed
然后具有后续转换的值的任何行来注意到。例如,索引 4
有一个关闭的值, T3
但随后 T4
包含一些表明它已被重新打开的值。
输出将是:
T1 T2 T3 T4 T5 Reopened
1 Open In Progress Closed 0
2 In Progress Closed 0
3 Open In Progress Open Closed 0
4 Open In Progress Closed Open Closed 1
5 Open In Progress …
Run Code Online (Sandbox Code Playgroud) 我正在解析一个原始日志文件并且不得不求助于正则表达式,因为逗号分隔符出现在一个字段中。
20200914 01:38:16,ip-XX-YY-1-202,user,10.0.0.0,978,108421,QUERY,db,'select some random query, that has, commas in it, sometimes and not always quotes either..'
Run Code Online (Sandbox Code Playgroud)
这是一个 maria DB 审计日志 - 我需要选择数据库查询,它是第 8 个逗号之后的所有内容。上面例子的输出是
`'select some random query, that has, commas in it, sometimes and not always quotes either..'`
Run Code Online (Sandbox Code Playgroud)
我正在使用 pandas 和.str.extract
. 我有一个 hacky 版本,它匹配第 8 个逗号之前的所有内容,但不确定如何获取它后面的内容。
我正在搜索所有.csv位于子文件夹中,glob
如下所示:
def scan_for_files(path):
file_list = []
for path, dirs, files in os.walk(path):
for d in dirs:
for f in glob.iglob(os.path.join(path, d, '*.csv')):
file_list.append(f)
return file_list
Run Code Online (Sandbox Code Playgroud)
如果我打电话:
path = r'/data/realtimedata/trades/bitfinex/'
scan_for_files(path)
我得到了正确的递归文件列表:
['/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_12.csv',
'/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_13.csv',
'/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_15.csv',
'/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_11.csv',
'/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_09.csv',
'/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_10.csv',
'/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_08.csv',
'/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_14.csv',
'/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_14.csv',
'/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_12.csv',
'/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_10.csv',
'/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_08.csv',
'/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_09.csv',
'/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_15.csv',
'/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_11.csv',
'/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_13.csv']
Run Code Online (Sandbox Code Playgroud)
但是当使用包含我想要的文件的实际子目录时 - 它返回一个空列表.知道为什么会这样吗?谢谢.
path = r'/data/realtimedata/trades/bitfinex/btcusd/'
scan_for_files(path)
收益: []
我想在我的 df 中逐行删除前面的和试用的零值,然后让它们转换为“对齐”。
可能最好用下面的例子来演示。
初始 df:
index c1 c2 c3 c4 c5 c6 c7 c8
1 0 0 1 2 3 4 5 0
2 0 0 0 1 2 3 4 5
3 0 1 2 3 0 0 0 0
4 0 0 1 2 3 4 0 0
5 1 2 3 4 5 6 7 0
6 0 0 0 1 0 0 4 0
Run Code Online (Sandbox Code Playgroud)
输出:
index c1 c2 c3 c4 c5 c6 c7 …
Run Code Online (Sandbox Code Playgroud) 我有一个相当简单的问题,但找不到干净的熊猫解决方案.
给出如下系列中的日期列表:
LoadedDate
0 2016-02-18
1 2016-02-19
2 2016-02-20
3 2016-02-23
4 2016-02-24
5 2016-02-25
6 2016-02-26
7 2016-02-27
8 2016-03-01
9 2016-03-02
10 2016-03-03
11 2016-03-04
12 2016-03-05
13 2016-03-08
14 2016-03-09
15 2016-03-10
16 2016-03-11
17 2016-03-12
18 2016-03-15
19 2016-03-16
20 2016-03-17
21 2016-03-18
22 2016-03-19
23 2016-03-22
24 2016-03-23
25 2016-03-24
26 2016-03-25
27 2016-03-30
28 2016-03-31
29 2016-04-01
30 2016-04-02
31 2016-04-05
32 2016-04-06
33 2016-04-07
34 2016-04-08
35 2016-04-09
36 2016-04-12
37 2016-04-13
38 …
Run Code Online (Sandbox Code Playgroud) 我正在使用selenium从网站上抓取信息.
该页面位于登录后面,因此我无法提供示例 - 但基本上我需要收集大约数据.一页上有800个字段.
目前,归结为我导航到正确的页面,然后运行
for i in driver.find_elements_by_xpath('//*[@id]'):
some_list.append(i.get_attribute('textContent'))
我的问题是;
get_attribute
会对响应服务器产生任何影响吗?或者是整页"缓存"然后我只是读取已经加载的值?
只是想确保我对另一方很友好,而不是为get_attribute做800次调用!
谢谢.
python ×11
pandas ×7
keras ×2
autoencoder ×1
data-science ×1
dataframe ×1
date ×1
glob ×1
hash ×1
numpy ×1
regex ×1
selenium ×1
web-scraping ×1
websocket ×1