2014-10-19 7 views
3

문자 분류 문제를 해결하기 위해 R에서 해시 피쳐를 구현하려고하지만이를 수행해야하는지 잘 모르겠습니다. 내 코드의 일부는이 게시물을 기반으로합니다 : Hashing function for mapping integers to a given range?.텍스트 분류를 위해 R에서 해싱 기능 (Feature hashing)

내 코드 :

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 

그래서, 나는 기본적으로 digest에 의해 반환 된 MD5 해시의 마지막 5 자리의 16 진수를 사용하여 정수로 문자열을 변환하고 있습니다. 질문 :

1 - 나를 위해이 작업을 수행 할 수있는 패키지가 있습니까? 나는 아무 것도 발견하지 못했다. 2 - 해시 함수로 digest을 사용하는 것이 좋은가요? 그렇지 않다면 무엇을 할 수 있습니까?

추신 : 내가 게시하기 전에 작동하는지 테스트해야하지만 내 파일이 상당히 크고 많은 처리 시간이 필요하므로 누군가가 올바른 방향으로 나를 가리키게하는 것이 더 영리하다고 생각합니다. 내가 잘못하고있어!

감사합니다.

답변

2

나는 이것을 위해 존재하는 CRAN 패키지를 모른다.

그러나 필자는 기능 해싱을 수행하기 위해 패키지를 작성했습니다. 소스 코드는 여기에 있습니다 : https://github.com/wush978/FeatureHashing,하지만 API가 다릅니다.

제 경우에는 data.frame을 패키지의 사용자 정의 된 희소 행렬 CSRMatrix으로 변환하는 데 사용합니다. 또한 도우미 함수를 구현하여 CSRMatrixMatrix::dgCMatrix으로 변환했습니다. 텍스트 분류의 경우 스파 스 매트릭스가 더 적합 할 것입니다. 당신이 그것을 시도하려는 경우

, 여기에 테스트 스크립트를 확인하시기 바랍니다 : 난 단지 우분투를 사용 https://github.com/wush978/FeatureHashing/blob/master/tests/test-conver-to-dgCMatrix.R

주를, 그래서 윈도우 또는 맥 여부에 대한 작동하는지 모르겠어요. 패키지에 대한 질문은 https://github.com/wush978/FeatureHashing/issues으로 문의 해주십시오.

+0

감사합니다. 곧 사용해 보겠습니다. – Fernando

+0

Mac OS X에서 컴파일 문제가 발생했습니다. – Fernando

+0

이제 Mac OS X에서 사용해 볼 수 있습니다. – wush978