最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分位數(shù)回歸模型quantile regeression應(yīng)用詳解及示例教程

 更新時(shí)間:2021年11月02日 10:17:08   作者:deephub  
這篇文章主要為大家介紹了介紹了分位數(shù)回歸quantile regeression的概念詳解及代碼示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助

普通最小二乘法如何處理異常值? 它對待一切事物都是一樣的——它將它們平方! 但是對于異常值,平方會(huì)顯著增加它們對平均值等統(tǒng)計(jì)數(shù)據(jù)的巨大影響。

我們從描述性統(tǒng)計(jì)中知道,中位數(shù)對異常值的魯棒性比均值強(qiáng)。 這種理論也可以在預(yù)測統(tǒng)計(jì)中為我們服務(wù),這正是分位數(shù)回歸的意義所在——估計(jì)中位數(shù)(或其他分位數(shù))而不是平均值。 通過選擇任何特定的分位數(shù)閾值,我們既可以緩和異常值,也可以調(diào)整錯(cuò)誤的正/負(fù)權(quán)衡。我們還可以處理需要分位數(shù)界限的情況,例如:嬰兒的安全出生體重,頂級競技電子競技玩家的技能水平,等等。

什么是分位數(shù)?

分位數(shù)(Quantile),亦稱分位點(diǎn),是指將一個(gè)隨機(jī)變量的概率分布范圍分為幾個(gè)等份的數(shù)值點(diǎn),常用的有中位數(shù)(即二分位數(shù))、四分位由3個(gè)部分組成(第25、50和75個(gè)百分位,常用于箱形圖)和百分位數(shù)等。

什么是分位數(shù)回歸?

分位數(shù)回歸是簡單的回歸,就像普通的最小二乘法一樣,但不是最小化平方誤差的總和,而是最小化從所選分位數(shù)切點(diǎn)產(chǎn)生的絕對誤差之和。 如果 q=0.50(中位數(shù)),那么分位數(shù)回歸會(huì)出現(xiàn)一個(gè)特殊情況 - 最小絕對誤差(因?yàn)橹形粩?shù)是中心分位數(shù))。我們可以通過調(diào)整超參數(shù) q,選擇一個(gè)適合平衡特定于需要解決問題的誤報(bào)和漏報(bào)的閾值。

statsmodels中的分位數(shù)回歸

分位數(shù)回歸是一種不太常見的模型,但 Python中的StatsModel庫提供了他的實(shí)現(xiàn)。這個(gè)庫顯然受到了R的啟發(fā),并從它借鑒了各種語法和API。

StatsModel使用的范例與scikit-learn稍有不同。但是與scikit-learn一樣,對于模型對象來說,需要公開一個(gè).fit()方法來實(shí)際訓(xùn)練和預(yù)測。但是不同的是scikit-learn模型通常將數(shù)據(jù)(作為X矩陣和y數(shù)組)作為.fit()的參數(shù),而StatsModel是在初始化對象時(shí)傳入數(shù)據(jù),而fit方法只傳遞一些可以調(diào)試的超參數(shù)。

下面是來自statsmodel的例子(Engel數(shù)據(jù)集包含在與statmodels中)

%matplotlib inline
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt

data = sm.datasets.engel.load_pandas().data
mod = smf.quantreg("foodexp ~ income", data)
res = mod.fit(q=0.5)
print(res.summary())

我們可以看看quantile regression model fit的幫助文檔:

help(quant_mod.fit)

分位數(shù)回歸與線性回歸

標(biāo)準(zhǔn)最小二乘回歸模型僅對響應(yīng)的條件均值進(jìn)行建模,并且計(jì)算成本較低。 相比之下,分位數(shù)回歸最常用于對響應(yīng)的特定條件分位數(shù)進(jìn)行建模。 與最小二乘回歸不同,分位數(shù)回歸不假設(shè)響應(yīng)具有特定的參數(shù)分布,也不假設(shè)響應(yīng)具有恒定方差。

下表總結(jié)了線性回歸和分位數(shù)回歸之間的一些重要區(qū)別:

xgboost的分位數(shù)回歸

