使用Scipy的最小扭转变形优化

问题描述

我正在做一个优化练习(最小扭转变换),该练习基本上是尝试旋转原始因子以实现正交性,同时对原始因子造成的失真最小。数学是。

enter image description here

enter image description here

P是一个KxN矩阵,其中K是因子数,N是每个因子的长度。 t是一个KxK矩阵。问题是最小化运动,其约束是t * F矩阵的相关矩阵必须是恒等矩阵以保证正交性。这是到目前为止我尝试过的代码
import numpy as np
import pandas as pd
from scipy.optimize import minimize
import yfinance as yf

start = "2010-01-01"
end = "2019-12-31"
tech = yf.download(["AAPL","MSFT","IBM"],start=start,end=end)['Adj Close']
tech = tech.pct_change().dropna().T

def is_eye(arr,f):
    k = len(f)
    arr = arr.reshape(k,k)
    res = pd.DataFrame(np.dot(arr,f.values)).T.corr()
    return (res.values == np.eye(k)).all()*1.0

def fun_min(arr,k)
    f = f.values
    stds = np.nanstd(f,axis=1).reshape(-1,1)
    res = np.sqrt(np.nansum(np.nanvar((np.dot(arr,f) - f)/stds,axis=1))/k)
    return res

res_min = minimize(fun_min,np.array([0.01]*25),args=(tech,),constraints=({'type': 'eq','fun': lambda x:is_eye(x,tech) - 1.0}))

但是,res_min.x完全返回了我的猜测。我将不胜感激。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)