我正在尝试在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 都是0.0
。如果我将分子更改为 3,OverflowError
则会提高。
也许我应该在将数据提供给我的程序之前对它们进行标准化,知道我该怎么做吗?