2015-09-07 61 views
2

有沒有辦法在隨機森林中引入「未知」類別或進行二元分類?R中隨機森林中的二元分類或未知類別

我想將數據輸入到一個隨機森林中,如果選票的百分比超過70%,我只想對其進行分類。我共有6個類別,所以我最初做的是創建一個隨機森林,並且截止值自動默認爲c(16.6, 16.6, 16.6, 16.6, 16.6, 16.6)。這是相當低的,所以我想要:

  • 爲每個類別(總共6)使用二進制分類(或者它屬於該類別或它不 - 它的未知),然後將未知數據饋入下一個樹中,依此類推。
  • 或者,我希望能夠堅持一個隨機森林,但是要引入新的截止值,這允許我指定「獲勝」類必須擁有大於70%的選票比例,並且任何未標記爲「未知」的數據。

第二種方式目前提出了一個問題,因爲切斷值需要和爲1,第一個建議是,我似乎無法找出如何做二元分類中R.

問題無論如何,其中任何一個都可以克服,並且引入一個「未知」類別?謝謝

回答

4

我會建議你保持簡單,不要創建多個相互關聯的二進制射頻模型。您可以採用另一個聚合規則,而不是「多數投票」。您可以從每個預測樣本中提取投票分佈,並從這裏實現例如-Technically 70%的少數服從多數原則

enter image description here

@「作爲切斷值需要總結爲1第二種方式目前提出了一個問題」,切斷值不需要總和爲1。在隨機森林中,類別預測除以各自的類別截止點,並且最大數量是多數贏家。

library(randomForest) 
library(plotrix) 
set.seed(1234) 
data(iris) 
#iris is too easy and therefore applying jitter 
iris[1:4] = lapply(iris[1:4],jitter,amount=2) 
plot(iris,col=iris$Species) 
test = sample(150,25) #reserve a test set 
rf = randomForest(Species~.,data=iris[-test,]) 

#predict test, use type=prob to extract vote fractions 
preds = predict(rf,iris[test,],type="prob") 

#make 70% rule 
class.winner = apply(preds,1,function(aPred) c(which(aPred>=.7),NA)[1]) 

#plot prediction in probability simplex 
triax.plot(preds,col.symbols=iris$Species[test],main="col is true class, o is all pred, x is >=70% preds") 
triax.points(preds,col.symbols=unlist(class.winner),pch=4)