저는 불균형 한 데이터 집합이있는 분류 문제에 대해 연구 중이며 고정밀도에 관심이 있습니다.XGBoost (f_beta)의 매개 변수와 함께 평가 함수 사용
따라서 XGBoost의 목적 함수를 정밀도에 더 많은 영향을 줄 수있는 것으로 변경하고 싶습니다. F_beta score 그냥 일을 할 것 같다,하지만 난 그게 문제가 있습니다
model_xgbm = XGBClassifier(objective=fbeta_score)
random_search = RandomizedSearchCV(model_xgbm, param_distributions=param_dist, n_iter=n_iter_search,
scoring='average_precision')
이 작동을하지만, 베타 N 의무이기 때문에 나는 그것을 작동합니까 방법을 모르겠어요 (베타를 제공하지 않았다 매개 변수 ...)
model_xgbm = XGBClassifier(objective=fbeta_score(beta=0.5))
random_search = RandomizedSearchCV(model_xgbm, param_distributions=param_dist,
n_iter=n_iter_search,
scoring='average_precision')
이 단순히 작동하지 않습니다 (:) "형식 오류 fbeta_score()는 적어도 3 개 인자 (주어진 1) 소요됩니다." 그러나, 나는 여기에 다른 두 가지 논쟁을 실제로 제공 할 수는 없다.
기능을 복사하거나 포장하지 않고 맞춤 목표로 붙여 넣기가없는 해결책이 있습니까?
편집 : 내가 도움이 될 수있는 기능을 발견 make_param을,하지만 불행히도 나는 그것이 작동시킬 수없는 것 :
model_xgbm = XGBClassifier(objective=make_scorer(fbeta_score, beta=0.5))
random_search = RandomizedSearchCV(model_xgbm, param_distributions=param_dist,
n_iter=n_iter_search,
scoring='precision')
을하지만이 작동하지 않습니다 중 하나 "형식 오류 : __call __()은 적어도 4 개의 인수 (주어진 3 개)를받습니다. " 모델 선택에 사용하고 싶지 않습니다. XGBoost 평가 기의 목적 함수가되기를 원합니다! 따라서, 위 링크의 맨 아래에있는 예제는 나를 위해 작동하지 않습니다.
EDIT2 : 사실 문제가 XGBoost 분류가 나를 목표로 그라데이션과 헤센를 반환하는 기능을 제공 할 것으로 예상 것 같다, 그래서가 ... 누군가가 그렇게 할 것 래퍼를 확인을 아는가 나를? 당신이 목적 함수를 전달하는
func(y_true, y_predicted)
을 필요로
객관적인 함수를 전달하기위한 소스 코드를 살펴 보는 것이 좋습니다 - 코드가 인수로 'y_true'와'y_pred'를 필요로한다고 불평하지만 xgboost가 ak로 막 혔기 때문에 어떻게해야할지 모르겠습니다. 이 람다 함수를 처리합니다.나는 실제로 내가 거대한 계급 불균형을 가지고있는 것과 똑같이하는 것에 관심이있다. 일단 내가 알아 낸 (또는 누군가와 다른 사람이 있다면 나는 컴백한다). – Chinny84
누군가가 비슷한 문제를 다루는 것을 알고있다. 주제에 대해 좀 더 읽었을 때 나는 객관적인 기능이 내가 예상했던 것보다 약간 낮은 수준이라는 것을 깨달았습니다. 실제로 당신 자신의 그라디언트와 헤센을 계산할 것을 요구합니다. – JohnnyQ
나는 대답을 게시했으나 나중에 xgboost에 대한 래퍼에 대한 참조를 위해 주로 사용했습니다. 그것은 당신의 궁극적 인 문제에 대답하지 않지만 계속 파고 들어갈 것입니다. – Chinny84