R語言完整決策樹程式碼
#loadData loadData <- function(){ dataSet = matrix(c(1,1,0,"yes",1,1,1,"yes",1,0,1,"no",0,1,0,"no",0,1,1,"no"),byrow = T, nrow =5) colnames(dataSet) = c("a","b","c","labels") return (dataSet) } #computing ShannonEnt 實現夏農熵 calShannonEnt <- function(dataSet){ numEntries = nrow(dataSet) labels = levels(factor(dataSet[,"labels"])) labelCount = NULL labelCount[labels] = rep(0,length(labels)) for(i in 1:numEntries){ if(dataSet[i,"labels"] %in% labels){ temp = dataSet[i,"labels"] labelCount[temp] = labelCount[temp] + 1 } } t = NULL shannonEnt = 0 for(i in 1:length(labelCount)){ t[i]= labelCount[i]*1.0 / numEntries shannonEnt = -t[i]*log2(t[i]) + shannonEnt } # labelCount = as.numeric(labelCount) return (shannonEnt) } #劃分資料集 split DataSet splitDataSet <- function(dataSet,axis,value){ retDataSet = NULL for(i in 1:nrow(dataSet)){ if(dataSet[i,axis] == value){ tempDataSet = dataSet[i,] retDataSet = rbind(retDataSet,tempDataSet) } } rownames(retDataSet) = NULL return (retDataSet) } #choose Best Feature To Split 選擇最好的資料集 chooseBestFeatureToSplita <- function(dataSet){ numFeatures = ncol(dataSet) - 1 baseEntropy = calShannonEnt(dataSet) #最大資訊增益 bestInfoGain = 0.0 bestFeature = -1 for(i in 1: numFeatures){ featureLabels = levels(factor(dataSet[,i])) # featureLabels = as.numeric(featureLabels) newEntropy = 0.0 for( j in 1:length(featureLabels)){ subDataSet = splitDataSet(dataSet,i,featureLabels[j]) prob = length(subDataSet[,1])*1.0/nrow(dataSet) newEntropy = newEntropy + prob*calShannonEnt(subDataSet) } infoGain = baseEntropy - newEntropy if(infoGain > bestInfoGain){ bestInfoGain = infoGain bestFeature = i } } return (bestFeature) } #最終判斷屬於哪一類的條件 majorityCnt <- function(classList){ classCount = NULL count = as.numeric(table(classList)) majorityList = levels(as.factor(classList)) if(length(count) == 1){ return (majorityList[1]) }else{ f = max(count) return (majorityList[which(count == f)][1]) } } #little trick for R Language,judgement whether belongs to one classify trick <- function(classList){ count = as.numeric(table(classList)) if(length(count) == 1){ return (TRUE) }else return (FALSE) } #遞迴建立生成樹 creatTree <- function(dataSet){########temp是所有的需要分割的特徵 decision_tree = list() classList = dataSet[,"labels"] #判斷是否屬於同一類 if(trick(classList)) return (rbind(decision_tree,classList[1])) #是否在矩陣中只剩Label標籤了,若只剩Label標籤,則都分完了 if(ncol(dataSet) == 1){ decision_tree = rbind(decision_tree,majorityCnt(classList)) return (decision_tree) } #資料集中只剩下一個元素了 ########選擇bestFeature作為分割屬性 bestFeature = chooseBestFeatureToSplita(dataSet) ########,接下來就需要把它刪除 labelFeature = colnames(dataSet)[bestFeature] #DIECISION TREE decision_tree = rbind(decision_tree,labelFeature) #選中了那個標籤作為此次分類標籤 t = dataSet[,bestFeature] temp_tree = data.frame() for(j in 1:length(levels(as.factor(t)))){ #這個標籤的兩個屬性,比如“yes”,“no”,所屬的資料集 dataSet = splitDataSet(dataSet,bestFeature,levels(as.factor(t))[j]) dataSet[,-bestFeature] #遞迴呼叫這個函式 temp_tree = creatTree(dataSet) decision_tree = rbind(decision_tree,temp_tree) } return (decision_tree) }
#載入資料
dataSet = loadData()
#建立決策樹
t = creatTree(dataSet)
相關推薦
R語言完整決策樹程式碼
#loadData loadData <- function(){ dataSet = matrix(c(1,1,0,"yes",1,1,1,"yes",1,0,1,"no",0,1,0,"no",0,1,1,"no"),byrow = T, nrow =5)
r語言做決策樹程式碼實現
0.節點和結點的區別:節點為兩線相交,不為終點;而結點為兩線相交為終點,沒有延伸; 1.分支節點:它指向其他的節點,所以是度不為0的節點。 vs 葉子結點:度為0的結點 2.度:結點擁有的子樹數;就是說這個結點下面有幾條分支 3.樹的深度:樹有幾層 4.10折交叉驗證:常用
R語言--統計--決策樹
library(tree) Heart = read.csv("yumath.csv",header=TRUE,na.strings="NA") fit = tree(y1 ~ x1 + x2+ x3+x4+x5, Heart) summary(fit) plot(fit) text(fit)
r語言做決策樹模型(少廢話版本)
#第1步:工作目錄和資料集的準備 setwd("C:/Users/IBM/Desktop/170222分類樹建模/2.23建模")#設定當前的工作目錄,重要! audit2<-read.csv("model2.csv",header=T) str(audit2) #轉
R語言之決策樹和隨機森林
總結決策樹之前先總結一下特徵的生成和選擇,因為決策樹就是一種內嵌型的特徵選擇過程,它的特徵選擇和演算法是融合在一起的,不需要額外的特徵選擇。 一、特徵生成: 特徵生成是指在收集資料之時原始資料就具有的資料特徵,這些資料特徵由收集的資料決定(其實也就是在產品定型時設定的需要收
R語言編寫決策樹(rpart)CART ID3演算法
決策樹(decision tree)是一類常見的機器學習方法。以二分類任務為例,我們希望從給定訓練資料集學得一個模型用以對新示例進行分類,這個把樣本分類的任務,可看做對“當前樣本屬於正常嗎?”這個問題的‘決策’或者‘判定’過程。顧名思義,決策樹是基於樹結構來進行
基於C++語言的決策樹實現
感覺好久都沒有寫過程式了,一直上課沒有時間。最近有點空,然後就寫了下西瓜書中的決策樹的實現。由於本人才疏學淺,採用的實現方式和資料結構可能不合理,沒有考慮程式碼的複雜度和時間複雜度等等,僅寫下自己的實現想法(大神們就打擾了)。該程式是基於C++語言來實現的,演算法就是西瓜書
python實現決策樹程式碼
資料圖片 from sklearn.feature_extraction import DictVectorizer import csv from sklearn import preprocessing from numpy import * import nu
R語言:畫樹圖
原始資料長這樣: “iyear”表示年份;“nkill”表示死亡人數;“region”表示地區;“總計”表示某年份死亡總人數;nkii裡的缺失資料自動按“0”運算。 資料儲存在名為“ljs”的csv格式裡。 應提前下載好treemap包,先介紹treemap函式
ID3決策樹程式碼詳解(weka平臺)
1 ID3演算法流程 理論知識不必多講,下面講解ID3演算法的工作流程,以西瓜書為例: 2 演算法程式碼講解 2.1 前提必知 2.2 演算法流程 3:程式碼 整個演算法實際就 makeTree和distributionForInsta
機器學習:決策樹過擬合與剪枝,決策樹程式碼實現(三)
文章目錄 楔子 變數 方法 資料預處理 剪枝 獲取待剪集: 針對ID3,C4.5的剪枝 損失函式的設計 基於該損失函式的演算法描述 基於該損失函式的程式碼實
機器學習:結點的實現,決策樹程式碼實現(二)
文章目錄 楔子 定義變數: 定義方法 獲得劃分的feature 生成結點 停止條件及其處理 fit() 生成樹剪枝 楔子 前面已經實現了各種資訊量的計算,那麼我們劃分的基本有了,那
機器學習:資訊熵,基尼係數,條件熵,條件基尼係數,資訊增益,資訊增益比,基尼增益,決策樹程式碼實現(一)
文章目錄 初始化,涉及到使用的變數: 資訊熵 定義公式,經驗公式 程式碼: 基尼係數 定義公式,經驗公式 程式碼: 條件熵,條件基尼係數 條件熵定義公式,經驗公式
【機器學習】CART分類決策樹+程式碼實現
1. 基礎知識 CART作為二叉決策樹,既可以分類,也可以迴歸。 分類時:基尼指數最小化。 迴歸時:平方誤差最小化。 資料型別:標值型,連續型。連續型分類時採取“二分法”, 取中間值進行左右子樹的劃分。 2. CART分類樹 特徵A有N個取值,將每個取值作為分界點,將資料
讀書筆記:機器學習實戰(2)——章3的決策樹程式碼和個人理解與註釋
首先是對於決策樹的個人理解: 通過尋找最大資訊增益(或最小資訊熵)的分類特徵,從部分已知類別的資料中提取分類規則的一種分類方法。 資訊熵: 其中,log底數為2,額,好吧,圖片我從百度截的。。 這裡只解釋到它是一種資訊的期望值,深入的請看維基百科
《機器學習實戰》第三章決策樹 程式碼
from math import logimport operatordef calcShannonEnt(dataSet):numEntries=len(dataSet)labelCounts={}for featVec in dataSet:currentLabel=fe
機器學習實戰python版第三章決策樹程式碼理解
今天開始學習第三章決策樹。 前面對決策樹的講解我就不寫了,書上寫的都很清楚,就是根據特徵的不同逐步的對資料進行分類,形狀像一個倒立的樹。決策樹演算法比kNN的演算法複雜度要低,理解起來也有一定難度。 資訊增益 每一組資料都有自己的熵,資料要整齊,熵越低。也就是說屬於同一類的
R語言學習系列(資料探勘之決策樹演算法實現--ID3程式碼篇)
轉載自:http://blog.csdn.net/hawksoft/article/details/7760868 1、輔助類,用於計算過程和結果儲存 [csharp] view plaincopyprint? /// &
決策樹ID3原理及R語言python程式碼實現(西瓜書)
決策樹ID3原理及R語言python程式碼實現(西瓜書) 摘要: 決策樹是機器學習中一種非常常見的分類與迴歸方法,可以認為是if-else結構的規則。分類決策樹是由節點和有向邊組成的樹形結構,節點表示特徵或者屬性, 而邊表示的是屬性值,邊指向的葉節點為對應的分類。在對樣本的分類過程中,由頂向下,根據特徵或屬性
R語言專題,如何使用party包構建決策樹?
r語言下面將在iris數據集上,演示如何使用party包中的函數ctree來建立一棵決策樹。iris數據集中的Sepal.Length、Sepal.Width、Petal.Length和Petal.Width,都將用來預測鳶尾花的種類。party包中的函數ctree用來建立決策樹,函數predict用來對新數