海林老師《資料探勘》課程作業系列
要求:自己寫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...