下面是splitDataset()函数,它以给定的划分比例将数据集进行划分。 Python 1 2 3 4 5 6 7 8 9 import random def splitDataset(dataset, splitRatio): trainSize = int(len(dataset) * splitRatio) trainSet = [] copy = list(dataset) while len(trainSet) < trainSize: ...
决策树算法中我们对根据每个特征划分的数据集计算一次熵,然后判断按照哪个特征划分是最好的划分方式。 def splitDataSet(dataSet,axis,value): retDataSet = [] for featVec in dataSet: if featVec[axis] == value: reducedfeatVec = featVec[:axis] reducedfeatVec.extend(featVec[axis+1:]) retDataSet.append(r...
flag = feature[int(num/2)]returnflag 这个函数并不重要启示,毕竟实际上有更多更好的衡量分类指标,这里只是一个简单和偷懒的衡量方法。其他方法在我看来整体结构上应该类似,可能只是公式不同。 线性划分 defsplitDataSet(dataset, axis, value): retDataSet = []forfeatVecindataset:iffeatVec[axis] ==value:reduc...
def splitDataSet(dataset, axis, value): retDataSet = [] for featVec in dataset: if featVec[axis] == value: reducedFeatVec = featVec[:axis] reducedFeatVec.extend(featVec[axis+1:]) retDataSet.append(reducedFeatVec) return retDataSet 1. 2. 3. 4. 5. 6. 7. 8. 该函数使用了三个参数:待...
myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value), subLabels) returnmyTree 然后是在python 名利提示符号输入如下命令: [python]view plaincopy myDat, labels = trees.createDataSet() myTree = trees.createTree(myDat,labels) ...
myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value), labels, featLabels) return myTree if __name__ == '__main__': dataSet, labels = createDataSet() featLabels = [] myTree = createTree(dataSet, labels, featLabels) ...
createTree函数难理解的部分在for迭代里,作用就是对于当前最优特征的不同取值构建分支,每一个特征取值可以构建出一个分支,具体是利用for循环对于当前最优特征的每个取值value下,递归调用createTree函数,参数为调用splitDataSet函数(以当前最优特征列,以及最优特征取值作为参数)返回dataSet中满足最优特征对应的列取值为value...
myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value),subLabels) #最后代码遍历当前选择特征包含的所有属性值,在每个数据集划分上递归调用函数createTree(),得到的返回值将被插入到字典变量myTree中, #因此函数终止执行时,字典中将会嵌套很多代表叶子节点信息的字典数据。
'''function:ID3决策树生成算法author:yanjiedate: 2022/10/27'''importmathdefsplitDataSet(dataSet,i,value):'''返回数据集dataSet中,去掉第i列属性值为value的实例后形成的新的数据集'''retDataSet=[]forxindataSet:ifx[i]==value:temp=x[:]temp.pop(i)retDataSet.append(temp)returnretDataSetdefcalcEntrop...
defsplitDataSet(dataSet,axis,value): ''' :param dataSet: 待划分的数据集 :param axis: 划分数据集的特征 :param value: 特征的返回值 :return: ''' retDataSet=[] forfeatVecindataSet: # 如果发现符合要求的特征,将其添加到新创建的列表中