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...