【发布时间】:2012-11-27 13:48:35
【问题描述】:
我正在尝试在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
如您所见,与其他功能相比,某些功能非常庞大。
所以我的hypothesis 函数中的z 与e 的幂相比太大了。
事实上,对于更大的值,zs 都是0.0。
如果我将分子更改为 3,则会引发 OverflowError。
也许我应该在将数据提供给我的程序之前对其进行标准化,知道我该怎么做吗?
【问题讨论】:
-
@Blender 我已经编辑了问题并对此进行了解释。第一列是目标,其他列是选定的特征。
-
params是否应该看起来像[n, n, n, ...],而n总是相同的数字? -
@Blender
params是向量[θ1, θ2, θ3 ...],z是该向量与所选特征实例的点积。 -
@satoru,以下链接可能对您帖子的未来读者有用;-) en.wikipedia.org/wiki/Feature_scaling
标签: python machine-learning normalization