14

Rに因子の行列があり、それを各因子の可能なすべてのレベルのダミー変数0-1の行列に変換したいと考えています。

ただし、この「ダミー」マトリックスは非常に大きく (91690x16593)、非常にまばらです。疎行列に格納する必要があります。そうしないと、12GB の RAM に収まりません。

現在、次のコードを使用していますが、非常にうまく機能し、数秒かかります。

library(Matrix)
X_factors <- data.frame(lapply(my_matrix, as.factor))
#encode factor data in a sparse matrix
X <- sparse.model.matrix(~.-1, data = X_factors)

ただし、R で e1071 パッケージを使用し、最終的にこの行列を libsvm 形式で保存したいwrite.matrix.csr()ので、最初に疎行列をSparseM形式に変換する必要があります。

私はやろうとしました:

library(SparseM)  
X2 <- as.matrix.csr(X)

しかし、すぐに RAM がいっぱいになり、最終的に R がクラッシュします。内部的には、as.matrix.csr最初に疎行列をコンピューターのメモリに収まらない密行列に変換すると思われます。

私の他の代替手段は、SparseM 形式で直接疎行列を作成することです。
試してみas.matrix.csr(X_factors)ましたが、要素のデータフレームを受け入れません。

sparse.model.matrix(~.-1, data = X_factors)SparseM パッケージに相当するものはありますか? ドキュメントを検索しましたが、見つかりませんでした。

4

1 に答える 1