的假象我有70行數據和特點,34列的製表符分隔的文件,其中第60行是這樣的:LDA分類:處於測試數據零預測能力設置實或錯誤
groups x1 x2 x3 x4 x5 (etc, up to x34)
0 0.1 0.5 0.5 0.4 0.2
1 0.2 0.3 0.8 0.4 0.1
0 0.4 0.7 0.6 0.2 0.1
1 0.4 0.4 0.7 0.1 0.4
而最後10行是這樣的:
groups x1 x2 x3 x4 x5
? 0.2 0.1 0.5 0.4 0.2
? 0.2 0.1 0.8 0.4 0.1
? 0.2 0.2 0.6 0.2 0.1
? 0.2 0.3 0.7 0.1 0.4
這些組是二進制(即每一行任一屬於組0或1組)。目標是使用前60行作爲我的訓練數據集,最後10行作爲我的測試數據集;最後10行分成組0或1
我寫了這個,下面所描述的方法here:
data <-read.table("data_challenge_test.tab",header=TRUE)
train <-sample(1:60)
data.train <-data[train,]
data.test <-data[-train,]
odd.lda <-lda(groups ~ x1+x2+x3+x4+x5, data.train)
pred.train <- predict(odd.lda,data.train)$class
pred.test <- predict(odd.lda,data.test)$class
training_prediction = mean(pred.train == data.train$groups)
testing_prediction = mean(pred.test == data.test$groups)
的「odd.lda」行之後,我得到警告:
Warning message:
In lda.default(x, grouping, ...) : group ? is empty
問題是我的測試訓練數據集不應該有組「?」 (因爲我的訓練數據集是前60行,都是0或1)。
然後,我training_prediction值是0.9,但我test_prediction值爲0
我明白,我也可以考慮分類的其他方法(我還期待着爲GLM),但我想,以確保從test_prediction數據集中獲得的0預測能力是真實的,而不是一個錯誤的假象(即我上面提到的組號問題)。
我是否正確地進行了分析,或者上述代碼中是否存在導致上述警告的錯誤,以及測試數據集的0預測能力。
編輯1: 由於在評論的討論中,爲了計算該模型的預測能力,我複製的方法描述here,其隨機地選擇50 60的行,估計訓練參數,然後進行分類的剩下10個樣本。這被重複100次。
n = 60
nt = 50
neval = n-nt
rep=100
errlin = dim(rep)
set.seed(123456789)
data <-read.table("data_challenge_test.tab",header=TRUE)
data <-data[1:60,]
for (k in 1:rep) {
train = sample(1:n,nt)
data.train <-data[train,]
data.test <-data[-train,]
m1 = lda(groups ~ x1+x2+x3+x4+x5,data.train)
tablin = table(data$groups[-train],predict(m1,data.test)$class)
errlin[k] = (neval-sum(diag(tablin)))/neval
}
merrlin=mean(errlin)
merrlin
就我而言,merrlin是0.454;這意味着有45%的錯誤分類。虹膜數據集(參見下面的註釋)
精確代碼:
n = 120
nt = 90
neval = n-nt
rep=100
errlin = dim(rep)
set.seed(123456789)
data <-iris
for (k in 1:rep) {
train = sample(1:n,nt)
data.train <-data[train,]
data.test <-data[-train,]
m1 = lda(Species ~ .,data.train)
tablin = table(data$Species[-train],predict(m1,data.test)$class)
errlin[k] = (neval-sum(diag(tablin)))/neval
}
merrlin=mean(errlin)
merrlin
你在你的'lda'調用中有'groups',但你的變量名中有'group'。 –
嘗試用'NA'替換問號。就目前而言,他們可能會迫使第一列成爲因素,這可能不是你想要的。特別是,包含'?'的因子級別將被傳遞給'lda',即使它們不出現在前60行中。 –
謝謝。該組/團體是一個錯字。我用NAs替換了問號。當我重新運行代碼時,沒有錯誤,但仍然是0.9訓練預測和0.0測試預測。我想這意味着在這種情況下,這個算法不適合我正在尋找的數據集的最後10行的二進制分類。謝謝。 –