簡體   English   中英

隨機森林的混淆矩陣中的誤差

[英]Error in Confusion Matrix with Random Forest

我有一個包含4669個觀測值和15個變量的數據集。

我正在使用隨機森林來預測是否接受特定產品。

使用最新數據,我的輸出變量為“是”,“否”和“”。

我想預測此“”是否為“是”或“否”。

我正在使用以下代碼。

library(randomForest)

outputvar <- c("Yes", "NO", "Yes", "NO", "" , "" )
inputvar1 <- c("M", "M", "F", "F", "M", "F")
inputvar2 <- c("34", "35", "45", "60", "34", "23")
data <- data.frame(cbind(outputvar, inputvar1, inputvar2))
data$outputvar <- factor(data$outputvar, exclude = "")
ind0 <- sample(2, nrow(data), replace = TRUE, prob = c(0.7,0.3))
train0 <- data[ind0==1, ]
test0 <-  data[ind0==2, ]

fit1 <- randomForest(outputvar~., data=train0, na.action = na.exclude)
print(fit1)
plot(fit1)
p1 <- predict(fit1, train0)
fit1$confusion

p2 <- predict(fit1, test0)

t <- table(prediction = p2, actual = test0$outputvar)
t

上面的代碼運行完美。 我提到的數據幀只是一個示例數據幀。 因為,我不應該產生原始數據。

您可能會注意到,我將我的訓練數據和測試數據分為70%和30%。 從我的觀察中,我可以找到1377個觀察的測試數據和3293個觀察的訓練。

當我計算測試數據集的混淆矩陣時,我發現它僅計算了1363個觀測值,還剩下14個觀測值。

此外,我還通過測試數據集可視化了預測矩陣表。 所有這些NA均替換為“是”或“否”。

我的疑問是,為什么我的混淆矩陣在觀察上有差異?

在我的預測矩陣中將那些NA替換為是和否是真實的預測嗎?

我是R的新手,任何信息都將對您有所幫助

您似乎對這里的幾個基本問​​題感到困惑...

首先,缺少變量(此處為outputvar )的訓練數據沒有意義; 如果我們沒有樣本的實際結果,則不能將其用於訓練,我們應該將其從訓練集中刪除(保存一些相當極端的方法,即在將樣本輸入到樣本之前嘗試估算這些樣本)。分類)。

其次,盡管您似乎暗示(有點……)您的2個缺少outputvar的樣本是您要預測的未知樣本,但實際上(即在您的代碼中)您並沒有這樣使用它們:您用於將數據分為訓練和測試子集的sample函數是隨機的,很容易出現以下情況:這兩個樣本中至少有一個(甚至兩個)最終出現在您的訓練集中,當然這不會采用。

第三,即使在某些運行中確實在測試集中獲得了這兩個樣本,您當然也無法計算出任何混淆矩陣,因為這樣做確實需要基礎事實(真實標簽)。

總而言之,沒有真實標簽的數據樣本(如此處的最后2個樣本)對訓練或任何類型的評估(例如混淆矩陣)都沒有用。 它們既不能在訓練集中使用,也不能在測試集中使用。

上面的代碼運行完美

不總是; 由於sample函數的隨機性質,您可能很容易以訓練/測試拆分結束,這使得分類器無法運行:

> source('~/.active-rstudio-document')  # your code verbatim
Error in randomForest.default(m, y, ...) : 
  Need at least two classes to do classification.
> train0
  outputvar inputvar1 inputvar2
1       Yes         M        34
5      <NA>         M        34

嘗試幾次自己重新運行代碼以查看(由於未設置隨機種子,因此每次運行原則上都是不同的-甚至兩次運行之間的訓練和測試集的長度也將不同!)。

當我計算測試數據集的混淆矩陣時,我發現它僅計算了1363個觀測值,還剩下14個觀測值。

給定您作為樣本顯示的內容,此處很好的猜測是您沒有這14個觀察值的真實標簽。 並且由於混淆矩陣來自預測與實際標簽的比較,因此當實際標簽缺失時,不可能進行比較,並且自然地從混淆矩陣中省略了這些樣本。

此外,我還通過測試數據集可視化了預測矩陣表。 所有這些NA均替換為“是”或“否”。

您在這里究竟是什么意思還不清楚。 但是,如果您要在測試集上運行predict ,但predict中沒有得到任何NA,則完全符合預期。 如上文所述,混淆矩陣中的“缺失條目”不是由於缺少預測,而是由於缺少真實標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM