R和Python'';s的特性哈希似乎给出了不同的结果

R和Python'';s的特性哈希似乎给出了不同的结果,python,r,hash,murmurhash,Python,R,Hash,Murmurhash,我使用特征散列将字符串变量转换为散列,以便于分类。经过一番挖掘之后,我注意到,尽管R和Python实现的Hash3都具有哈希功能(R:FeatureHashing:hashed.model.matrix和Python:sklearn.feature\u extraction.FeatureHasher),但结果在功能放置的位置上是不同的。我认为杂音散列应该是确定性的,因为当你在同一个系统上运行相同的操作时,你会得到相同的结果散列。但是,在实现之间,种子可能会有问题?这给我带来了一个问题,因为我的

我使用特征散列将字符串变量转换为散列,以便于分类。经过一番挖掘之后,我注意到,尽管R和Python实现的Hash3都具有哈希功能(R:FeatureHashing:hashed.model.matrix和Python:sklearn.feature\u extraction.FeatureHasher),但结果在功能放置的位置上是不同的。我认为杂音散列应该是确定性的,因为当你在同一个系统上运行相同的操作时,你会得到相同的结果散列。但是,在实现之间,种子可能会有问题?这给我带来了一个问题,因为我的分类模型(xgboost,我意识到它在R和Python之间存在问题)可能会对相同的数据产生不同的结果,正如其他人所指出的那样。然而,我似乎已经明白了这一点

下面是R中的代码示例:

library(FeatureHasher)
#create a single-feature dataframe
data_tmp <- data.frame(x=c("A_C","B_D"))

#> data_tmp
#    x
#1 A_C
#2 B_D

#create feature hash.  R by default includes an intercept, so remove that
#with ~x -1
fhash <- hashed.model.matrix(~x -1, data=data_tmp, hash.size=16, create.mapping=TRUE)

as.matrix(fhash)
#     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#[1,] 0 0 0 0 1 0 0 0 0  0  0  0  0  0  0  0
#[2,] 0 0 0 0 0 0 0 0 0  0  0  1  0  0  0  0
在这里,“A_C”和“B_D”不仅映射到不同的索引,而且都映射到同一列。这意味着该特征发生了冲突,因为值1表示不同的特征不再可区分,这将降低分类器的能力

这里有什么明显的我遗漏的吗?我看到了,比如,我看到了这篇帖子:,但我对它了解得不够。我注意到,在R中,如果使用create.mapping选项,然后运行

hash.mapping(fhash)
#xB_D xA_C 
#12    5 
当它打印出来时,会在字符串前加上一个“x”(变量名),所以我认为这可能是导致问题的原因。但后来我尝试重新运行上面的Python代码,除了

data_tmp = [["xA_C"],["xB_D"]]
虽然我得到的结果与以前不同,但它与R的映射不匹配。也许是Python存储变量名的内部原因?提前谢谢你,我真的很想弄明白

data_tmp = [["xA_C"],["xB_D"]]