首页 > 代码库 > 【机器学习】决策树-ID3算法的Python实现

【机器学习】决策树-ID3算法的Python实现

'''
Created on Jan 30, 2015

@author: 史帅
'''

from math import log
import operator
import re

def fileToDataSet(fileName):
    '''
    此方法功能是:从文件中读取样本集数据,样本数据的格式为:数据以空白字符分割,最后一列为类标签
        
        参数:
            fileName:存放样本集数据的文件路径
        
        返回值:
            dataSet:样本集数据组成的二维数组
    '''
    file=open(fileName, mode='r')
    lines=file.readlines()
    dataSet=[]
    index=0
    p=re.compile(r"\s+")
    for line in lines:
        line=p.split(line.strip())
        dataSet.append(line)
        index+=1
    return dataSet

def calculateShannonEntropy(dataSet):
    '''
    此方法功能是:计算样本集数据类别的信息熵,样本数据的格式为二维数组
        
        参数:
            dataSet:样本集数据组成的二维数组
        
        返回值:
            shannonEntropy:样本集数据类别的信息熵
    '''
    dataCount=len(dataSet)
    classCountDic={}
    for data in dataSet:
        label=data[-1]
        if label not in classCountDic.keys():
            classCountDic[label]=0
        classCountDic[label]+=1
    shannonEntropy=0.0
    for key in classCountDic:
        prob=float(classCountDic[key])/dataCount
        shannonEntropy-=prob*log(prob,2)
    return shannonEntropy

def splitDataSet(dataSet,axis,value):
    '''
    此方法功能是:对样本集数据按照某一特征进行分割,使得分割后的数据集中该特征的值全部等于同一个值,并且将分割后的数据中该特征列去除
    
        参数:
            dataSet:待分割的样本集数据,二维数组
            axis:特征所在样本集数据列中的位置
            value:样本集数据分割后该特征的值
            
        返回值:
            splitedDataSet:按照所在位置为axis的特征进行分割,并且该特征值为value的样本集数据的子集
    '''
    splitedDataSet=[]
    for data in dataSet:
        if data[axis]==value:
            splitedData=http://www.mamicode.com/data[:axis]>



【机器学习】决策树-ID3算法的Python实现