资源简介

用python编写的决策树ID3算法,运用了Car-Evaluation的例子。BUG较少,综合了网上的优秀代码,并进一步形成自己的代码。代码基本有注释,风格良好,能够很快看懂。内含有比较规范的报告文档,包含所有流程图,说明图,以及文档风格绝对不错,无需更改,建议下载! 该算法所测试的数据集如下(已经打包在内,并已经生成xls格式,方便直接使用): 已知:UCI标准数据集Car-Evaluation,定义了汽车性价比的4 个类别; 求:用ID3算法建立Car-Evaluation的属性描述决策树 Car-Evaluation训练数据集文件: 1. car_databases.pdf 2. car_evalution-databases.pdf

资源截图

代码片段和文件信息

import pandas as pd
import numpy as np
import time
import treePlotter as ctp
#import matplotlib.pyplot as plt

#print不省略输出
#np.set_printoptions(threshold=np.inf)

def getData():
    f = pd.read_csv(‘D:\docunments\code\DM\ML\ID3\data set\car_evalution-databases.csv‘encoding = “utf-8“)

    # 获取属性值
    feature = np.array(f.keys())
    feature = np.array(feature[1:feature.size])

    # 数据转换成数组
    S = np.array(f)
    S = np.array(S[: 1:S.shape[1]])
    return Sfeature

#统计某一列的特征各个取值概率
def probability(x):
    x_values = np.unique(np.array(x))  #统计某列特征取值类型
    values_count = np.zeros(x_values.shape[0]).reshape(1x_values.shape[0])
    for i in range(0 x_values.shape[0]):
        q = np.matrix(x[np.where(x[:0] == x_values[i])[0]])
        values_count[:i] = q.shape[0]
    p = values_count/values_count.sum()
    return p

#计算Entropy
#S为矩阵类型
#返回entropy
def Entropy(S):
    p = probability(S[:S.shape[1]-1])
    log_p = np.log(p)
    entropy = -np.dot(pnp.transpose(log_p))[0][0]
    return entropy

#计算EntropyA
#S为数组类型
#返回最小的信息熵的特征的索引值
#返回最小的信息熵值
def getMinEntropyA(S):
    entropy = np.zeros(S.shape[1]-1)
    for i in range(0 S.shape[1]-1):        #当前所有非目标特征
        values = np.unique(np.array(S[:i]))
        values_entropy = np.zeros(values.shape[0]).reshape(1values.shape[0])
        for j in range(0values.shape[0]):
            q = np.matrix(S[np.where(S[:i] == values[j])[0]])  #抽取该特征取某值的样本数据
            values_entropy[:j] = Entropy(q)
        proportion = probability(np.matrix(S[: i]).transpose())
        entropy[i] = np.dot(proportion values_entropy.transpose())[0][0]
    minEntropyA = entropy.min()
    position_minEntropA = entropy.transpose().argmin()
    return position_minEntropA minEntropyA

#计算Gain
#S为数组类型
#返回最大信息增益的特征的索引值
def getMaxGain(S):
    entropyS = Entropy(np.matrix(S))
    position_minEntropyA entropyA = getMinEntropyA(S)
    if(entropyS - entropyA > 0):
        return position_minEntropyA

#ID3算法
#返回ID3决策树
def ID3(Sfeatures):
    if(Entropy(np.matrix(S)) == 0):
        return S[0][S.shape[1] - 1]
        #统计目标特征的当前取值作为叶节点的值
    elif features.size == 1:
        type_values = np.unique(S[: S.shape[1]-1])
        max = 0
        max_value = S[0][S.shape[1] - 1]
        for value in type_values:
            S_temp = np.array(S[np.where(S[: S.shape[1]-1] == value)[0]])
            if max < S_temp.shape[0]:
                max = S_temp.shape[0]
                max_value = value
        return max_value
    else:
        best_feature_index = getMaxGain(S)
        best_feature = features[best_feature_index]
        best_feature_values = np.unique(S[: best_feature_index])
        # 划分S,feature
        features = del_arrary(features best_feature_index)
        Tree_ID3 = {best_feature:{}}
        for value in best_feature_values:
            S_temp = np.array(S[np.where(S[: best_feature_index] == value)[0]])
            #去除best_featur

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件           0  2018-06-12 22:54  ID3鍐崇瓥鏍戠畻娉曞疄楠?
     文件        6148  2018-06-12 22:54  ID3鍐崇瓥鏍戠畻娉曞疄楠?.DS_Store
     目录           0  2018-06-12 22:59  __MACOSX\
     文件           0  2018-06-12 22:59  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?
     文件         182  2018-06-12 22:54  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?._.DS_Store
     文件       38332  2017-10-24 23:51  ID3鍐崇瓥鏍戠畻娉曞疄楠?car_databases.pdf
     文件         182  2017-10-24 23:51  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?._car_databases.pdf
     文件      120807  2017-11-02 15:52  ID3鍐崇瓥鏍戠畻娉曞疄楠?car_evalution-databases.csv
     文件         182  2017-11-02 15:52  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?._car_evalution-databases.csv
     文件       57339  2017-10-24 23:51  ID3鍐崇瓥鏍戠畻娉曞疄楠?car_evalution-databases.pdf
     文件         182  2017-10-24 23:51  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?._car_evalution-databases.pdf
     文件      150881  2017-11-02 15:49  ID3鍐崇瓥鏍戠畻娉曞疄楠?car_evalution-databases.xlsx
     文件         182  2017-11-02 15:49  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?._car_evalution-databases.xlsx
     文件      116224  2017-10-25 11:42  ID3鍐崇瓥鏍戠畻娉曞疄楠?ID3鍐崇瓥鏍戠畻娉曞疄楠?ppt
     文件         182  2017-10-25 11:42  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?._ID3鍐崇瓥鏍戠畻娉曞疄楠?ppt
     目录           0  2017-11-02 14:50  ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\
     文件        6148  2017-11-02 01:27  ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\.DS_Store
     目录           0  2018-06-12 22:59  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\
     文件         182  2017-11-02 01:27  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\._.DS_Store
     目录           0  2017-11-02 14:50  ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\
     文件        6148  2017-11-02 01:27  ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\.DS_Store
     目录           0  2018-06-12 22:59  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\
     文件         182  2017-11-02 01:27  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\._.DS_Store
     目录           0  2017-11-02 14:50  ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\code\
     目录           0  2017-11-03 15:09  ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\code\ID3\
     目录           0  2017-11-02 14:50  ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\code\ID3\.idea\
     文件         459  2017-10-21 02:14  ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\code\ID3\.idea\ID3.iml
     目录           0  2018-06-12 22:59  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\code\
     目录           0  2018-06-12 22:59  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\code\ID3\
     目录           0  2018-06-12 22:59  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\code\ID3\.idea\
     文件         182  2017-10-21 02:14  __MACOSX\ID3鍐崇瓥鏍戠畻娉曞疄楠?ML-master\ID3\code\ID3\.idea\._ID3.iml
............此处省略59个文件信息

评论

共有 条评论