本文不對相關數學原理進行介紹,如欠缺相關數學基礎,可參考李航的《統計學習方法》以及周志華的《機器學習》
並且匯入相關的數學包
第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...