日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

三种Target Encoding方式总结

發布時間:2025/3/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三种Target Encoding方式总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目前看到的大多數特征工程方法都是針對數值特征的。本文介紹的Target Encoding是用于類別特征的。這是一種將類別編碼為數字的方法,就像One-hot或Label-encoding一樣,但和這種兩種方法不同的地方在于target encoding還使用目標來創建編碼,這就是我們所說的有監督特征工程方法。

Target Encoding是任何一種可以從目標中派生出數字替換特征類別的編碼方式。這種目標編碼有時被稱為平均編碼。應用于二進制目標時,也被稱為bin counting。(可能會遇到的其他名稱包括:likelihood encoding, impact encoding, and leave-one-out encoding。)

每種方法都有其缺點,target encoding的缺點主要有:

  • 未知類別,會產生過擬合風險;
  • 空值,采用填充的方法不能很好的進行評估;
  • 長尾類別,對長尾類別這種少量數據的編碼會導致過擬合;

鑒于以上缺點的存在,一般會加入平滑來進行處理。

encoding = weight * in_category + (1 - weight) * overall weight = n / (n + m)

說了半天它的缺點和如何解決這些缺點,該方式的優點有哪些呢?

  • 高維數據特征:具有大量類別的可能很難編碼:One-hot會生成太多維度,而替代方案(如標簽編碼)可能不適合該類型。Target encoding在此處就很好的解決了這個問題;
  • 領域經驗特征:根據之前的經驗,即使某項數據它在特征度量方面得分很低,你也可能會覺得一個分類特征應該很重要。Target encoding有助于揭示特征的真實信息。

在kaggle競賽寶典中,有一篇《Kaggle Master分享編碼神技-Beta Target Encoding》,很好的介紹了Beta Target Encoding,該編碼方案來源于kaggle曾經的競賽Avito Demand Prediction Challenge 第14名solution。從作者開源出來的代碼,我們發現該編碼和傳統Target Encoding不一樣。

  • Beta Target Encoding可以提取更多的特征,不僅僅是均值,還可以是方差等等;
  • 從作者的開源中,是沒有進行N Fold提取特征的,所以可能在時間上提取會更快一些;

從作者的對比上我們可以看到,使用Beta Target Encoding相較于直接使用LightGBM建模的效果可以得到大幅提升。

class BetaTargetEncoder(object):def __init__(self, group):self.group = groupself.stats = Noneself.whoami = "DOTA"# get counts from dfdef fit(self, df, target_col):# 先驗均值self.prior_mean = np.mean(df[target_col]) stats = df[[target_col, self.group]].groupby(self.group)# count和sumstats = stats.agg(['sum', 'count'])[target_col] stats.rename(columns={'sum': 'n', 'count': 'N'}, inplace=True)stats.reset_index(level=0, inplace=True) self.stats = stats# extract posterior statisticsdef transform(self, df, stat_type, N_min=1):df_stats = pd.merge(df[[self.group]], self.stats, how='left')n = df_stats['n'].copy()N = df_stats['N'].copy()# fill in missingnan_indexs = np.isnan(n)n[nan_indexs] = self.prior_meanN[nan_indexs] = 1.0# prior parametersN_prior = np.maximum(N_min-N, 0)alpha_prior = self.prior_mean*N_priorbeta_prior = (1-self.prior_mean)*N_prior# posterior parametersalpha = alpha_prior + nbeta = beta_prior + N-n# calculate statisticsif stat_type=='mean':num = alphadem = alpha+betaelif stat_type=='mode':num = alpha-1dem = alpha+beta-2elif stat_type=='median':num = alpha-1/3dem = alpha+beta-2/3elif stat_type=='var':num = alpha*betadem = (alpha+beta)**2*(alpha+beta+1)elif stat_type=='skewness':num = 2*(beta-alpha)*np.sqrt(alpha+beta+1)dem = (alpha+beta+2)*np.sqrt(alpha*beta)elif stat_type=='kurtosis':num = 6*(alpha-beta)**2*(alpha+beta+1) - alpha*beta*(alpha+beta+2)dem = alpha*beta*(alpha+beta+2)*(alpha+beta+3)# replace missingvalue = num/demvalue[np.isnan(value)] = np.nanmedian(value)return value

在Target Encoding的基礎上,K-Flod 目標編碼的基本思想源自均值目標編碼,在均值目標編碼中,分類變量由對應于它們的目標均值替換。

