![](/img/trans.png)
[英]Why does `partial_fit` in `SGDClassifier` suffer from gradual reduction in model accuracy
[英]partial_fit with SGDClassifier gives fluctuating accuracy
我的數據在一個稀疏矩陣中。 在開始大計算之前,我現在首先處理具有約 500k 行的子集。 數據是二元數加上熵和字符串長度,完整的數據集包含數百萬行乘以 1400 列。 該模型旨在幫助表征這些字符串,因此我使用SGDClassifier
進行邏輯回歸。
由於尺寸較大,我決定在我的SGDClassifier
上使用partial_fit
,但是我在每個時期得到的計算出area-under-curve
值似乎波動很大。
這是我的代碼:
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
model = SGDClassifier(loss='log', alpha=1e-10, n_iter=50, n_jobs=-1, shuffle=True)
for f in file_list:
data = dill.load(open(f))
X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2)
X_train, X_holdout, y_train, y_holdout = train_test_split(data, labels, test_size=0.05)
for ep in range(max_epoch):
model.partial_fit(X_train, y_train, classes=np.unique(y_train))
# Calculate Area under ROC curve to see if things improve
probs = model.predict_proba(X_holdout)
auc = roc_auc_score(y_holdout, [x[1] for x in probs])
if auc > best_auc: best_auc = auc
print('Epoch: %d - auc: %.2f (best %.2f)' %(ep, auc, best_auc))
發生的情況是 auc 迅速上升到~0.9,但隨后波動很大。 有時它甚至會下降到 ~0.5-0.6,然后又回升。 我認為更auc
邏輯的auc
應該隨着每個 epoch 繼續普遍增加,只有很小的下降可能,直到它找到一個平衡值,其中更多的訓練幾乎沒有任何改善。
我做錯了什么,或者這是partial_fit
可能的“正常”行為嗎? 當我在較小的數據集上使用fit
時,我從未見過這種行為。
通常, partial_fit
已認為是傾向於減少或波動精度。 在某種程度上,這可以通過改組並僅提供整個數據集的一小部分來稍微緩解。 但是,對於較大的數據,使用 SGDClassifier/SVM 分類器,在線訓練似乎只會降低准確性。
我試着用它做實驗,發現使用低學習率有時可以幫助我們。 粗略的類比是,在大數據上重復訓練同一個模型,導致模型忘記從以前的數據中學到的東西。 因此,使用很小的學習率會減慢學習和遺忘的速度!
我們可以使用sklearn
提供的adaptive
學習率功能,而不是手動提供速率。 注意模型初始化部分,
model = SGDClassifier(loss="hinge", penalty="l2", alpha=0.0001, max_iter=3000, tol=None, shuffle=True, verbose=0, learning_rate='adaptive', eta0=0.01, early_stopping=False)
這在 [scikit docs] 中描述為:
'adaptive':eta = eta0,只要訓練不斷減少。 每次 n_iter_no_change 連續 epochs 未能將訓練損失減少 tol 或未能將驗證分數增加 tol 如果 early_stopping 為 True 時,則當前學習率除以 5。
隨着學習率的變化,我得到了非常好的結果(從數據集第四部分的最初從 98% 下降到 28%)到 100% 的模型准確度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.