栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

决策树算法Python实现2

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

决策树算法Python实现2

文章目录
  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

本实验计算连续性数据的基尼系数,用来生成决策树。

对于连续型数据生成决策树时,将连续型数据进行等分,拆解成离散的数据。


一、基尼系数

以技能为例计算其基尼系数

C++ :G1 = 1 - ()*()-() *()

Java : G2 = 1 - () * (​​​​​​​) - () * (​​​​​​​)

G = 0.4*G1 + 0.6*G2

基尼系数与信息熵比较

基尼系数的计算公式比较简单不需要log,计算速度会优于信息熵。

二、使用步骤 1.引入库

代码如下(示例):

import numpy as np
from collections import Counter
from math import log2
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
2.计算基尼系数

代码如下(示例):

#计算基尼系数函数
def gini(y_label):
    counter = Counter(y_label)  # 计数
    g = 0.0
    for num in counter.values():
        p = num / len(y_label)
        g += p ** 2
    g = 1 - g
    return g
3.计算分割点的基尼系数 
#选取X的其中一个特征,比如花瓣长,设置100个分割点,然后计算每个分割点的基尼系数

def caloneGini(X,y,n=100):
    ents = np.zeros(n)
    X1 = X[:, 3]
    cuts = np.linspace(X1.min(), X1.max(), n)
    # 开始计算
    for i in range(len(cuts)):
        y_less = y[X1 <= cuts[i]]  # 取出小于等于分割点的数据
        y_greater = y[X1 > cuts[i]]  # 取出大于分割点的数据
        G_less = gini(y_less)  # 小于等于分割点的基尼系数
        G_greater = gini(y_greater)  # 大于分割点的基尼系数
        G = G_less * len(y_less) / len(y) + G_greater * len(y_greater) / len(y)
        ents[i] = G
    return cuts, ents

iris = load_iris()
X = iris['data']
y = iris['target']

cuts_Gini,ents_Gini = caloneGini(X,y)
plt.plot(cuts_Gini,ents_Gini)
plt.show()
代码说明

1.利用莺尾花花瓣长作为数据。

2.将莺尾花花瓣长等分成100份,分别计算每一个分割点的基尼系数。

3.计算每个分割点的基尼系数时,将大于该分割点的数据看成一类,小于该 分割点的看成另外一类,所以计算基尼系数与计算技能的基尼系数相同。


总结

本实验利用Python手动实现了如何利用连续型数据构建决策树。

本实验计算了每个分割点的基尼系数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283769.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号