【问题标题】:Scikit Learn: How can I set the SVM Output range in regression?Scikit Learn:如何在回归中设置 SVM 输出范围?
【发布时间】:2015-07-22 00:54:11
【问题描述】:

我在[-1 , 1] 范围内有一些输入数据,在[ 0, 1] 范围内有一些输出数据。当我使用 SMV 回归来预测输出时 我知道预测的输出值介于-1 和 1 之间。我是什么 失踪?代码是:

    svr=svm.SVR(C=0.1, gamma=0.01,kernel='rbf') 
    y_rbf =svr.fit(TrainingIn,TrainingOut) 
    y_hat=svr.predict(TestIn)

谢谢!

【问题讨论】:

  • 您可以发布您的训练数据的示例条目吗?

标签: python scikit-learn svm regression


【解决方案1】:

我保留这个答案仅供将来参考(它不直接回答 PSan 的问题)。

请务必注意(可能与其名称相反)sklearn.svm.SVR 既可以用作预测器,也可以用作分类器。如果输入带标签的数据,predict 将输出 {-1, +1}

【讨论】:

  • 拜托,你能解释一下吗?抱歉,我不确定我是否理解您的回复
  • 这个答案是完全错误的,它将 SVM [支持向量机] 与 SVR [支持向量回归] 混淆了。
  • 检查问题。他正在运行 SVR。
  • 是的,他是,而且你的回答与 SVR 无关,特别是“你在这里执行的是一类拟合” - 不,他不是,他正在执行回归
  • 我越来越不确定我们是否在谈论同一件事。也许我们可以看到我们不同意的具体点。问题不是关于一般的 SVR/SVM,而是关于 svm 模块中的特定 SVR 类。文档清楚地指出,sklearn.svm.SVR - 尽管它是 SVR 名称 - 既可以用作回归器,也可以用作分类器。给定训练的标记输入,它将“预测”+1 / -1;它正在执行“分类预测”。随意陈述您不同意的确切观点。
【解决方案2】:

鉴于此处的信息,无法重建您的问题。不过,我很确定,这与数据的预处理/缩放有关。让SVR 运行的示例 sn-p 可能如下所示(随意调整以适应您的需要):

from sklearn.svm import SVR
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.cross_validation import train_test_split
from sklearn.metrics import mean_squared_error

# replace this parth with your data, e.g. TrainingIn/TrainingOut
boston = load_boston()
X, y = boston.data, boston.target

X1, X2, y1, y2 = train_test_split(X, y)
svr = SVR(C=80)
scaler = StandardScaler()
svr.fit(scaler.fit_transform(X1), y1)
y_pred = svr.predict(scaler.transform(X2))

print mean_squared_error(y2, y_pred)

【讨论】:

  • 我以这种方式缩放: scalerI = preprocessing.StandardScaler() scalerI.fit(TrainingIn_ps) TrainingIn = scalerI.transform(TrainingIn_ps) TestIn = scalerI.transform(TestIn_ps) 也许我没有使用缩放器以一种很好的方式,我只缩放了两个输入而不是输出。但是有没有明确的方法来为回归的输出设置一个特定的范围?
  • 您能否发布部分数据(如@pyan 所述)或至少发布一段代码 sn-p 以暴露不需要的行为?否则很难诊断问题...
猜你喜欢
  • 2016-03-12
  • 2016-07-18
  • 2017-10-11
  • 2018-10-15
  • 2014-10-24
  • 2017-01-12
  • 2019-09-15
  • 2014-06-17
相关资源
最近更新 更多