class KFoldTargetEncoderTrain(base.BaseEstimator, base.TransformerMixin):def __init__(self,colnames,targetName,n_fold=5, verbosity=True,discardOriginal_col=False):self.colnames = colnamesself.targetName = targetNameself.n_fold = n_foldself.verbosity = verbosityself.discardOriginal_col = discardOriginal_colself.whoami = "DOTA"def fit(self, X, y=None):return selfdef transform(self,X):assert(type(self.targetName) == str)assert(type(self.colnames) == str)assert(self.colnames in X.columns)assert(self.targetName in X.columns)mean_of_target = X[self.targetName].mean()kf = KFold(n_splits = self.n_fold,shuffle = False, random_state=2019)col_mean_name = self.colnames + '_' + 'Kfold_Target_Enc'X[col_mean_name] = np.nanfor tr_ind, val_ind in kf.split(X):X_tr, X_val = X.iloc[tr_ind], X.iloc[val_ind]X.loc[X.index[val_ind], col_mean_name] = X_val[self.colnames].map(X_tr.groupby(self.colnames)[self.targetName].mean())X[col_mean_name].fillna(mean_of_target, inplace = True)if self.verbosity:encoded_feature = X[col_mean_name].valuesprint('Correlation between the new feature, {} and, {} is {}.'.format(col_mean_name,self.targetName, np.corrcoef(X[self.targetName].values,encoded_feature)[0][1]))if self.discardOriginal_col:X = X.drop(self.targetName, axis=1)return X

總結

以上是生活随笔為你收集整理的三种Target Encoding方式总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 后入内射欧美99二区视频 | 日韩一中文字幕 | 羞羞羞网站 | 美足av| 日本波多野结衣在线 | 少妇黄色片 | 女同毛片一区二区三区 | 久久久噜噜噜久久久 | 亚洲春色www| 午夜激情在线播放 | 欧美黑人性受xxxx精品 | 91精品久久久久久久久中文字幕 | 大地资源在线观看免费高清版粤语 | 一级毛片黄片 | 国产午夜一级一片免费播放 | 日韩一区二区三区四区五区六区 | 午夜在线精品 | 人人妻人人澡人人爽 | 在线观看免费黄网站 | 国产精品大屁股白浆一区 | 国产精品毛片一区二区在线看 | 亚州一区二区 | 欧美激情国产日韩精品一区18 | 欧美日韩人妻精品一区在线 | porn麻豆 | 秘密爱大尺度做爰呻吟 | 亚洲欧美日韩在线不卡 | 免费看黄色一级视频 | 国产精品久久久久久免费观看 | 成人黄页网站 | 蜜臀99久久精品久久久久小说 | 男同精品 | 亚洲视频图片小说 | 午夜少妇影院 | 成人久久久精品国产乱码一区二区 | 久久久久久久 | 日本加勒比在线 | 国产精品日韩欧美一区二区三区 | 第四色成人网 | 一区二区三区四区国产 | 亚洲综合在线观看视频 | 中文字幕国产剧情 | 美女午夜影院 | 亚洲av无码国产精品色午夜 | 天天爱天天做天天爽 | av免费在线观看网址 | 日韩小视频在线观看 | 久草视频资源 | 少妇一夜三次一区二区 | 欧美精品乱码视频一二专区 | 欧美偷拍一区二区三区 | 国产做受高潮动漫 | 国产精品一区麻豆 | 亚洲乱论 | 国产精品麻豆成人av电影艾秋 | 成人区视频 | 亚洲av无码一区二区三区观看 | 中文字幕欧美另类精品亚洲 | 中文字幕一区二区三区在线视频 | 超碰一区二区三区 | 无码人妻精品丰满熟人区 | 国产九色| 国产欧美视频在线 | 欧美综合社区 | 日韩性生交大片免费看 | 91蝌蚪视频在线观看 | 色妞色视频一区二区三区四区 | 国产精品tv | 成人动漫一区二区三区 | 亚洲成a人v欧美综合天堂麻豆 | 日韩www视频 | 久久亚洲综合国产精品99麻豆精品福利 | 国产一区二区三区毛片 | av在线免费播放网址 | 四虎影视最新网址 | 中文字幕视频一区二区 | 裸体喂奶一级裸片 | 亚洲图片自拍偷拍区 | 日本大胆裸体做爰视频 | 密乳av| 亚洲精品一区二区三区蜜臀 | 色在线免费视频 | 欧亚av| 诱人的乳峰奶水hd | 欧美色图中文字幕 | 亚洲一区免费 | 久久久久香蕉视频 | 久热色 | 在线观看免费小视频 | 极品国产91在线网站 | 四季av在线一区二区三区 | 亚洲骚| 网友自拍一区 | 樱花电影最新免费观看国语版 | 免费毛片视频 | www.伊人.com | 久久99久久99精品免视看婷婷 | 亚洲va韩国va欧美va | 国产调教一区 |