astype函式 lightGBM自定義損失函式

2021-10-11 06:02:33 字數 1573 閱讀 1616

lightgbm自定義損失函式需要完成兩個主要的函式:1)梯度求解函式,完成梯度下降用到的導數;2)損失函式,求解**值與真實值之間差距的衡量指標。

一:配套函式定義

1):傳統的最小二乘損失函式

2):區間加權的損失函式

二:自定義損失函式的應用

一:配套函式定義

1):傳統的最小二乘損失函式

梯度求解函式:

defcustom_normal_train(y_true, y_pred):

residual=(y_true-y_pred).astype("float")#真實資料與**資料的差距

grad=-2*(residual)/y_true#一階導數

hess=2/y_true#二階導數

returngrad, hess

損失衡量函式:

def custom_normal_valid(y_true, y_pred):

residual = (y_true - y_pred).astype("float")

loss = (residual/y_true)**2

return "custom_asymmetric_eval", np.mean(loss), false

2):區間加權的損失函式

def custom_normal_train(y_true, y_pred):

residual = (y_true - y_pred).astype("float")

grad = np.where(residual<0, -2*(residual)/(y_true+1), -10*2*(residual)/(y_true+1))#對預估里程低於實際里程的情況加大懲罰

hess = np.where(residual<0, 2/(y_true+1), 10*2/(y_true+1))#對預估里程低於實際里程的情況加大懲罰

return grad, hess

def custom_normal_valid(y_true, y_pred):

residual = (y_true - y_pred).astype("float")

loss = np.where(residual<0, (residual/(y_true+1))**2, 10*(residual/(y_true+1))**2)#對預估里程低於實際里程的情況加大懲罰

return "custom_asymmetric_eval", np.mean(loss), false

二:自定義損失函式的應用

gbm = lgb.lgbmregressor(objective=custom_normal_train)

gbm.fit(x_train, y_train,eval_set=[(x_test, y_test)],eval_metric=custom_normal_valid)

深入淺出之dtype 和astype 函式

numpy最重要的乙個特點就是其n維陣列物件 即ndarray 該物件是乙個快速而靈活的大資料集容器。你可以利用這種陣列對整塊資料執行一些數 算,ndarray是乙個通用的同構資料多維容器,也就是說,其中的所有元素必須是相同型別的。用於說明陣列中的資料型別的物件 作用 結構化陣列型別並加以使用 語法...

使用astype實現dataframe欄位型別轉換

在有些情況下,我們需要在dataframe型別的資料中通過切片獲得我們所需要的資料,然後轉換為我們所需要的型別。dataframe資料型別的轉換需要用到astype函式。encoding utf 8 import pandas as pd df pd.dataframe pd.read csv fi...

使用astype實現dataframe欄位型別轉換

在有些情況下,我們需要在dataframe型別的資料中通過切片獲得我們所需要的資料,然後轉換為我們所需要的型別。dataframe資料型別的轉換需要用到astype函式。筆者一開始想使用float 將dataframe轉換為float型別,然後編譯器報錯了 無法將這個系列轉換為float型別?通過t...