2016-06-13 5 views
1

により、合計は(条件付きロジスティック回帰にフィットするようにしようとしています。)はTheano - 私はTheanoのカスタム尤度関数に取り組んでいるグループ

可能性が合算値グループによってが必要です。 Rでは "ave()"関数を持っています。Python Pandasには "groupby()"があります。私はどのようにTheanoで同様のことをしますか?詳細

ため

編集私は(条件付きロジスティック回帰と同じ。)Cox比例ハザードモデルを作成したい対数尤度は、グループでの値の合計が必要です。

\sum{_{g=1}^G

パンダでは、これは次のようになります。

temp = df.groupby('groupid')['eta'].aggregate(np.sum) 
denominator = np.log(temp).sum() 

データは、我々はグループIDを持つ列があり、合計する値

group eta 
1  2.1 
1  1.8 
1  0.9 
2  1.2 
2  0.75 
2  1.42 

は、グループ合計のための出力は次のようになります。そして、

group sum 
1  4.8 
2  3.37 

、和の対数の合計:

log(4.8) + log(3.37) = 2.7835 

これはパンダですばやく簡単です。 Thanoで同様のことをするにはどうすればいいですか?確かに、次のループを書くことができますが、遅いですし、遅いので、可能な限り手作業でコード化されたループを避けようとしています。

ありがとうございます!

+0

残念ながら、theanoにはgroupby関数はありません。あなたが達成しようとしているもの(いくつかの例のコードかもしれません)を正確に示すことができれば、より良い助けになります。 –

+0

もう一つの考えは、行列乗算を使って巧妙なことをすることでした。おそらくグループ指標値の行列。 – Noah

答えて

1

「X」(あなたのすべてのetasのリスト)があり、薄暗いとしましょう。 Nx1(私は推測する)と行列Hである.Hはグループのオン・ホット・エンコーディングを持つNxG行列である。これは、限り、少なくとも1点あたりのイータ(または他の-inf)が存在するように動作するはずです

import numpy as np 
from numpy import newaxis as na 
import theano.tensor as T 

X = T.vector() 
H = T.matrix() 

tmp = T.sum(X[:, na] * H, axis=0) 
O = T.sum(T.log(tmp)) 

x = np.array([5, 10, 10, 0.5, 5, 0.5]) 
# create a 1-hot encoding 
g = np.array([1, 2, 2, 0, 1, 0]) 
h = np.zeros(shape=(len(x), 3)) 
for i,j in enumerate(g): 
    h[i,j] = 1.0 

O.eval({X:x, H: h}) 

ザ・もしあなたのような何かを書きます。

+0

非常に滑らかです。うまく動作するようです。ありがとう!! – Noah

関連する問題