一个轻量级库,用于在训练中使用健壮的kfold目标统计信息对数据集中的分类特征进行编码。
target-statistic-encoding的Python项目详细描述
目标统计编码
Table of contents:
安装
从pypi
pip install target-statistic-encoding
来源
python -m pip install git+https://github.com/CircArgs/target_statistic_encoding.git
什么?在
有很多方法可以将分类特征转换为数值特征,从一个hot到embeddings。还有目标统计方法。这些方法根据目标特征进行统计。在
为什么?在
即使在这种简单的技术中,实现也有变化。有些实现了时间模拟方法,如Catboost,以获得对目标泄漏的鲁棒性。然而,这种方法的一个问题是,虽然它给编码带来了一些变化,但对于某些样本来说,统计数据可能有过度的偏差。这个小包装为此采取了不同的方法。相反,它使用训练集的分层折叠,并在每个折叠上独立地聚合目标统计信息。在
此实施的好处
- 分层分割目标统计有助于防止目标泄漏,从而使模型更健壮
- 可信度因素允许忽略支持度低的类别,从而使模型更加健壮
- 清洁api
- 除了允许自定义实现的统计函数外,还提供多种目标统计函数
- 容易生产-所有的东西都是100%系列化与泡菜
前任。
#save for prod/test time environmentpd.to_pickle(cat2num,"cat2num_for_production.pkl")#read into prod envcat2num=pd.read_pickle("cat2num_for_production.pkl")...model.predict(cat2num.transform(prod_data))
在
怎么做的?在
这只是一个执行以下示例操作的简单实用程序库: See this example notebook
记住这只是一个例子。示例目标是随机的,因此不需要实际信号
美国石油学会
实例化
^{pr2}$适合
在您的训练集中选择.fit_transform
的
注意:在训练集中运行.fit
然后.transform
并不等同于简单地运行.fit_transform
。分类统计数据之间不会有区别,因为它们都会映射到平均值。
cat2num.fit_transform(data:pandas.core.frame.DataFrame,split:str=None,n_splits:int=5,credibility:Union[float,int]=0,drop:bool=False,suffix:str='_Cat2Num',inplace:bool=False,)Args:data(pd.DataFrame):pandasdataframewithcategoricalfeaturestoconverttonumerictargetstatisticsplit(str):nameofacolumntouseinthedataforfoldingthedata.-ifthisisusethenn_splitsisignoredn_splits(int):numberofsplitstousefortargetstatisticcredibility(floatorint):-iffloatmustbein[0,1]as%offittingdataconsideredcredibletofitstatisticto-ifintmustbe>=0asnumberofrecordsinfittingdatalevelmustexistwithintobecredible-levelsnotabovethisthresholdwillbegiventheoveralltargetmeandrop(bool):droptheoriginalcolumnssuffix(str):astringtoappendtotheendofanencodedcolumn,default`'_Cat2Num'`inplace(bool):whetherthetransformationshouldbedoneinplaceorreturnthetransformeddata,default`False`Returns:thepasseddataframewithencodedcolumnsaddedifinplaceis`False`else`None`
cat2num.fit(data:pandas.core.frame.DataFrame,credibility:Union[float,int]=0,)Args:data(pd.DataFrame):pandasdataframewithcategoricalfeaturestofitnumerictargetstatisticfromcredibility(floatorint):-iffloatmustbein[0,1]as%offittingdataconsideredcredibletofitstatisticto-ifintmustbe>=0asnumberofrecordsinfittingdatalevelmustexistwithintobecredible-levelsnotabovethisthresholdwillbegiventheoveralltargetmeanReturns:fitCat2Numinstance
在你的non-training集合
cat2num.transform(data:pandas.core.frame.DataFrame,drop:bool=False,suffix:str='_Cat2Num',inplace:bool=False,)Args:data(pd.DataFrame):pandasdataframewithcategoricalfeaturestoconverttonumerictargetstatisticdrop(bool):droptheoriginalcolumnssuffix(str):astringtoappendtotheendofanencodedcolumn,default`'_Cat2Num'`inplace(bool):whetherthetransformationshouldbedoneinplaceorreturnthetransformeddata,default`False`Returns:thepasseddataframewithencodedcolumnsaddedifinplaceis`False`else`None`
自定义目标统计函数
您可以选择基于除平均值以外的统计信息来选择目标统计信息,尽管这通常是不需要/不必要的。在
其中包括了几个,您可以在一些考虑因素的情况下实现自己的。在
给定:
- 平均值(
target_statistic_encoding.stat_funcs.Mean()
)-默认值 - 中位数(
target_statistic_encoding.stat_funcs.Median()
) - 标准(
target_statistic_encoding.stat_funcs.Std()
) - 变量(
target_statistic_encoding.stat_funcs.Var()
) - 分位数(
target_statistic_encoding.stat_funcs.Quantile(quantile=0.5)
)
实现你自己的:
您可以选择实现自己的目标统计函数。它必须是对pandas.core.groupby.DataFrameGroupby
类型操作的可调用的,即pandas.DataFrame.groupby
的结果,例如:类似于
target | |
---|---|
X1 | |
a | 0.287356 |
b | 0.298795 |
c | 0.336879 |
d | 0.287037 |
- 项目
标签: