相似度得分:Sklearn SVR 能否预测大于 1 且小于 0 的值?

数据挖掘 Python scikit-学习 回归 相似
2022-02-13 11:08:34

我正在使用svm.SVR()scikit-learn 对我的训练数据应用逻辑回归来解决相似性问题。使用 GridSearchCV,我正在使用评分为“R2”找到最佳超参数。最好的超参数是C=1, cache_size=200, coef0=0.0, degree=3, epsilon=0.001, gamma=0.005, kernel='rbf', shrinking=True, tol=0.001.

我将训练数据和训练标签拟合为model.fit(X_train, Y_train)

现在我在与以下相同的模型中使用测试数据:prediction = model.predict(X_test)

我使用 SVM 回归的原因是要找到两个输入之间的相似性。但是,对于某些测试数据,预测包含负值(小于 0),对于所有相同与相同的比较,它返回值为 1.09469178。我期望该值介于 0 和 1 之间。这是正常的还是我做错了什么?

2个回答

我正在使用 scikit-learn 中的 svm.SVR() 对我的训练数据应用逻辑回归来解决相似性问题。

稍等一下,如果您使用的是支持向量回归,那么您就没有使用逻辑回归。这两个是非常不同的算法。它们甚至不适用于同一类型的问题。当您预测连续目标时使用支持向量回归,而逻辑回归(尽管名称)是一种分类算法。

但是,对于某些测试数据,预测包含负值(小于 0),对于所有相同与相同的比较,它返回值为 1.09469178。

如果您使用支持向量回归,这没有什么不寻常的。支持向量机(理论上)可以输出任何实数。

另一方面,逻辑回归是一个sigmoid 函数它将接受任何实数作为输入并输出 0 到 1 之间的结果。也许您打算使用 scikit 的LogisticRegression模型而不是 SVR?

我使用 SVM 回归的原因是要找到两个输入之间的相似性。

您能否详细说明您的用例?支持向量回归并不是真的要用于计算相似度。

我推测您有一个 (X, y) 对的训练集(其中 y 是介于 0 和 1 之间的标签)。您正在训练模型以输出,即 y 的预测。为了找到两个输入的相似性,您将它们都传递给模型并测量的差异。是对的吗?y^XiXjy^iy^j

如果是这样,我认为这是计算相似度的一种非常迂回的方法,并且不太可能比更直接的方法产生更好的结果。我不确定您是否需要机器学习算法。

您是否研究过可能适合您的问题的其他相似性指标?对于基于欧几里得距离的相似性,您可以计算(其中是欧几里得距离函数)。 如果您更关心两个输入向量方向的相似性,余弦相似度可能是一个不错的选择。11+d(Xi,Xj)d

这是正常的:除非您的训练数据很好地覆盖了总体,否则测试集必然包含与训练数据中看到的案例略有偏差的实例。使用任何回归方法,这可能会导致预测值略微超出范围。如果应用程序需要标准化值,则这些偏差应在后处理过程中以编程方式更正(即,任何负数更改为 0,任何高于 1 的值都更改为 1)。