12

多くの(たとえば100k)機能を使用してRで大規模な回帰(線形/ロジスティック)を実行したいと思います。各例は機能空間で比較的まばらです。たとえば、例ごとに最大1,000の非ゼロ機能があります。

SparseMパッケージslmでこれを行う必要があるようですが、このsparseMatrix形式から使いやすい形式に変換するのに問題がslmあります。

yラベルとsparseMatrix機能の数値ベクトルX\in{0,1}があります。やってみると

model <- slm(y ~ X)

次のエラーが発生します。

Error in model.frame.default(formula = y ~ X) : 
invalid type (S4) for variable 'X'

おそらく、の代わりにオブジェクトslmが必要なためです。SparseMsparseMatrix

SparseMa)オブジェクトに直接データを入力する、またはb)asparseMatrixをオブジェクトに変換する簡単な方法はありSparseMますか?それとも、これを行うためのより良い/より簡単な方法がありますか?

X(とを使用して線形回帰のソリューションを明示的にコーディングできると思いますが、機能yしていると便利ですslm。)

4

4 に答える 4

16

わかりませんSparseMが、MatrixModelsパッケージにはエクスポートされていないlm.fit.sparse機能があり、使用できます。を参照してください?MatrixModels:::lm.fit.sparse。次に例を示します。

データを作成します。

y <- rnorm(30)
x <- factor(sample(letters, 30, replace=TRUE))
X <- as(x, "sparseMatrix")
class(X)
# [1] "dgCMatrix"
# attr(,"package")
# [1] "Matrix"
dim(X)
# [1] 18 30

回帰を実行します。

MatrixModels:::lm.fit.sparse(t(X), y)
#  [1] -0.17499968 -0.89293312 -0.43585172  0.17233007 -0.11899582  0.56610302
#  [7]  1.19654666 -1.66783581 -0.28511569 -0.11859264 -0.04037503  0.04826549
# [13] -0.06039113 -0.46127034 -1.22106064 -0.48729092 -0.28524498  1.81681527

比較のために:

lm(y~x-1)

# Call:
# lm(formula = y ~ x - 1)
# 
# Coefficients:
#       xa        xb        xd        xe        xf        xg        xh        xj  
# -0.17500  -0.89293  -0.43585   0.17233  -0.11900   0.56610   1.19655  -1.66784  
#       xm        xq        xr        xt        xu        xv        xw        xx  
# -0.28512  -0.11859  -0.04038   0.04827  -0.06039  -0.46127  -1.22106  -0.48729  
#       xy        xz  
# -0.28524   1.81682  
于 2010-07-03T05:18:36.553 に答える
16

遅れた答え:glmnetスパース行列と要求された両方の回帰モデルもサポートします。Matrixこれは、パッケージによって生成されたスパース行列を使用できます。このパッケージを介して正規化されたモデルを調べることをお勧めします。スパースデータには、一部の変数の非常にスパースなサポートが含まれることが多いため、L1正則化は、これらをモデルからノックアウトするのに役立ちます。多くの場合、サポートが非常に低い変数の非常に偽のパラメーター推定値を取得するよりも安全です。

于 2011-11-01T21:14:07.673 に答える
8

glmnet良い選択です。他のオプションの中でも、線形、ロジスティック、および多項回帰のL1、L2正則化をサポートします。

唯一の詳細は、数式インターフェイスがないことです。そのため、モデル行列を作成する必要があります。しかし、ここに利益があります。

疑似例を次に示します。

library(glmnet)
library(doMC)
registerDoMC(cores=4)

y_train <- class
x_train <- sparse.model.matrix(~ . -1, data=x_train)

# For example for logistic regression using L1 norm (lasso) 
cv.fit <- cv.glmnet(x=x_train, y=y_train, family='binomial', alpha=1, 
                    type.logistic="modified.Newton", type.measure = "auc",
                    nfolds=5, parallel=TRUE)

plot(cv.fit)
于 2014-12-14T15:00:33.707 に答える
6

こちらをご覧になると、マイレージも得られるかもしれません。

于 2010-07-03T20:37:35.210 に答える