2016-08-16 3 views
-2

quantedaで作成された10025x1417 TFIDF dfm行列があります。 (実際のクラスはdfm-matrixのサブクラスであるdfmSparseです)。 as.data.frameとas.h2oでh2oに変換すると、1002 x1417が間違って追加され、最初の不要なNaNが追加されます。 パフォーマンス上の理由から、完全な高密度マトリックスで一時的なdfを作成したくありません。次のようにquanteda dfmSparse matrix-> data.frame-> h2oを変換すると、不要なNaNの最初の行が追加される

コードは(私は小さなおもちゃのデータに再現することができませんでした)です:私は完全な密行列で一時的なDFを作成したくないパフォーマンス上の理由から

library(quanteda) 
mat <- quanteda::weight(theDfm, type="tfidf") 

# Convert to df then h2o, correctly gives 10025x1417 matrix 
mat_df <- as.data.frame(mat) # this will dispatch quanteda::as.data.frame for dfmSparse 
mat_h2o <- as.h2o(mat_df) 

# Convert in one go, get 10026x1417, get unwanted extra first row of NaNs 
bad_h2o <- as.h2o(as.data.frame(mat)) 
dim(bad_h2o) 
[1] 10026 1417 

# Which as.data.frame method this uses 
> showMethods(quanteda::as.data.frame) 
Function: as.data.frame (package base) 
x="ANY" 
x="dfm" 
x="dfmSparse" 
    (inherited from: x="dfm") 
x="matrix" 
    (inherited from: x="ANY") 

######################################### 
# Ken Benoit requested sessionInfo() 

R version 3.2.3 (2015-12-10) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows >= 8 x64 (build 9200) 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] h2o_3.8.3.3   statmod_1.4.22  quanteda_0.9.8  RevoUtilsMath_3.2.3 

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.2  lattice_0.20-33 SnowballC_0.5.1 bitops_1.0-6  chron_2.3-47  grid_3.2.3  R6_2.1.1   
[8] jsonlite_0.9.19 magrittr_1.5  httr_1.0.0  stringi_1.0-1 data.table_1.9.6 ca_0.58   Matrix_1.2-3  
[15] tools_3.2.3  stringr_1.0.0 RCurl_1.95-4.7 parallel_3.2.3 
+1

'sessionInfo()'?そして、 'weight()'関数を適用する前にdata.frameへの変換が機能しますか?私はそれを再現できるようにデータへのリンクで問題を提出したい場合は、私はかなり迅速に修正する必要があります。 –

+0

@KenBenoit sessionInfoが追加されました。また、 'weight()'を適用する前に、NaNの不要な余分な行を与えます。つまり、生のdfmだけに適用されます。私は再現可能なデータを作成することができませんでしたが、重要なデータを試してもそれを見てください。 – smci

+0

私は試しましたが、再現できませんでした。 mat_dfは私にとって大丈夫なので、おそらく 'as.h20()'にエラーがありますか? –

答えて

3

。実際に

quantedaはそれをdata.frameを変換する前に、密にあなたのスパース行列を変換します:https://github.com/kbenoit/quanteda/blob/master/R/dfm-classes.R#L513-L516

あなたは、H2OのフォーマットをなSVMLightとimportFileを使用するように変換するためのスパース行列をインポートする必要がある場合。このトピックを参照してください:How to use H2o on feature hashed matrix in R

+1

これは間違いありませんが、** quanteda **の動作ではありませんが、data.frameが密であるという事実です。これは密なオブジェクトへの強制を避けるための素晴らしい解決策です。 –

+0

私はあなたに同意する、それは密度の高いdata.frameに疎な行列を変換する意味がありません。ちょうど指された。トリプレット形式の疎行列をdata.frameに変換できますが、これは別の話です。 –

関連する問題