决策树python实现和sklearn'实现
目录
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']