簡體   English   中英

了解 SVR scikit-learn 中收斂所需的迭代次數

[英]Knowing the number of iterations needed for convergence in SVR scikit-learn

我正在嘗試優化 SVR 模型並由於過度擬合而面臨問題,為了克服這個問題,我試圖減少迭代次數而不是讓它直到收斂。

為了比較這兩種模型,我需要兩種情況的迭代次數。 在打開的情況下(max_iter=-1),我如何知道收斂所需的迭代次數?

這是我的代碼:

model_1=SVR(kernel='rbf', C=316, epsilon=0, gamma=0.003162,max_iter=2500)
model_1.fit(tr_sets[:,:2],tr_sets[:,2])
print(model_1.score)
model_2=SVR(kernel='rbf', C=316, epsilon=0, gamma=0.003162,max_iter=-1)
model_2.fit(tr_sets[:,:2],tr_sets[:,2])
print(model_2.score)

編輯:現在通過設置verbose=2解決了 IPython IDE 的問題,但仍需要在 Jupyter notebook、spyder 中查看或寫入外部文件,因為詳細選項似乎僅適用於 IPython IDE

如果您想查看 SVR 的進度,請在 SVR 的構造函數中輸入verbose=2 -注意這會使進度變慢一個數量級

from sklearn.svm import SVR
import numpy as np

n_samples, n_features = 10, 5
np.random.seed(0)
y = np.random.randn(n_samples)
X = np.random.randn(n_samples, n_features)
clf = SVR(C=1.0, epsilon=0.2,verbose=2)
clf.fit(X, y)

輸出將是

optimization finished, #iter = 4
obj = -4.366801, rho = -0.910470
nSV = 7, nBSV = 5

#iter是您要查找的內容

在現代版本的 Scikit-learn 中,您有n_iter_屬性 ( docs ),它是一個形狀為n_classes * (n_classes - 1) // 2的 ndarray,其中包含所有需要的迭代以適合每個類的所有模型:

import numpy as np

model = SVR(...parameters)
model.fit(x, y)
print('Iterations needed:', np.sum(model.n_iter_))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM