只是一个玩具的例子。假设我们有 5 只股票,我们希望找到最佳的投资组合结构(线性权重(,以最大化我们的历史盈亏。权重用于建立投资于股票的投资组合。
weights = tf.Variable(np.random.random((5, 1)), dtype=tf.double)
returns = tf.placeholder(dtype=tf.double)
portfolio = tf.matmul(returns, weights)
pnl = portfolio[-1]
optimizer = tf.train.AdamOptimizer().minimize(-1*pnl)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
train_data = {returns: returns_data}
for i in range(100):
sess.run(optimizer, feed_dict=train_data)
我想在以下约束下找到关于历史的最佳决策:
- 每股单重(最小值:0.05,最大值:0.5(
- 权重向量和 = 1(投资组合始终投资(
如何对优化器实现权重约束?
对于您的第一个问题,您可以将值裁剪到矩阵中:
weights = tf.Variable(np.random.random((5, 1)), dtype=tf.double)
weights = tf.clip_by_value(weights, 0.05, 0.5)
softmax函数可以回答您的第二个问题(https://en.wikipedia.org/wiki/Softmax_function(
顺便说一句,optimizer = tf.train.AdamOptimizer().minimize(-1*pnl)
行不通。优化程序需要知道它需要从中最小化损失的变量列表。因此它是:optimizer = tf.train.AdamOptimizer().minimize(-1*pnl, weights)