我想在數據科學項目中進行預測,並通過非對稱函數計算誤差。自定義丟失函數sklearn
是否有可能調整的隨機森林或梯度推進(的sklearn)的損失函數?
我已閱讀,則需要修改.pyx文件,但我無法找到任何在我sklearn文件夾(我是在Ubuntu 14.04 LTS)。
您有什麼建議嗎?
我想在數據科學項目中進行預測,並通過非對稱函數計算誤差。自定義丟失函數sklearn
是否有可能調整的隨機森林或梯度推進(的sklearn)的損失函數?
我已閱讀,則需要修改.pyx文件,但我無法找到任何在我sklearn文件夾(我是在Ubuntu 14.04 LTS)。
您有什麼建議嗎?
是的,可以調整。例如:
class ExponentialPairwiseLoss(object):
def __init__(self, groups):
self.groups = groups
def __call__(self, preds, dtrain):
labels = dtrain.get_label().astype(np.int)
rk = len(np.bincount(labels))
plus_exp = np.exp(preds)
minus_exp = np.exp(-preds)
grad = np.zeros(preds.shape)
hess = np.zeros(preds.shape)
pos = 0
for size in self.groups:
sum_plus_exp = np.zeros((rk,))
sum_minus_exp = np.zeros((rk,))
for i in range(pos, pos + size, 1):
sum_plus_exp[labels[i]] += plus_exp[i]
sum_minus_exp[labels[i]] += minus_exp[i]
for i in range(pos, pos + size, 1):
grad[i] = -minus_exp[i] * np.sum(sum_plus_exp[:labels[i]]) +\
plus_exp[i] * np.sum(sum_minus_exp[labels[i] + 1:])
hess[i] = minus_exp[i] * np.sum(sum_plus_exp[:labels[i]]) +\
plus_exp[i] * np.sum(sum_minus_exp[labels[i] + 1:])
pos += size
return grad, hess
您的鏈接用於評分,而不是用於培訓的目標函數。 –
錯了。鏈接到的「評分功能」可以在訓練期間進行優化。 – AlexG
謝謝MMF,但我理解像米哈伊爾。我瞭解到,您的鏈接顯示將構建由scikitlearn執行的k-fold交叉驗證所使用的記分器。您的鏈接中的記分員不在增長的樹過程中使用。 –