statsmodelsのIRLSのソースコード解剖記

statsmodelsのGLMの手法の一つでLogistic Regressionを推定する際に用いられるIRLS(Iterative Reweighted Least Square)がどのように実装されているか調べた. 

その際にclassや参照の構造をgraphvizで作成した.
誰かの参考になれば良いです.

同じ図を作成するためのコードは,以下の通りです.

from graphviz import Digraph

f = Digraph("dependencies",filename="../dt_stats/dependencies.gv",engine="dot")
f.node("A","sm.GLM")
f.node("B","statsmodels.base.model.LikelihoodModel")
f.node("F","sm.families.Binomial")
f.node("F1","sm.familes.Family")
f.node("L","sm.families.links.logit")
f.node("L1","sm.familes.links.Logit")
f.node("L2","sm.familes.links.Link")
f.node("D","statsmodels.tools.numdiff.approx_fprime_cs",color="green")
f.node("V","sm.familes.varfuncs.binarynsm.families.varfuncs.Binomial")
f.node("R","statsmodels.regression._tools._MinimalWLS")
f.node("N","numpy.linalg.lstlq",color="green")
f.node("C","sm._check_convergence",color="green")
f.node("W","statsmodels.regression.linear_model.WLS")
f.node("W1","statsmodels.regression.linear_model.RegressionModel")
f.node("Re","sm.GLMResults")
f.node("ReB","statsmodels.base.model.LikelihoodModelResults")

f.edge("B","A",color="blue")
f.edge("F","A",color="red")
f.edge("F1","F",color="blue")
f.edge("L","F",color="red")
f.edge("L1","L",color="blue")
f.edge("L2","L1",color="blue",style="dotted",len="1.0")
f.edge("D","L2",color="red")
f.edge("V","F",color="red")
f.edge("R","A",color= "red")
f.edge("N","R",color="red")
f.edge("C","A",color="red")
f.edge("W","A",color="red")
f.edge("W1","W",color="blue")
f.edge("B","W1",color="blue")
f.edge("Re","A",color="red")
f.edge("ReB","Re",color="blue")

f.attr(overlap="false")
f.attr(label="sm is abbreviation of statsmodels.apin"
              "For arrows : blue is inheritance;  "
              "red is used in the class.n"
              "For nodes : black is class; green is function.")
f.attr(title="aaa")
f.view()

———-雑感(`・∀・´)———-
コードの探索をする際に,関数や引数同士を自動的に結びつけてくれるものがあれば良いなぁと思っていた.sourcetrailというアプリケーションはまさにそれを行なってくれます!! 効率良くコードを探索出来るのはありがたいですね!

コメント

タイトルとURLをコピーしました