決策樹演算法實現 最佳特徵的選擇

2021-09-25 14:52:08 字數 2427 閱讀 2795

本文不對相關數學原理進行介紹,如欠缺相關數學基礎,可參考李航的《統計學習方法》以及周志華的《機器學習》

並且匯入相關的數學包

第0列中數字0,1,2分別表示青、中、老年;

第1列中數字0,1分別表示為無工作、有工作

第2列中數字0,1分別表示為無、有自己的房子

第3列中數字0,1,2分別表示為信貸情況為一般、好。非常好

def createdatset():

dataset = [[0,0,0,0,'no'],

[0,0,0,1,'no'],

[0,1,0,1,'yes'],

[0,1,1,0,'yes'],

[0,0,0,0,'no'],

[1,0,0,0,'no'],

[1,0,0,1,'no'],

[1,1,1,1,'yes'],

[1,0,1,2,'yes'],

[1,0,1,2,'yes'],

[2,0,1,2,'yes'],

[2,0,1,1,'yes'],

[2,1,0,1,'yes'],

[2,1,0,2,'yes'],

[2,0,0,0,'no']

]labels = ['no su***cing','flippers']

return dataset,labels

2.計算shannon entropy

def calcsentropy(dataset):

len_dataset = len(dataset)

labels = {}

for featvec in dataset:

currentlabel = featvec[-1]

if currentlabel not in labels.keys():

#key對應的value值賦值

labels[currentlabel] = 0

labels[currentlabel] += 1

entropy = 0.0

for key in labels:

#print(labels)

prob = float(labels[key]) / len_dataset

#print('prob',prob)

#計算熵值

entropy -= prob * log(prob,2)

return entropy

3. 對資料集進行分割

def split(dataset, axis, value):

returndataset =

#分離出相關的資料以便之後進行計算

for feat in dataset:

if feat[axis] == value:

reducefeat =

reducefeat.extend(feat[:])

#print(reducefeat)

return returndataset

4. 選擇最佳的特徵

def choosebestfeature(dataset):

#特徵數

numfeatures = len(dataset[0]) - 1

#定義基本的熵值

baseentropy = calcsentropy(dataset)

bestinfogain = 0.0

bestfeature = -1

for i in range(numfeatures):

featlist = [example[i] for example in dataset]

#去除特徵中重複的取值

uniquevals = set(featlist)

#print(uniquevals)

newentropy = 0.0

for value in uniquevals:

subdataset = split(dataset,i,value)

#print(subdataset)

#計算某個特徵中各取值總量 佔總特徵數的比例

prob = len(subdataset)/float(len(dataset))

#計算經驗條件熵h(d|a)

newentropy += prob * calcsentropy(subdataset)

infogain = baseentropy - newentropy

if(infogain > bestinfogain):

bestinfogain = infogain

bestfeature = i

return bestfeature

5.最後再通過方法對其進行呼叫即可

6.結論

此資料集的最佳特徵為2,即是否有自己的房子

決策樹 特徵選擇

決策樹的特徵選擇標準有兩種 資訊增益,資訊增益比 0.熵指不穩定程度。熵越大,不穩定程度越高,則越容易 決策樹中也指某結點內含資訊量較多,分類能力較差.計算公式 其中,pi為隨機變數x在樣本空間的分布,即第i個型別出現的概率。為i到n求和。n為特徵取值種類數量.ps 為何使用這樣的乙個函式?xlog...

決策樹之特徵選擇

一般而言,隨著劃分過程不斷進行,我們希望決策樹的分支結點所包含的樣本盡可能屬於同一類別,即結點的 純度 purity 越來越高。假設當前樣本集合 d 中第 k 類樣本所佔的比例為 p k k 1,2,mathcal y 離散屬性 a 有 v 個可能的取值 若使用 a 來對樣本集 d 進行劃分,則會產...

使用決策樹進行特徵選擇

使用決策樹進行特徵選擇 決策樹也是常用的特徵選取方法。使用決策樹集合 如隨機森林等 也可以計算每個特徵的相對重要性。這些重要性能夠輔助進行特徵選擇。該方法主要使用資訊增益率來進行特徵選擇。from sklearn import datasets from sklearn import metrics...