while(min_chiSquarethreshold and group_cntmaxInterval):
min_index = chi_stats[chi_stats['chi_square']==chi_stats['chi_square'].min()].index.tolist()[0]
# 如果分箱区间在最前,则向下合并
if min_index == 0:
chi_stats = merge_chiSquare(chi_stats, min_index+1, min_index)
# 如果分箱区间在最后 , 则向上合并
elif min_index == group_cnt-1:
chi_stats = merge_chiSquare(chi_stats, min_index-1, min_index)
# 如果分箱区间在中间,则判断与其相邻的最小卡方的区间,然后进行合并
else:
if chi_stats.loc[min_index-1, 'chi_square']chi_stats.loc[min_index+1, 'chi_square']:
chi_stats = merge_chiSquare(chi_stats, min_index, min_index+1)
else:
chi_stats = merge_chiSquare(chi_stats, min_index-1, min_index)
min_chiSquare = chi_stats['chi_square'].min()
group_cnt = len(chi_stats)
chiMerge_result = chi_stats
split_list.extend(chiMerge_result[feature].tolist())
return chiMerge_result, split_list
def get_chiSquare_distuibution(dfree=4, cf=0.1):
'''
根据自由度和置信度得到卡方分布和阈值
params:
dfree: 自由度, 最大分箱数-1, default 4
cf: 显著性水平, default 10%
return:
卡方阈值
'''
percents = [0.95, 0.90, 0.5, 0.1, 0.05, 0.025, 0.01, 0.005]
df = pd.DataFrame(np.array([chi2.isf(percents, df=i) for i in range(1, 30)]))
df.columns = percents
df.index = df.index+1
# 显示小数点后面数字
pd.set_option('precision', 3)
return df.loc[dfree, cf]
def merge_chiSquare(chi_result, index, mergeIndex, a = 'expected_target_cnt',
b = 'act_target_cnt', c = 'chi_square'):
'''
params:
chi_result: 待合并卡方数据集
index: 合并后的序列号
mergeIndex: 需合并的区间序号
a, b, c: 指定合并字段
return:
分箱合并后的卡方dataframe
'''
chi_result.loc[mergeIndex, a] = chi_result.loc[mergeIndex, a] + chi_result.loc[index, a]
chi_result.loc[mergeIndex, b] = chi_result.loc[mergeIndex, b] + chi_result.loc[index, b]
chi_result.loc[mergeIndex, c] = (chi_result.loc[mergeIndex, b] - chi_result.loc[mergeIndex, a])**2 /chi_result.loc[mergeIndex, a]
chi_result = chi_result.drop([index])
chi_result = chi_result.reset_index(drop=True)
return chi_result
for col in bin_col:
chi_stats = calc_chiSquare(exp_f_data_label_dr, col, 'label')
chiMerge_result, split_list = chiMerge_maxInterval(chi_stats, col, maxInterval=5)
print(col, 'feature maybe split like this:', split_list)
如何在python中实现数据的最优分箱其实任何开发工具只是把算法变成代码,根本上是你要想清楚如何分箱 。
你所需要python分箱函数的最优分箱应该是从所有分箱的可能中找到具有最小方差的方案,分箱的数量通常按照等频或者等宽划分,还是要预设或者通过最优化计算得到 。
然后 , 对应每种分箱方法计算其方差 , 你找到找到相应的函数 , 把这个方差的计算方法实现代码 。
对Python完全不熟,帮不python分箱函数了你 。你可以搜一些代码,自己调试和验证一下
【Python】split()函数Python中有split()和os.path.split()两个函数 , 具体作用如下:
split():拆分字符串 , 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
os.path.split():按照路径将文件名和路径分割开
一、函数说明
1、split()函数
语法:str.split(str="",num=string.count(str))[n]
参数说明:
str:表示为分隔符,默认为空格,但是不能为空('') 。若字符串中没有分隔符,则把整个字符串作为列表的一个元素
num:表示分割次数 。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
推荐阅读
- 斗鱼直播婷婷,斗鱼依然是婷er
- 竞速游戏可手柄,竞速游戏手柄推荐
- go语言实现sh go语言实现上班签到
- 关于postgresql服务启动的信息
- 怎么在电脑上玩魂斗罗,电脑如何玩魂斗罗游戏
- 两人休闲益智小游戏,两人休闲益智小游戏怎么玩
- 关于pythonix_函数的信息
- 如何拓展新媒体教育,如何拓展新媒体教育发展
- 透光拍摄叫什么,透光物品拍摄技巧