MCPcopy Index your code
hub / github.com/Dod-o/Statistical-Learning-Method_Code / calcBestFeature

Function calcBestFeature

DecisionTree/DecisionTree.py:123–163  ·  view source on GitHub ↗

计算信息增益最大的特征 :param trainDataList: 当前数据集 :param trainLabelList: 当前标签集 :return: 信息增益最大的特征及最大信息增益值

(trainDataList, trainLabelList)

Source from the content-addressed store, hash-verified

121 return H_D_A
122
123def calcBestFeature(trainDataList, trainLabelList):
124 '''
125 计算信息增益最大的特征
126 :param trainDataList: 当前数据集
127 :param trainLabelList: 当前标签集
128 :return: 信息增益最大的特征及最大信息增益值
129 '''
130 #将数据集和标签集转换为数组形式
131 trainDataArr = np.array(trainDataList)
132 trainLabelArr = np.array(trainLabelList)
133
134 #获取当前特征数目,也就是数据集的横轴大小
135 featureNum = trainDataArr.shape[1]
136
137 #初始化最大信息增益
138 maxG_D_A = -1
139 #初始化最大信息增益的特征
140 maxFeature = -1
141
142 #“5.2.2 信息增益”中“算法5.1(信息增益的算法)”第一步:
143 #1.计算数据集D的经验熵H(D)
144 H_D = calc_H_D(trainLabelArr)
145 #对每一个特征进行遍历计算
146 for feature in range(featureNum):
147 #2.计算条件经验熵H(D|A)
148 #由于条件经验熵的计算过程中只涉及到标签以及当前特征,为了提高运算速度(全部样本
149 #做成的矩阵运算速度太慢,需要剔除不需要的部分),将数据集矩阵进行切割
150 #数据集在初始时刻是一个Arr = 60000*784的矩阵,针对当前要计算的feature,在训练集中切割下
151 #Arr[:, feature]这么一条来,因为后续计算中数据集中只用到这个(没明白的跟着算一遍例5.2)
152 #trainDataArr[:, feature]:在数据集中切割下这么一条
153 #trainDataArr[:, feature].flat:将这么一条转换成竖着的列表
154 #np.array(trainDataArr[:, feature].flat):再转换成一条竖着的矩阵,大小为60000*1(只是初始是
155 #这么大,运行过程中是依据当前数据集大小动态变的)
156 trainDataArr_DevideByFeature = np.array(trainDataArr[:, feature].flat)
157 #3.计算信息增益G(D|A) G(D|A) = H(D) - H(D | A)
158 G_D_A = H_D - calcH_D_A(trainDataArr_DevideByFeature, trainLabelArr)
159 #不断更新最大的信息增益以及对应的feature
160 if G_D_A > maxG_D_A:
161 maxG_D_A = G_D_A
162 maxFeature = feature
163 return maxFeature, maxG_D_A
164
165
166def getSubDataArr(trainDataArr, trainLabelArr, A, a):

Callers 1

createTreeFunction · 0.85

Calls 2

calc_H_DFunction · 0.85
calcH_D_AFunction · 0.85

Tested by

no test coverage detected