1

Geohash 字符串是我的稀疏逻辑回归模型中的一个特征。所以我使用 java string hashCode 在 geohash 字符串上生成 int 值以获得特征 ID。但我发现 hashCode 方法在类似的 geohash 字符串上表现不佳。这会导致不同的特征具有相同的特征 id,即使特征相似,这也可能对模型优化不利。例如,那些相似的 geohash 字符串对具有相同的 hashCode。

<"wws8vw", "wws8x9">
    "wws8vw".hashCode() = -774715770
    "wws8x9".hashCode() = -774715770
<"wmxy0", "wmxwn">
    "wmxy0".hashCode() = 113265337
    "wmxwn".hashCode() = 113265337

我猜geohash生成器方法和java hashCode方法之间有一些关系。那么,任何人都可以向我解释真正的原因以及如何减少 geohash 字符串上的冲突?

4

1 回答 1

5

我认为您误解了该Object.hashCode()方法的目的-一般不是散列,而是Java对象具有此方法的原因:

支持这种方法是为了有利于哈希表,例如 HashMap 提供的那些。

因此,如果您尝试将此方法用作机器学习模型的输入,那么您并没有将其用于预期目的。

答案相当明显:您需要设计自己的散列方法 - 或选择一种预先存在的方法 - 为您的预期输入提供所需的冲突配置文件。使用的那个String.hashCode()不能由你改变。

于 2016-07-29T07:43:43.303 回答