3

テキスト分類の問題を解決するために R に機能ハッシュを実装しようとしていますが、本来の方法でそれを行っているかどうかはわかりません。私のコードの一部は、この投稿に基づいています:整数を特定の範囲にマッピングするためのハッシュ関数? .

私のコード:

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 桁の 16 進数を使用して、文字列を整数に変換していますdigest。質問:

1 - これを実行できるパッケージはありますか? 私は何も見つけていません。digest2 -ハッシュ関数として使用するのは良い考えですか? そうでない場合、どうすればよいですか?

PS: 投稿する前に動作するかどうかをテストする必要がありますが、私のファイルは非常に大きく、多くの処理時間がかかるため、誰かが私を正しい方向に向ける方が賢いと思います。違う!

これについて助けてくれてありがとう!

4

1 に答える 1

2

このための既存の CRAN パッケージは知りません。

ただし、機能ハッシュを行うためのパッケージを自分で作成しました。ソース コードはhttps://github.com/wush978/FeatureHashingにありますが、API は異なります。

私の場合、これを使用して data.frame をCSRMatrix、パッケージ内のカスタマイズされたスパース行列である に変換します。を に変換するヘルパー関数も実装しCSRMatrixましたMatrix::dgCMatrix。テキストの分類には、疎行列の方が適していると思います。

試してみたい場合は、こちらのテスト スクリプトを確認してください: https://github.com/wush978/FeatureHashing/blob/master/tests/test-conver-to-dgCMatrix.R

Ubuntuでのみ使用したため、WindowsまたはMacで機能するかどうかはわかりません。https://github.com/wush978/FeatureHashing/issuesでパッケージに関する質問をお気軽にどうぞ。

于 2014-10-19T04:18:13.090 に答える