为什么 java string hashCode 在不同但相似的 geohash 字符串上有很多冲突?
Why java string hashCode has many collisions on different but similar geohash strings?
Geohash 字符串是我的稀疏逻辑回归模型中的一个特征。所以我使用 java string hashCode 在 geohash string 上生成 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 字符串上的冲突?
我认为您误解了 Object.hashCode()
method 的目的 - 通常不是散列,而是 Java 对象具有此方法的原因:
This method is supported for the benefit of hash tables such as those provided by HashMap.
因此,如果您尝试将此方法用作机器学习模型的输入,则您没有将其用于预期目的。
答案相当明显:您需要设计自己的散列方法 - 或者 select 一个预先存在的方法 - 为您的预期输入提供所需的冲突配置文件。 String.hashCode()
使用的那个你不能改。
Geohash 字符串是我的稀疏逻辑回归模型中的一个特征。所以我使用 java string hashCode 在 geohash string 上生成 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 字符串上的冲突?
我认为您误解了 Object.hashCode()
method 的目的 - 通常不是散列,而是 Java 对象具有此方法的原因:
This method is supported for the benefit of hash tables such as those provided by HashMap.
因此,如果您尝试将此方法用作机器学习模型的输入,则您没有将其用于预期目的。
答案相当明显:您需要设计自己的散列方法 - 或者 select 一个预先存在的方法 - 为您的预期输入提供所需的冲突配置文件。 String.hashCode()
使用的那个你不能改。