1

MLSeqR バージョン 3.1.2 の Ubuntu でbioconductor パッケージを使用しています。パッケージで提供されている例を実行してみましたが、問題なく動作します。ただし、関数のbagsvmメソッドを使用したいので、 で、コードを次のように変更しましたclassifychunk 14

svm <- classify(data = data.trainS4, method = "svm", normalize = "deseq",
               deseqTransform = "vst", cv = 5, rpt = 3, ref = "T") 

 bagsvm <- classify(data = data.trainS4, method = "bagsvm", normalize = "deseq",
               deseqTransform = "vst", cv = 5, rpt = 3, ref = "T")

エラーが発生しました:

Something is wrong; all the Accuracy metric values are missing:
    Accuracy       Kappa   
 Min.   : NA   Min.   : NA 
 1st Qu.: NA   1st Qu.: NA 
 Median : NA   Median : NA 
 Mean   :NaN   Mean   :NaN 
 3rd Qu.: NA   3rd Qu.: NA 
 Max.   : NA   Max.   : NA 
 NA's   :1     NA's   :1   
Error in train.default(counts, conditions, method = "bag", B = B, bagControl = bagControl(fit = svmBag$fit,  :
  Stopping
In addition: There were 17 warnings (use warnings() to see them)

警告は次のとおりです。

 Warning messages:
1: executing %dopar% sequentially: no parallel backend registered
2: In eval(expr, envir, enclos) :
  model fit failed for Fold1.Rep1: vars=150 Error in fitter(btSamples[[iter]], x = x, y = y, ctrl = bagControl, v = vars,  :
  task 1 failed - "could not find function "lev""

警告 2 が 14 回繰り返され、続いて次のようになりました。

17: In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,  ... :
  There were missing values in resampled performance measures.

traceback()生産された

4: stop(「停止中」)
3: train.default(counts, condition, method = "bag", B = B, bagControl = bagControl(fit = svmBag$fit,
       予測 = svmBag$pred、集約 = svmBag$ 集約)、trControl = ctrl、
       ...)
2: train(counts, condition, method = "bag", B = B, bagControl = bagControl(fit = svmBag$fit,
       予測 = svmBag$pred、集約 = svmBag$ 集約)、trControl = ctrl、
       ...)
1: 分類 (データ = data.trainS4、メソッド = "bagsvm"、正規化 = "deseq"、
       deseqTransform = "vst"、cv = 5、rpt = 3、ref = "T")

問題はkernlab、MLSeq コードが使用していると思われるライブラリが読み込まれなかったことにあるのではないかと考えたので、試してみました。

library(kernlab)
bagsvm <- classify(data = data.trainS4, method = "bagsvm", normalize = "deseq",
               deseqTransform = "vst", cv = 5, rpt = 3, ref = "T")

同じエラーが発生しましたが、警告は次のように変更されました。

警告メッセージ:
    1: eval(expr、envir、enclos) で:
      Fold1.Rep1 のモデル フィットに失敗しました: vars=150 フィッターのエラー(btSamples[[iter]], x = x, y = y, ctrl = bagControl, v = vars, :
      タスク 1 が失敗しました - 「クラス "c('ksvm', 'vm')" のオブジェクトに適用される 'predict' に適用可能なメソッドはありません」

15回繰り返し、その後

16: In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,  ... :
  There were missing values in resampled performance measures.

関数をMLSeq次のように実行しようとしたため、この問題は固有のものではないと思いますtrain

ctrl <- trainControl(method = "repeatedcv", number = 5, 
    repeats = 3)
train <- train(counts, conditions, method = "bag", B = 100, 
           bagControl = bagControl(fit = svmBag$fit, predict = svmBag$pred, 
                                   aggregate = svmBag$aggregate), trControl = ctrl)

ここcountsで、 は RNASeq データを含むデータ フレームでありconditions、クラスの要因であり、まったく同じ結果が得られました。どんな助けでも大歓迎です。

4

2 に答える 2

1

私はあなたのすべてのステップを再現しようとしていないことを告白します. ただし、実行しようとしているのは、機能する「SVM」から「SVM のバギング アンサンブル」に移行することだけです。それが何を意味するのかを完全に知っているかどうかはわかりませんが、簡単に言えば次のとおりです。

すべての (トレーニング) データを使用して 1 つのモデルを作成するだけでなく、次のことを行います。

  • いくつかのモデルを作る
  • 各モデルは、ランダムに選択されたトレーニングデータのサブセットを使用しています ( 「バギング」 ) 。
  • そして、これらの各モデルの品質は、トレーニングデータの未使用部分でどのように機能するかを確認することで検証されます。

それが事実であり、それがあなたが行った唯一の変更であるため、次のように思われます。

  • データが少なすぎるかNA、空のエントリが多すぎるため、バギング内のこれらのミニ SVM モデルのいずれかを完了することができません。

ミニ SVM モデルは、デフォルトで 100 サンプルのセットに分割されているようです。( B = 100classify 内のデフォルト オプションを参照してください。) たとえば、100 個の観測しかないこれらのサブモデルの 1 つが完全に空白またはNA機能を持つ可能性がある場合、バギング モデルは失敗します。


修正方法は?

  • Bまず、値をかなり大きい値、たとえば 1000 に上げようとします。同様の理由で、任意の機能の欠損値の数を次のように調べます。table(is.na(feature_oi))

  • 次に、モデルが上記の修正のいずれかで機能する場合、(a) 欠損値が何らかの方法で回復できるかどうかを確認するか、(b) いくつかの欠損値のある観測は品質が非常に低いため、観測を完全に削除することを検討することをお勧めします。

  • もちろん、モデルがこれらの修正で機能する場合の別の解決策は、それらの修正でモデルを使用することです。1000Bか何かを大きくします。これが本番環境で実行しようとしていたものである場合は、時々クラッシュする可能性のあるガタガタしたものを構築していることに注意してください。

  • 最後に、元の修正でモデルが機能しなかった場合、問題の原因はわかりません。bagsvm実装自体にバグがある可能性があります。願わくば、図書館に詳しい人がその面でもっとアドバイスをくれることを願っています.

于 2015-08-06T00:55:44.620 に答える
1

私は自分の問題をデバッグしようとしていましたが、うっかりして解決策を見つけたようです。svmBag$pred問題は予測関数にあるようだったので、関数を変数として保存して、predfunctどこが機能していないかを確認しました

predfunct<-function (object, x)
{
 if (is.character(lev(object))) {
    out <- predict(object, as.matrix(x), type = "probabilities")
    colnames(out) <- lev(object)
    rownames(out) <- NULL
  }
  else out <- predict(object, as.matrix(x))[, 1]
  out
}

そして呼び出す

train <- train(counts, conditions, method = "bag", B = 100, 
       bagControl = bagControl(fit = svmBag$fit, predict = predfunct, 
                               aggregate = svmBag$aggregate), trControl = ctrl)

問題の説明の最後のコード ブロックのようにpredfunctsvmBag$pred. どういうわけかこれで問題が解決し、すべてが正常に動作します。誰かがなぜこれが機能したのかを理解し、できればそのようなクルージュではない解決策を見つけることができれば、私はあなたの応答を答えにします.

于 2015-08-10T17:43:04.043 に答える