我正在尝试优化 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笔记本,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_))