麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Python > 正文

python實現連續變量最優分箱詳解--CART算法

2024-09-09 19:02:39
字體:
來源:轉載
供稿:網友

關于變量分箱主要分為兩大類:有監督型和無監督型

對應的分箱方法:

A. 無監督:(1) 等寬 (2) 等頻 (3) 聚類

B. 有監督:(1) 卡方分箱法(ChiMerge) (2) ID3、C4.5、CART等單變量決策樹算法 (3) 信用評分建模的IV最大化分箱 等

本篇使用python,基于CART算法對連續變量進行最優分箱

由于CART是決策樹分類算法,所以相當于是單變量決策樹分類。

簡單介紹下理論:

CART是二叉樹,每次僅進行二元分類,對于連續性變量,方法是依次計算相鄰兩元素值的中位數,將數據集一分為二,計算該點作為切割點時的基尼值較分割前的基尼值下降程度,每次切分時,選擇基尼下降程度最大的點為最優切分點,再將切分后的數據集按同樣原則切分,直至終止條件為止。

關于CART分類的終止條件:視實際情況而定,我的案例設置為 a.每個葉子節點的樣本量>=總樣本量的5% b.內部節點再劃分所需的最小樣本數>=總樣本量的10%

python代碼實現:

import pandas as pdimport numpy as np #讀取數據集,至少包含變量和target兩列sample_set = pd.read_excel('/數據樣本.xlsx') def calc_score_median(sample_set, var):  '''  計算相鄰評分的中位數,以便進行決策樹二元切分  param sample_set: 待切分樣本  param var: 分割變量名稱  '''  var_list = list(np.unique(sample_set[var]))  var_median_list = []  for i in range(len(var_list) -1):    var_median = (var_list[i] + var_list[i+1]) / 2    var_median_list.append(var_median)  return var_median_list

var表示需要進行分箱的變量名,返回一個樣本變量中位數的list

def choose_best_split(sample_set, var, min_sample):  '''  使用CART分類決策樹選擇最好的樣本切分點  返回切分點  param sample_set: 待切分樣本  param var: 分割變量名稱  param min_sample: 待切分樣本的最小樣本量(限制條件)  '''  # 根據樣本評分計算相鄰不同分數的中間值  score_median_list = calc_score_median(sample_set, var)  median_len = len(score_median_list)  sample_cnt = sample_set.shape[0]  sample1_cnt = sum(sample_set['target'])  sample0_cnt = sample_cnt- sample1_cnt  Gini = 1 - np.square(sample1_cnt / sample_cnt) - np.square(sample0_cnt / sample_cnt)    bestGini = 0.0; bestSplit_point = 0.0; bestSplit_position = 0.0  for i in range(median_len):    left = sample_set[sample_set[var] < score_median_list[i]]    right = sample_set[sample_set[var] > score_median_list[i]]        left_cnt = left.shape[0]; right_cnt = right.shape[0]    left1_cnt = sum(left['target']); right1_cnt = sum(right['target'])    left0_cnt = left_cnt - left1_cnt; right0_cnt = right_cnt - right1_cnt    left_ratio = left_cnt / sample_cnt; right_ratio = right_cnt / sample_cnt        if left_cnt < min_sample or right_cnt < min_sample:      continue        Gini_left = 1 - np.square(left1_cnt / left_cnt) - np.square(left0_cnt / left_cnt)    Gini_right = 1 - np.square(right1_cnt / right_cnt) - np.square(right0_cnt / right_cnt)    Gini_temp = Gini - (left_ratio * Gini_left + right_ratio * Gini_right)    if Gini_temp > bestGini:      bestGini = Gini_temp; bestSplit_point = score_median_list[i]      if median_len > 1:        bestSplit_position = i / (median_len - 1)      else:        bestSplit_position = i / median_len    else:      continue          Gini = Gini - bestGini  return bestSplit_point, bestSplit_position
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 无遮挡一级毛片视频 | 黄色视屏免费看 | av免费在线不卡 | 91av在线免费 | av免费在线观看av | 亚洲视频在线免费看 | 亚洲精品永久视频 | 91真视频| 成人偷拍片视频在线观看 | 国产18成人免费视频 | 精品久久久一二三区播放播放播放视频 | 久久亚洲精品国产一区 | 婷婷一区二区三区四区 | 宅男噜噜噜66国产免费观看 | 91精品观看91久久久久久国产 | 男女生羞羞视频网站在线观看 | 日韩精品99久久久久久 | 国产一级免费不卡 | 性欧美xxxx免费岛国不卡电影 | 在线小视频国产 | 男女视频免费看 | 久久99精品久久久久久园产越南 | 亚洲成人免费网站 | 久久精品中文字幕一区 | 欧美色大成网站www永久男同 | 成人男女啪啪免费观看网站四虎 | 黄网站在线播放视频免费观看 | 成人福利在线视频 | 精品国产一区二区亚洲人成毛片 | 性视频久久 | 日韩av片网站 | 精品一二三区视频 | 日韩黄a | 久久免费综合视频 | 叉逼视频 | 欧美日韩激情 | 欧美激情天堂 | 男人天堂新地址 | 久久线视频 | 久草资源在线观看 | 亚洲精品日韩色噜噜久久五月 |