我有一组训练数据,输入(数据[' qvec'])和输出(数据[' tvec'])是标准化的300维向量。我想训练线性变换,即300x300矩阵,以最小化成本函数:
from scipy.spatial.distance import cosine
def cost_function(data, theta):
dists = [cosine(data.iloc[i]['qvec'].dot(theta), data.iloc[i]['tvec']) for i in data.index]
return sum(dists)/len(data)
我假设会有一个类似于多变量梯度下降的更新功能。那就是:
def update_theta(data, theta, alpha):
for m in range(300):
for n in range(300):
cost = [(data.iloc[i]['qvec'].dot(theta) - data.iloc[i]['tvec']) * ????
for i in data.index]
theta[m,n] = theta[m,n] - alpha/len(data) * sum(cost)
return theta
我知道当θ是300x1矩阵时,????是data.iloc [i] [' qvec'] [m],但300x300矩阵会是什么?如果我的方法已经取消,或者已经有了一个包装,我也很感激,如果有人指出我正确的方向。