2

私は R で predict() を読んでいて、混乱しています:

ランダム サンプリングを使用してトレーニング データとテスト データを作成したデータセット Spam があります。trainSpam (システムをトレーニングするためのトレーニング データ セット) を使用しました。テスト データセット (testSpam) でテストすることにより、モデルがどれほど優れているかを確認したいと考えています。

predictionModel = glm(numType ~ charDollar, family = "binomial", data = trainSpam)

predictionTest = predict(predictionModel, testSpam) 
predictedSpam = rep("nonspam", dim(testSpam)[1]) 
predictedSpam[predictionModel$fitted > 0.5] = "spam" #Here is my problem
table(predictedSpam, testSpam$type)

私たちが言う行で:

predictedSpam[predictionModel$fitted > 0.5] = "spam" 

predictionModel$fittedテスト データでスパムを予測する方法。トレーニング データからの predictModel$fitted を使用しているようです。次に、テスト データのスパムと比較します。誰か説明できますか?

これが私が理解したものです。行で:

predictModel = glm(numType ~ charDollar、家族 = 「二項」、データ = trainSpam)

trainSpam データを使用してモデルを作成します。

次の行で:

predictTest = predict(predictionModel, testSpam)

テストデータ以外は同じモデルを使用して、predictionTest を作成します。

次の行で:

predictSpam = rep("非スパム", dim(testSpam)[1])

すべての値が「非スパム」のベクターを作成しました

次の行で:

predictSpam[predictionModel$fitted > 0.5] = "スパム"

どの行をスパムとして分類するかを決定するために、トレーニング データに適合させたpredictionModel$fittedを使用しています。スパムを識別するためにpredictionTestのようなものを使うべきではありませんか?

それがどうあるべきかについての私の考えは次のとおりです。

> predictionModel = glm(numType ~ charDollar, family = "binomial", data = trainSpam)

> predictionTest = predict(predictionModel, testSpam,type="response")
> predictedSpam = rep("nonspam", dim(testSpam)[1])
> predictedSpam[predictionTest > 0.5] = "spam"
> table(predictedSpam, testSpam$type)
4

1 に答える 1

1

それ以外の場合、デフォルトは線形予測子になるため、呼び出しtype="response"が必要だと思います。predict

?predict.glm    # different than ?predict

(もちろん、これは、0.5 を超える確率でテスト セット内のケースを見つけるという、明示されていない目標を正しく直感している場合です。さらに、トレーニング データに基づいて実際に予測を取得している場合は、テスト データフレームの形式が正しくないことを意味します。また、質問を編集して両方からの出力を含める必要があるstr(trainSpam)ため、 の引数str(testSpam)を適切に作成する方法を示すことができます。)datapredict

更新後: テスト セットとトレーニング セットの両方にあるように見えるcharDollarため、トレーニング セットから予測を取得するべきではありませんpredictionTest。testSpam[ predict(fit, data=testSpam, type="response) > .5 ] で > 50% のスパム ケースが予測されるはずです。

を作成するためにどのコードが使用されたpredictionTestのかわかりませんpredictedSpam。これは私が成功すると思ったものです:

predictedSpam = predict(predictionModel, testSpam) 
spam <- predictedSpam[ predictedSpam$fitted > 0.5 ] 
于 2013-04-18T18:38:26.147 に答える