DAY03随机森林演算法

那今天,我打算一步一步写出演算法,顺便跟大家分享关於我的理解,首先决策树算法有ID3和C4.5和CART算法,今天要讲解的是CART分类法(因为此方法既可以做分类也可以做回归两种都可以,其他方法只能做分类):
https://ithelp.ithome.com.tw/upload/images/20210917/201416545zlKlXiuuY.png
首先今天要介绍CART算法中的分类,首先是基尼不纯度, 基尼不纯度表示一个随机选中的样本在子集中被分错的可能性。基尼不纯度为这个样本被选中的概率乘以它被分错的概率。当一个节点中所有样本都是一个类时,基尼不纯度为零。公式如下:
https://ithelp.ithome.com.tw/upload/images/20210917/20141654IZihUUmmOE.png
D表示数据集(总共有1,2…,n种分类,分别是x_1,x_2 〖,…,x〗_n),P(x_i)表示被标记成x_i类的机率值(也就是数据分类到i)
https://ithelp.ithome.com.tw/upload/images/20210917/20141654H9IAfPUfF1.png
而通常P(x_i)为: 该组资料个数/全部资料个数
所以最後,如果把它写成程序码就会像这样:
假设资料被分类成1,2类(第0维为y)後面为其余特徵

data=[[1,"a",0.852],[2,"b",0.31],[1,"b",0.589],[1,"c",0.01],[2,"c",0.258]]

然後我们定义基尼不纯度的函数:

import random as rd
def Gini_imp(data):
    #首先创建一个字典计算指标个数
    dict_label = {}
    for i in data:
        right_Label = i[0]
        dict_label[right_Label] = dict_label.get(right_Label, 0) + 1
    print(dict_label)
    #一开始机率值1
    Gini_pro = 1
    #依照公式1-sum(pi**2) 和 pi为 第i类资料个数/全部资料个数
    for key in dict_label:
        pi = dict_label[key] / len(data)
        Gini_pro -= pi * pi
    return Gini_pro
   

然後我们把资料带入

data=[[1,"a",0.852],[2,"b",0.31],[1,"b",0.589],[1,"c",0.01],[2,"c",0.258]]
print(Gini_imp(data))

类1有3个,类2有2个
1-(3/5)^2-(2/5)^2=1-(9/25)-(4/25)=(12/25)=0.48
显示结果就会如下:

{1: 3, 2: 2}
0.48

再来对於样本D,根据某一条件con(後面会在说明),把样本D分成两部分D1和D2
公式如下:
而|D|为D总共样本个数, D1和D2以此类推:
所以程序如下:
把资料分割成D1和D2

data1=[[1,"a",0.852],[2,"b",0.31],[1,"b",0.589]]
print(Gini_imp(data1))

data1的基尼不纯度为: 0.44

data2=[[1,"c",0.01],[2,"c",0.258]]
print(Gini_imp(data2))

data2的基尼不纯度为: 0.5
然後下面计算D的基尼系数
Gini_D=(3/5)X0.44+(2/5)X0.5 = 0.4666
程序如下:

#data(第0维为y)
data=[[1,"a",0.852],[2,"b",0.31],[1,"b",0.589],[1,"c",0.01],[2,"c",0.258]]
data1=[[1,"a",0.852],[2,"b",0.31],[1,"b",0.589]]
data2=[[1,"c",0.01],[2,"c",0.258]]
def Gini_cofe(data1,data2):
    Gini_1 = len(data1)* Gini_imp(data1) / (len(data1)+len(data2))
    Gini_2 = len(data2)* Gini_imp(data2) / (len(data1)+len(data2))
    Gini_c = Gini_1 + Gini_2
    return Gini_c
print(Gini_cofe(data1,data2))

0.46666

好,今天实作部分就到这,明天再开始说明资料袋装抽样
以上程序和之後随机森林都参考这篇https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/466826/

在男孩前往森林的路上时,一朵木棉花从天空飘来下来,降在男孩身後,男孩没有察觉,继续地往前走去,花降落地上後,瞬间腐烂,里面有一只苍蝇飞了出来, 奇怪的是,苍蝇飞舞并未发出任何声音,苍蝇并未往男孩飞去,而是朝着男孩离开的木屋飞去 				
                  --|从未结束,一切只是开始|--     CS.MM    

<<:  管理是什麽?

>>:  3 所以要长怎样?

04

本人也是经过了深思熟虑,在每个日日夜夜思考这个问题。编译语言的出现,重写了人生的意义。编译语言可以说...

JavaScript 进阶笔记一 (变数)

一、变数 JavaScript 七种型态 Primitive type null undefine ...

[鱼刺-Python-2] 快速建立测试用API服务

快速建立API服务使用 flask,要先安装 先执行 python -m pip install f...

Day1:第一天来点简单的先安装Parrot_Security

CEH (Certificated Ethical Hacke)上课中教了满多的工具 , 今天我们先...

Day#21 Chat

前言 昨天引用了许多函式库,今天就来使用他们所提供的功能,真正来实作chatroom内容吧~~ Sp...