我正在尝试在 R 中实现特征散列以帮助我解决文本分类问题,但我不确定我是否按照应有的方式进行操作。我的部分代码基于这篇文章:Hashing function for mapping integers to a given range?.
我的代码:
random.data = function(n = 200, wlen = 40, ncol = 10){
random.word = function(n){
paste0(sample(c(letters, 0:9), n, TRUE), collapse = '')
}
matrix(replicate(n, random.word(wlen)), ncol = ncol)
}
feature_hash = function(doc, N){
doc = as.matrix(doc)
library(digest)
idx = matrix(strtoi(substr(sapply(doc, digest), 28, 32), 16L) %% (N + 1), ncol = ncol(doc))
sapply(1:N, function(r)apply(idx, 1, function(v)sum(v == r)))
}
set.seed(1)
doc = random.data(50, 16, 5)
feature_hash(doc, 3)
[,1] [,2] [,3]
[1,] 2 0 1
[2,] 2 1 1
[3,] 2 0 1
[4,] 0 2 1
[5,] 1 1 1
[6,] 1 0 1
[7,] 1 2 0
[8,] 2 0 0
[9,] 3 1 0
[10,] 2 1 0
所以,我基本上是使用返回的 md5 哈希的最后 5 个十六进制数字将字符串转换为整数digest
。问题:
1 - 有没有可以为我做这个的包?我还没有找到。digest
2 -用作散列函数是个好主意吗?如果没有,我该怎么办?
PS:我应该在发布之前测试它是否有效,但是我的文件很大并且需要很多处理时间,所以我认为有人指出我正确的方向会更聪明,因为我确信我正在这样做错误的!
感谢您对此的帮助!