如何处理范围很广的特征
数据挖掘
特征选择
机器学习模型
特征缩放
2022-03-01 12:35:00
3个回答
我建议尝试对数转换。这有两个潜在的好处:
- x 值的范围变小
- 您转换后的数据可能更接近于正态分布(仅与某些模型相关,例如与树无关)
这里有两个玩具例子来说明:
玩具示例 1
s = np.random.lognormal(3, 1, 1000)
plt.hist(s, 100)
plt.show()
plt.hist(np.log(s), 100)
plt.show()
从第二张图中可以看出,x 值的范围变小了,转换后的分布类似于正态分布。当然,这是一个高度人为的例子,因为未转换的分布是log_normal.
玩具示例 2
s = np.random.geometric(0.2,100000)
plt.hist(s, 100)
plt.show()
plt.hist(np.log(s), 100)
plt.show()
这个看起来不像示例 1 那样好(即正态分布),但您的 x 值范围仍然变得更加紧凑。
如果您的数据包含 x 值你可以使用np.log(x+1). 如果您的数据包含负值,它将变得更加棘手(这种情况下的方法包括此处描述的签名日志,或者只是向您的数据添加一个常数值,例如最小值)。
由于您有很多接近 0 的值,因此我建议您进行与对数转换非常相似的转换,但不要进行对数转换。它被称为双对称对数变换。我建议您阅读此内容。
据我所知,你的价值观是积极的,所以你可以简单地记录日志。您还可以将变量除以某个值,例如 10。您可以进行任何类型的线性变换。
您还可以查看缩放(例如最小/最大缩放)是否适合您。预处理数据 | scikit-学习
其它你可能感兴趣的问题