最后如果想使用xgboost,又想試試分位數(shù)回歸,那么可以參考以下代碼

class XGBQuantile(XGBRegressor):
  def __init__(self,quant_alpha=0.95,quant_delta = 1.0,quant_thres=1.0,quant_var =1.0,base_score=0.5, booster='gbtree', colsample_bylevel=1,
                colsample_bytree=1, gamma=0, learning_rate=0.1, max_delta_step=0,max_depth=3, min_child_weight=1, missing=None, n_estimators=100,
                n_jobs=1, nthread=None, objective='reg:linear', random_state=0,reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,silent=True, subsample=1):
    self.quant_alpha = quant_alpha
    self.quant_delta = quant_delta
    self.quant_thres = quant_thres
    self.quant_var = quant_var    
    super().__init__(base_score=base_score, booster=booster, colsample_bylevel=colsample_bylevel,
       colsample_bytree=colsample_bytree, gamma=gamma, learning_rate=learning_rate, max_delta_step=max_delta_step,
       max_depth=max_depth, min_child_weight=min_child_weight, missing=missing, n_estimators=n_estimators,
       n_jobs= n_jobs, nthread=nthread, objective=objective, random_state=random_state,
       reg_alpha=reg_alpha, reg_lambda=reg_lambda, scale_pos_weight=scale_pos_weight, seed=seed,
       silent=silent, subsample=subsample)    
    self.test = None
  
  def fit(self, X, y):
    super().set_params(objective=partial(XGBQuantile.quantile_loss,alpha = self.quant_alpha,delta = self.quant_delta,threshold = self.quant_thres,var = self.quant_var) )
    super().fit(X,y)
    return self
  
  def predict(self,X):
    return super().predict(X)
  
  def score(self, X, y):
    y_pred = super().predict(X)
    score = XGBQuantile.quantile_score(y, y_pred, self.quant_alpha)
    score = 1./score
    return score      
  @staticmethod
  def quantile_loss(y_true,y_pred,alpha,delta,threshold,var):
    x = y_true - y_pred
    grad = (x<(alpha-1.0)*delta)*(1.0-alpha)-  ((x>=(alpha-1.0)*delta)& (x<alpha*delta) )*x/delta-alpha*(x>alpha*delta)
    hess = ((x>=(alpha-1.0)*delta)& (x<alpha*delta) )/delta 
 
    grad = (np.abs(x)<threshold )*grad - (np.abs(x)>=threshold )*(2*np.random.randint(2, size=len(y_true)) -1.0)*var
    hess = (np.abs(x)<threshold )*hess + (np.abs(x)>=threshold )
    return grad, hess
  
  @staticmethod
  def original_quantile_loss(y_true,y_pred,alpha,delta):
    x = y_true - y_pred
    grad = (x<(alpha-1.0)*delta)*(1.0-alpha)-((x>=(alpha-1.0)*delta)& (x<alpha*delta) )*x/delta-alpha*(x>alpha*delta)
    hess = ((x>=(alpha-1.0)*delta)& (x<alpha*delta) )/delta 
    return grad,hess  
  @staticmethod
  def quantile_score(y_true, y_pred, alpha):
    score = XGBQuantile.quantile_cost(x=y_true-y_pred,alpha=alpha)
    score = np.sum(score)
    return score  
  @staticmethod
  def quantile_cost(x, alpha):
    return (alpha-1.0)*x*(x<0)+alpha*x*(x>=0)  
  @staticmethod
  def get_split_gain(gradient,hessian,l=1):
    split_gain = list()
    for i in range(gradient.shape[0]):
      split_gain.append(np.sum(gradient[:i])/(np.sum(hessian[:i])+l)+np.sum(gradient[i:])/(np.sum(hessian[i:])+l)-np.sum(gradient)/(np.sum(hessian)+l) )    
    return np.array(split_gain)

https://gist.github.com/benoitdescamps/af5a8e42d5cfc7981e960e4d559dad19#file-xgboostquantile-py

對于LightGBM這里有一篇詳細(xì)的實(shí)現(xiàn)文章:

http://jmarkhou.com/lgbqr/

