R 資料探勘 決策樹ID3(四)

2021-09-19 20:49:28 字數 3279 閱讀 2244

海林老師《資料探勘》課程作業系列

要求:自己寫r/python**、函式實現一系列演算法

其他參見:

r-資料探勘-求混合型資料物件距離(一)

r-資料探勘-主成分分析pca(二)

r-資料探勘-關聯規則(三)

r-資料探勘-決策樹id3(四)

r-資料探勘-貝葉斯分類(五)

r-資料探勘-聚類kmeans(六)

r-資料探勘-聚類dbscan(七)

分析

演算法/函式

測試資料

測試**

測試結果(截圖)

分析:這個很難!!(難在遞迴生成樹)#實現 輸入訓練集  輸出id3方式得到的決策樹(列表)

#輸入:訓練集資料框(要求最後一列為類別)

#輸出:顯示劃分屬性

#返回:列表,按分類屬性的可取值分的,

######[[1]]表示為某個屬性時,

######列表最裡層[[2]]表示此路徑的最終類別

(1)生成決策樹:

id3_jcs

return(result)

} #print(info(train))

#求某屬性分類,得到的總資訊熵

##col_fen:要對該列屬性進行分類

info_col

return(result)

} #x=info_col(train,1)

#x=info_col(train,"age")

#根據屬性各取值,切割資料框

###屬性為列名

###返回列表

split_data

return(data_fens)

} #xx=split_data(train,1)

#xx[[1]][[1]]#獲取第乙個分類依據

#xx[[1]][[2]]#獲取第乙個分類之後的資料框,不含劃分屬性

#xx[[2]][[1]]

#test=xx[[2]][[2]]

#a1=best(test)

#test2=split_data(test,a1)

#找到最好的劃分屬性

###返回所在列數

best

}index=which(rank(-gains,ties.method="first")==1)#得到劃分屬性的列數

return(index)

} #best(train)

#如果只有一列,而結果卻多個的話,採用多數表決

#找出出現次數最多的分類名稱

###傳入資料框(一列,是最後一列,為分類y n 等)

majoritycnt

#根據列數和資料框,輸出列名

col_name

#############################遞迴建立樹

createtree

if(length(as.numeric(table(data[,ncol(data)])))==1)

if(nrow(data)==0)

#根據傳入資料求最佳分類屬性的位置

bestfeature=best(data)

#輸出劃分屬性的名稱

print(paste0("********我是劃分屬性:",col_name(bestfeature,data),"************"))

#根據這個位置,對資料進行分類,得到分類之後的列表

data_fens=split_data(data,bestfeature)

#遍歷分類後的資料框,對每個框進行從上到下相同的操作

data_fen_lists=null

for (i in 1:length(data_fens))

return(data_fen_lists)

} return(createtree(data))

}

(2)實現分類 

classify

}}

return(xh(tree))

}

測試資料:

書上的資料

訓練資料選前13行

最後一行用於測試

age=c("youth","youth","youth","youth","youth","middle_aged","middle_aged","middle_aged","middle_aged","senior","senior","senior","senior","senior")

income=c("high","high","medium","low","medium","high","low","medium","high","medium","low","low","medium","medium")

student=c("no","no","no","yes","yes","no","yes","no","yes","no","yes","yes","yes","no")

credit_rating=c("fair","excellent","fair","fair","excellent","fair","excellent","excellent","fair","fair","fair","excellent","fair","excellent")

class=c("no","no","no","yes","yes","yes","yes","yes","yes","yes","yes","no","yes","no")

data

train

test

#訓練集測試  結果存在xx中

xx=id3_jcs(train)

#測試集一條記錄

test

mmm=classify(xx,test)

mmm#若測試集多條記錄

資料探勘演算法 決策樹ID3演算法

id3演算法是一種分類 演算法,其核心思想是 資訊熵 id3演算法通過計算每個屬性的資訊增益,認為資訊增益高的是好屬性,每次劃分選取資訊增益最高的屬性為劃分標準,重複這個過程,直至生成乙個能完美分類訓練樣例的決策樹。該決策樹方法先根據訓練集資料形成決策樹,如果該樹不能對所有物件給出正確地分類那麼選擇...

決策樹 ID3構建決策樹

coding utf 8 from math import log import operator 建立訓練資料集 defcreatedataset dataset 1,1,yes 1,1,yes 1,0,no 0,1,no 0,1,no 資料集的最後乙個元素作為該資料的標籤,是否是魚 labels...

決策樹之 ID3

id3 是一種用來構建決策樹的演算法,它根據資訊增益來進行屬性選擇。關於決策樹,請參見 此處主要介紹 id3 演算法如何利用資訊增益選擇屬性。資訊熵,簡稱 熵 假定訓練集中目標屬性為 c c的取值為 c1 c2,cm 每個取值佔的比例為p1 p2,pm 則資訊熵的定義為 en trop y s en...