决策树模型

这篇博客介绍了CART决策树的实现,包括python的基本实现和sklearn库的使用。详细阐述了CART算法的原理,特别是基尼指数在特征选择中的作用,并对比了CART与其他决策树算法的差异。
摘要由CSDN通过智能技术生成

决策树python实现和sklearn'实现

 

目录

python实现和sklearn'实现

1.概览

2.实现

2.1python实现

2.1.1构建决策树过程图例

2.2 sklearn实现

3.CART决策树


 

1.概览

2.实现

2.1python实现

# -*- coding: utf-8 -*-
"""
Created on Sun Aug 26 11:17:27 2018

决策树-python实现
    数据源:给定外貌特征实现男女分类
    
    注意:
      1.数学:
        1.log函数   log以2为底,a为对数
          import math
          math.log(a,2)
        2.去重
          set(a)   获取a去重后所有的类别
        3.去索引
          value是series格式
          continues_value=[i for i in value]
        4,求字典的key最大值
            final=max(t_ent,key=t_ent.get)
        5.map(function(),iterator)
           它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
            map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
               [1, 4, 9, 16, 25]
          
      2.代码
        1.信息熵计算
          遍历每行数据,找到目标数据,计数存储到字典
          循环字典,求信息熵
        2.先对连续性字段进行二分法寻找最优切分点,找到后,对数据进行离散化(将数据以切分点进行分类,大于是一类,小于是一类)
        3.难点:二叉有向树建树!
               遍历二叉有向树

"""
"""生成示例数据
"""
import numpy as np
import pandas as pd

def create_data():
    data_value = np.array([['long', 'thick', 175, 'no', 'man'], ['short', 'medium', 168, 'no', 'man'],
                     ['short', 'thin', 178, 'yes', 'man'], ['short', 'thick', 172, 'no', 'man'],
                     ['long', 'medium', 163, 'no', 'man'], ['short', 'thick', 180, 'no', 'man'],
                     ['long', 'thick', 173, 'yes', 'man'], ['short', 'thin', 174, 'no', 'man'],
                     ['long', 'thin', 164, 'yes', 'woman'], ['long', 'medium', 158, 'yes', 'woman'],
                     ['long', 'thick', 161, 'yes', 'woman'], ['short', 'thin', 166, 'yes', 'woman'],
                     ['long', 'thin', 158, 'no', 'woman'], ['short', 'medium', 163, 'no', 'woman'],
                     ['long', 'thick', 161, 'yes', 'woman'], ['long', 'thin', 164, 'no', 'woman'],
                     ['short', 'medium', 172, 'yes','woman']] )
    columns = np.array(['hair', 'voice', 'height', 'ear_stud','labels'])
    #print('data_value',data_value)
    data=pd.DataFrame(data_value,columns=columns)
    return data
data = create_data()
print(data)

"""计算信息熵:即根节点纯度(根节点:男性,女性)
"""
import math
def get_Ent(data):
    num_sample=len(data)
    label_counts={}
    for i in range(num_sample):
        each_data=data.iloc[i,:]
        current_label=each_data['labels']
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值