分類演算法除了需要測量資訊熵,還需要劃分資料集。在知道如何得到熵之後,就可以按照獲取最大資訊增益的方法來判斷是否正確地劃分了資料集。對每個特徵劃分資料集的結果計算一次資訊熵,以便判斷按照哪個特徵劃分資料集是最好的劃分方式。
# 根據資訊增益,選擇最優的列來切分資料集
#選擇最優的列進行切分
defbestsplit
(dataset)
:# dataset:原始資料集
baseent = calent(dataset)
# 計算原始熵
bestgain =
0# 初始化資訊增益
axis =-1
# 初始化最佳切分列,標籤列
for i in
range
(dataset.shape[1]
-1):
# 對特徵的每一列進行迴圈
levels= dataset.iloc[
:,i]
.value_counts(
).index # 提取出當前列的所有取值
ents =
0# 初始化子節點的資訊熵
for j in levels:
# 對當前列的每乙個取值進行迴圈
childset = dataset[dataset.iloc[
:,i]
==j]
# 某乙個子節點的dataframe
ent = calent(childset)
# 計算某乙個子節點的資訊熵
ents +=
(childset.shape[0]
/dataset.shape[0]
)*ent # 計算當前列的資訊熵
infogain = baseent-ents # 計算當前列的資訊增益
print
(f'第列的資訊熵為'
)print
(f'第列的資訊增益為')if
(infogain > bestgain)
: bestgain = infogain # 選擇最大資訊增益
axis = i # 最大資訊增益所在列的索引
return axis # 返回最大資訊增益所在列的索
bestsplit(dataset)
# 執行自定義的資料集切分函式
執行結果
第0列的資訊熵為0.5509775004326937
第0列的資訊增益為0.4199730940219749
第1列的資訊熵為0.8
第1列的資訊增益為0.17095059445466854
0
返回的結果為0,即選擇第0列列來切分資料集。
也就是說,最大資訊熵的所選的特徵是分類後熵值最小的特徵。分類後熵值最小的特徵恰恰是分類結果一致的特徵,而分類結果一致的特徵必須是兩類樣本差異最大的特徵。
通過最佳切分函式返回最佳切分列的索引,我們就可以根據這個索引,構建乙個按照給定列切分資料集的函式。
#按照給定列切分資料集
"""函式功能:按照給定的列劃分資料集
引數說明:
dataset:原始資料集
axis:指定的列索引
value:指定的屬性值
返回:redataset:按照指定列列索引和屬性值切分後的資料集
"""def
mysplit
(dataset,axis,value)
:#定義切分函式
col = dataset.columns[axis]
#指定的列名
redataset = dataset.loc[dataset[col]
==value,:]
.drop(col,axis=1)
#切分後的資料集
return redataset
mysplit(dataset,0,
1)#按照指定列索引0和屬性值1切分後的資料集
其中的關鍵步驟分步執行及結果如下:
#指定的的列索引為0時的列名
col = dataset.columns[0]
col
執行結果
'accompany'
#'accompany'列屬性值為1時的資料集部分
dataset.loc[dataset[
'accompany']==
1,:]
執行結果
accompany game bad boy31
1 no41
1 no
#'accompany'列屬性值為1時的資料集部分,切除'accompany'列
dataset.loc[dataset[
'accompany']==
1,:]
.drop(
'accompany'
,axis=
1)
執行結果
game bad boy
31 no
41 no
決策樹劃分資料集
這段 主要是劃分資料,比如說看這個矩陣的第一列是否滿足需要,如果滿足需要,就把後面的新增進來,然後追加到新的矩陣中。可是這麼做有什麼用途呢?另外,axis是軸的意思,這段 給出了三個引數,第乙個是要被劃分的資料集,第二個是軸線,比如說是第一列,還是第二列,第三個是value,看這一列的數值是否 va...
決策樹 劃分資料集
機器學習實戰 中的 三個輸入引數為 待劃分的資料集 劃分資料集的特徵 需要返回的特徵的值。第4行,如果第axis個特徵滿足分類的條件,則進行以下操作 第5行,featvec axis 是從0號元素開始取axis個元素,此時reducedfeatvec是前axis個元素,即0號到axis 1號元素 第...
決策樹劃分資料集的一些小東東
在劃分資料集之前之後資訊發生的變化叫做資訊增益,為了說明白資訊增益得先知道什麼是資訊,什麼是熵 熵 約翰 馮 諾依曼起的名 定義為資訊的期望。那麼設x為有限個離散的隨機變數,其概率分布為 p x xi pi,i 1,2,n i i i 1,2,ldots n p x xi p i i 1,2 n 隨...