Scikit Learn:如何在回归中设置 SVM 输出范围?

Posted

技术标签:

【中文标题】Scikit Learn:如何在回归中设置 SVM 输出范围?【英文标题】:Scikit Learn: How can I set the SVM Output range in regression? 【发布时间】: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)

谢谢!

【问题讨论】:

您可以发布您的训练数据的示例条目吗? 【参考方案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 以暴露不需要的行为?否则很难诊断问题...

以上是关于Scikit Learn:如何在回归中设置 SVM 输出范围?的主要内容,如果未能解决你的问题,请参考以下文章

目标的缩放导致 Scikit-learn SVM 回归崩溃

带有 SVM 回归的 Scikit-learn 网格搜索

在 Python 中实现逻辑回归时 Scikit-learn ValueError

如何在训练期间为 Scikit Learn SVM 中的每个标签分配概率?

如何在 Scikit-Learn 的随机森林分类器中设置子样本大小?特别是对于不平衡的数据

ValueError:使用 GaussianNB 在 scikit-learn (sklearn) 中设置具有序列的数组元素