社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习——基尼指数

yucheng1998 • 4 年前 • 39 次点击  
阅读 12

机器学习——基尼指数

定义:基尼指数(基尼不纯度):表示在样本集合中一个随机选中的样本被分错的概率。

    注意: Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。
复制代码

即 基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率

基尼系数的性质与信息熵一样:度量随机变量的不确定度的大小; G 越大,数据的不确定性越高; G 越小,数据的不确定性越低; G = 0,数据集中的所有样本都是同一类别;

代码

def cal_gini_index(data, label_len):
    '''
    :param data: (list)数据集
    :param label_len:  (int)数据集中每一行的标签数
    :return: gini (float)Gini指数
    '''

    total_asmple = len(data)
    if len(data) == 0:
        return 0

    for a in range(label_len):
        label_counts = label_uniq_cnt(data,a)  # 统计数据集中不同标签的个数
        print(label_counts)

        # 计算数据集的Gini指数
        gini = 0
        for label in label_counts:
            gini = gini + pow(label_counts[label], 2)

        gini = 1 - float(gini) / pow(total_asmple, 2)
        print(gini)


def label_uniq_cnt(data,a):
    '''
    统计数据集中不同标签的个数
    :param data: (list)原始数据
    :param a: 每一种标签的下标号
    :return: label_uniq_cnts(int)样本中的标签的个数,统计的是每一种类各个取值的数量,把每一个种类的各种取值的数量放在字典中存储返回
    '''

    label_uniq_cnts = {}
    for x in data:
        label = x[a]  # 取得每一个样本的类标签label
        #print(label)
        if label not in label_uniq_cnts:
            label_uniq_cnts[label] = 0
        label_uniq_cnts[label] += 1
    return label_uniq_cnts


if __name__ == '__main__':
    data = [('用', '有', '是'), ('用', '有', '是'), ('用', '无', '否'), ('不用', '有', '否'), ('不用', '有', '否')]
    cal_gini_index(data,len(data[0]))

复制代码

结果

{'用': 3, '不用': 2}
0.48
{'有': 4, '无': 1}
0.31999999999999995
{'是': 2, '否': 3}
0.48

复制代码

这样得到某一行数据被随机分配到错误结果的总概率。这一概率越高,说明对数据的拆分越不合理。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/36385
 
39 次点击