2015-03-19 47 views
2

我是scikit-learn的常用用戶,我想了解一些關於SGD的「class_weight」參數的見解。什麼是class_weight參數在scikit-learn中的作用SGD

我能弄清楚,直到函數調用

plain_sgd(coef, intercept, est.loss_function, 
       penalty_type, alpha, C, est.l1_ratio, 
       dataset, n_iter, int(est.fit_intercept), 
       int(est.verbose), int(est.shuffle), est.random_state, 
       pos_weight, neg_weight, 
       learning_rate_type, est.eta0, 
       est.power_t, est.t_, intercept_decay) 

https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/stochastic_gradient.py

在此之後它去sgd_fast,我不是很好的CPython的。你能否就這些問題給予一些關注。

  1. 我有一個偏於開發集的類,其中正面類是15k和負面類是36k。 class_weight會解決這個問題嗎?或者採取欠採樣將是一個更好的主意。我的數字越來越好,但很難解釋。
  2. 如果是,那麼它是如何做到的。我的意思是它應用於特徵懲罰或者它是優化函數的一個權重。我如何向外行解釋這一點?

回答

5

class_weight確實可以幫助提高訓練在不平衡數據上的分類模型的ROC AUC或f1分數。

您可以嘗試class_weight="auto"選擇與班級頻率成反比的加權。你也可以嘗試通過你自己的權重有一個Python類字典與類標籤作爲鍵和權值作爲值。

調整權重可以通過網格搜索與交叉驗證來實現。

內部這是通過從class_weight(取決於每個樣品的類別標籤)推導sample_weight完成的。隨後使用樣本權重來縮放單個樣本對用於訓練具有隨機梯度下降的線性分類模型的損失函數的貢獻。

功能懲罰通過penaltyalpha超參數獨立控制。 sample_weight/class_weight對它沒有影響。

相關問題