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 输出范围?的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中实现逻辑回归时 Scikit-learn ValueError
如何在训练期间为 Scikit Learn SVM 中的每个标签分配概率?
如何在 Scikit-Learn 的随机森林分类器中设置子样本大小?特别是对于不平衡的数据
ValueError:使用 GaussianNB 在 scikit-learn (sklearn) 中设置具有序列的数组元素