【问题标题】:Knowing the number of iterations needed for convergence in SVR scikit-learn了解 SVR scikit-learn 中收敛所需的迭代次数
【发布时间】:2017-05-20 02:08:39
【问题描述】:

我正在尝试优化 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

【问题讨论】:

  • (1) 一般来说,你应该使用更多的正则化并实现完全收敛 (2) 没有办法先验计算所需的迭代次数(当然这也很大程度上取决于使用的算法)。 (3) 在 a-posteriori 设置中,我在 API 中看不到任何内容(我认为 SGD 方法不同;但 SVR 在内部使用 liblinear/libsvm,在您的情况下是 libsvm,因为 rbf 内核),但您可以尝试为此修改代码或激活详细程度(我认为)。
  • (4) 当然:总是使用交叉验证。

标签: python scikit-learn svm


【解决方案1】:

如果您想查看 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 是您要查找的内容

【讨论】:

  • 感谢您的回答。我试过你的代码,但我没有得到你得到的信息。我正在使用 Anaconda 的 jupyter notebook 和 scikit-learn 0.18.1 版。您认为这是什么原因?
  • “没有得到信息”是什么意思?有没有把verbose=2放在构造函数里,没有得到我输出的代码..?
  • 我得到的输出是:SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.2, gamma='auto', kernel='rbf', max_iter =-1, 收缩=真, tol=0.001, 详细=5)
  • 我在聊天中找不到你...请进入chat.stackoverflow.com并寻找房间“SVR迭代”并进入它
  • 很高兴我提供了帮助,如果您将其标记为答案“v”,我将不胜感激,该答案略低于评级 - 供未来用户使用。我不知道为什么 Jupyter 不显示它,但这是另一个问题 :)
猜你喜欢
  • 2023-04-07
  • 2013-12-28
  • 2021-08-08
  • 2015-02-12
  • 2018-05-07
  • 2014-09-02
  • 2014-03-21
  • 2019-03-11
  • 2014-08-14
相关资源
最近更新 更多