一个轻量级库,用于在训练中使用健壮的kfold目标统计信息对数据集中的分类特征进行编码。

target-statistic-encoding的Python项目详细描述


目标统计编码

PyPI versionBuild StatusCode style: blackLanguage 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

记住这只是一个例子。示例目标是随机的,因此不需要实际信号example usage

美国石油学会

实例化

^{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
a0.287356
b0.298795
c0.336879
d0.287037

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在验证检查中改进构建器模式?   java如何定义一个依赖项来获取快照?   java Javafx webview在运行时不显示dashplotly应用程序   java Android kotlin单元测试用例。。?   java Android:SurfaceView,为什么要使用不同的线程   Android/Java“org.apache.http.ProtocolException”,http头应答有问题   反射如何确定类成员是否是静态的以及Java中的字段   java设置EditText以接受双值的问题   类加载器如何使用类加载器将jar从我的网站加载到java应用程序的脚本中   java GWT HTMLTable colaspan功能   java无法删除/重命名文件   java Navigableset vs Navigablemap   php中java加密方法的转换   java为什么加载我的共享对象文件会在Netbeans 8.2中出现“未满足链接”错误?   java JAXRS CXF异常包装   java程序在If语句之后执行Else语句   java将对象转换为JAXBElement<Object>