1. 程式人生 > >R教材11.1 分類與決策樹

R教材11.1 分類與決策樹

  1. 分類目的:根據一組預測變數來預測相對應的分類結果,實現對新出單元的準確分類
  2. 有監督學習:基於已知類的資料樣本,將全部資料分為訓練集和驗證集
  3. 用到的包:rpart,rpart.plot,party,randomForest,e1071
  4. 隨機抽樣:
    1. set.seed(1234)
    2. sample(nrow(物件),present*nrow(物件)),結果是抽樣的內建ID
      1. sample(資料物件,抽樣個數)資料物件可以是連續資料或資料分佈
  5. 邏輯迴歸glm(),自動將預測變數中的分類變數編碼為數值型,廣義線性模型
    1. glm(formula,data,family),family指連線函式,資料服從的分佈型別,binomial二項分佈(在每次試驗中只有兩種可能的結果,而且兩種結果發生與否互相對立,並且相互獨立,與其它各次試驗結果無關),模型按數值大小分01,模型再將假設結果為正負
    2. predict(fit,data,type="response")
      1. response按資料正負轉化為概率0~1
      2. class即輸出變數為分類型別
    3. table(class1,class2,dnn=c()),dnn為維度名,class分類型別
    4. step(fit),模型的逐步法,去除多餘的屬性
  6. 決策樹:預設二分樹演算法
    1. 經典樹:不希望有大量的測試條件的劃分,即CART演算法,二分樹,classify and regression tree分類迴歸樹
      1. 步驟
        1. 選定一個最佳預測變數將樣本單元分為兩類,對子類別繼續分類,遞迴
        2. 直到結束條件成立:節點樣本量過少,繼續分類的不純度提升過少等
        3. 葉節點中的多數類即該葉節點的類
      2. 改進:過擬合現象,採用k折交叉驗證法選擇預測誤差最小的樹,剪枝後即為最優樹
      3. R中的rpart()和prune():
        1. rpart(formula,data,method,parm)構造決策樹
          1. *na. action 缺失資料的處理辦法:預設辦法是刪除因變數缺失的觀測而保留自變數缺失的觀測
          2. method劃分樹時,根據樹末端的資料型別選擇相應變數分割方法;程式會根據因變數的型別自動選擇方法, 但一般情況下較好還是指明本引數, 以便讓程式清楚做哪一種樹模型
            1. "anova"連續型
            2. "poisson"計數型(泊松過程)
            3. "class"離散型
            4. "exp"生存分析型
          3. parm=list(split="",...)設定先驗概率、損失矩陣、分類純度的度量方法
            1. split可以是gini(基尼係數)或者information(資訊增益)
          4. rpart()返回的cptable值中包括不同大小的樹對應的預測誤差
            1. cp複雜度引數,懲罰過大的樹
            2. nsplit劃分個數,n個分支的樹有n+1個葉節點
            3. rel error訓練集中的樹的誤差(應該是對單個樹,可能是該節點數下的最優樹)
            4. xerror交叉驗證誤差,k折總誤差
            5. xstd交叉驗證誤差的標準差
        2. plotcp(rpart)
          1. size of tree樹大小
          2. y軸交叉驗證誤差
          3. x軸複雜度引數
          4. 最優樹:最小交叉驗證誤差的±1個標準差範圍內的樹,規模最小的樹即最優;影象的虛線即基於一個標準差準則得到的上限
        3. prune(rpart,cp=)決策樹剪枝,將樹的大小控制在理想範圍內,最優樹對應的cp
        4. rpart.plot::prp(fit,type,extra,fallen.leaves)
          1. type分割標籤顯示型別
          2. extra每個節點的樣本佔比和型別佔比
          3. fallen.leaves=T垂直作圖|斜線連線
        5. predict(fit,data,type="class")對應rpart的method
    2. 條件推斷樹:類似於決策樹,但變數和分割的選取是基於顯著性檢驗,而不是不純性度量
      1. 演算法:
        1. 對輸出變數和每個預測變數間的關係計算p值(顯著性檢驗)
        2. 選擇p_value最小的變數
        3. 嘗試所有的二元分割,選擇p_value最小的分割
        4. 重複分割直到所有分割都不顯著或達到最小節點為止
      2. 實現
        1. party::ctree(formula,data)
        2. plot(fit)
        3. predict(fit,data,type)type選擇response,演算法將結果變數當做二項分佈
        4. 條件推斷樹的剪枝是不必要的,生成過程中就有對不顯著變數的去除