にロジスティック回帰学習アルゴリズムを実装しようとしていますPython
。私が実装した仮説関数は次のとおりです。
def hypothesis(params, features):
z = sum(p * f for p, f in zip(params, features))
return 1 / (1 + math.e ** -z)
テストに使用するデータセットはUCI Machine Learning Repositoryのもので、次のようなデータが含まれています (最初の列はターゲット、他の列は選択された機能です)。
1,14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065
3,13.2,1.78,2.14,11.2,100,2.65,2.76,.26,1.28,4.38,1.05,3.4,1050
2,13.16,2.36,2.67,18.6,101,2.8,3.24,.3,2.81,5.68,1.03,3.17,1185
1,14.37,1.95,2.5,16.8,113,3.85,3.49,.24,2.18,7.8,.86,3.45,1480
ご覧のとおり、一部の機能は他の機能に比べて非常に大きくなっています。したがって、z
関数hypothesis
の は のべき乗として大きすぎますe
。実際、より大きな値の場合、z
s は all0.0
です。分子を 3 に変更すると、OverflowError
が上がります。
プログラムにデータを供給する前にデータを正規化する必要があるかもしれませんが、どうすればこれを行うことができますか?