我在这里看到了一些机器学习问题所以我想我会发布一个相关的问题:
假设我有一个数据集,运动员参加10公里和20公里的丘陵比赛的比赛,即每场比赛都有自己的困难.
用户的完成时间几乎与每次比赛的正常分布相反.
可以将此问题写为矩阵:
Comp1 Comp2 Comp3
User1 20min ?? 10min
User2 25min 20min 12min
User3 30min 25min ??
User4 30min ?? ??
Run Code Online (Sandbox Code Playgroud)
我想完成上面的矩阵,其大小为1000x20,稀疏度为8%(!).
应该有一种非常简单的方法来完成这个矩阵,因为我可以计算每个用户(能力)的参数和每个竞争的参数(mu,lambda of distribution).此外,比赛之间的相关性非常高.
我可以利用排名User1 <User2 <User3和Item3 << Item2 <Item1
你能不能给我一个暗示我可以使用的方法?
我想计算给定CDF 的逆高斯分布的参数mu和lambda .
通过"给定CDF",我的意思是我已经为数据Ie提供了数据和(估计的)分位数
Quantile - Value
0.01 - 10
0.5 - 12
0.7 - 13
Run Code Online (Sandbox Code Playgroud)
现在我想找出这个数据的逆高斯分布,这样我就可以根据我的分布查找值11的分位数.
我怎样才能找到mu和lambda的值?
我能想到的唯一解决方案是使用梯度下降来找到最好的mu和lambda,使用RMSE作为误差测量.
是不是有更好的解决方案?
评论:Matlab的MLE算法不是一个选项,因为它不使用分位数据.
我想通过忽略零元素在Matrices上运行快速Matlab算法.
在过去,我只是使用非常慢的双循环,例如
for i = 1 : size(x,1)
for j = 1 : size(x,2)
if x(i,j) ~= 0
... do something with x(i,j)
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是如何在整个矩阵x上进行矩阵运算呢?我怎么能跑
x(i,j) = log(x(i,j)) if x>0 else 0 <-- pseudo code
Run Code Online (Sandbox Code Playgroud)
在matlab上整个矩阵没有for循环?
最后我想改写像这样的行
result = sum(sum((V.*log(V./(W*H))) - V + W*H));
Run Code Online (Sandbox Code Playgroud)
忽略零.
我只需要理解这个概念.如果需要我也可以使用NaN而不是零,但我没有找到例如函数
nanlog()
Run Code Online (Sandbox Code Playgroud)