以上就是分位數(shù)回歸quantile regeression詳解及示例教程的詳細(xì)內(nèi)容,更多關(guān)于分位數(shù)回歸quantile regeression的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python判斷是空的實(shí)例分享

    python判斷是空的實(shí)例分享

    在本篇內(nèi)容里小編給大家整理的是關(guān)于python怎么判斷是空的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2020-07-07
  • python爬蟲爬取股票的北上資金持倉數(shù)據(jù)

    python爬蟲爬取股票的北上資金持倉數(shù)據(jù)

    這篇文章主要介紹了python爬蟲爬取股票的北上資金持倉數(shù)據(jù),文章基于python的相關(guān)資料展開爬取數(shù)據(jù)的詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Python執(zhí)行程序獲取所在目錄的解決方案

    Python執(zhí)行程序獲取所在目錄的解決方案

    工作需要,寫一個(gè)小腳本,其中有個(gè)需求是獲取實(shí)際的執(zhí)行程序所在路徑(python代碼由pyinstaller打包成執(zhí)行程序),這篇文章主要介紹了Python執(zhí)行程序獲取所在目錄的解決方案,需要的朋友可以參考下
    2024-05-05
  • python進(jìn)行數(shù)據(jù)預(yù)處理的4個(gè)重要步驟

    python進(jìn)行數(shù)據(jù)預(yù)處理的4個(gè)重要步驟

    在數(shù)據(jù)科學(xué)項(xiàng)目中,數(shù)據(jù)預(yù)處理是最重要的事情之一,本文詳細(xì)給大家介紹python進(jìn)行數(shù)據(jù)預(yù)處理的4個(gè)重要步驟:拆分訓(xùn)練集和測試集,處理缺失值,處理分類特征和進(jìn)行標(biāo)準(zhǔn)化處理,需要的朋友可以參考下
    2023-06-06
  • 讀Json文件生成pandas數(shù)據(jù)框詳情

    讀Json文件生成pandas數(shù)據(jù)框詳情

    這篇文章主要介紹了讀Json文件生成pandas數(shù)據(jù)框詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08
  • python3獲取當(dāng)前文件的上一級目錄實(shí)例

    python3獲取當(dāng)前文件的上一級目錄實(shí)例

    下面小編就為大家分享一篇python3獲取當(dāng)前文件的上一級目錄實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • pd.DataFrame統(tǒng)計(jì)各列數(shù)值多少的實(shí)例

    pd.DataFrame統(tǒng)計(jì)各列數(shù)值多少的實(shí)例

    今天小編就為大家分享一篇pd.DataFrame統(tǒng)計(jì)各列數(shù)值多少的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 使用Python腳本操作MongoDB的教程

    使用Python腳本操作MongoDB的教程

    這篇文章主要介紹了使用Python腳本操作MongoDB的教程,MongoDB作為非關(guān)系型數(shù)據(jù)庫得到了很大的宣傳力度,而市面上的教程一般都是講解JavaScript的腳本操作,本文則是基于Python,需要的朋友可以參考下
    2015-04-04
  • Pytorch 圖像變換函數(shù)集合小結(jié)

    Pytorch 圖像變換函數(shù)集合小結(jié)

    這篇文章主要介紹了Pytorch 圖像變換函數(shù)集合小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 關(guān)于使用Python的time庫制作進(jìn)度條程序

    關(guān)于使用Python的time庫制作進(jìn)度條程序

    這篇文章主要介紹了關(guān)于使用Python的time庫制作進(jìn)度條程序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評論

平定县| 宜章县| 苍溪县| 泉州市| 黔东| 措勤县| 三门县| 绵阳市| 和政县| 兖州市| 富平县| 南投县| 绥棱县| 宜丰县| 石台县| 池州市| 梨树县| 锡林郭勒盟| 宁城县| 南川市| 屏山县| 南雄市| 惠安县| 建始县| 曲沃县| 屯留县| 通渭县| 奇台县| 娄底市| 浦城县| 张家口市| 右玉县| 湄潭县| 西华县| 辉南县| 宽甸| 镇原县| 沭阳县| 八宿县| 乌拉特中旗| 五原县|