我是机器学习的新手,在阅读的书籍和文档中,总会有一个介于0和1之间的得分值,代表着0%和100%之间的准确性。
在我自己的scikit-learn机器学习代码中,我得到的分数值介于-750.880810
和5154.771036
之间,这使我感到困惑。
>>> pipe = Pipeline([("scaler", MinMaxScaler()), ("svr", SVR())])
>>> param_grid = {'svr__C':[0.1, 1, 5],
'svr__epsilon':[0.001, 0.01]}
>>> grid = GridSearchCV(estimator=pipe,
param_grid=param_grid,
cv=GroupKFold(n_splits=24)
)
>>> grid.fit(X, y, groups)
GridSearchCV(cv=GroupKFold(n_splits=24), error_score=nan,
estimator=Pipeline(memory=None,
steps=[('scaler',
MinMaxScaler(copy=True,
feature_range=(0, 1))),
('svr',
SVR(C=1.0, cache_size=200, coef0=0.0,
degree=3, epsilon=0.1,
gamma='scale', kernel='rbf',
max_iter=-1, shrinking=True,
tol=0.001, verbose=False))],
verbose=False),
iid='deprecated', n_jobs=None,
param_grid={'svr__C': [0.1, 1, 5], 'svr__epsilon': [0.001, 0.01]},
pre_dispatch='2*n_jobs', refit=True, return_train_score=False,
scoring=None, verbose=0)
>>> grid.best_score_
-750.880810
有人可以向我解释吗?
编辑:
我的输入数据是对发动机的测量。
我有12种不同的引擎故障,每个故障都被测量了两次=> 12x2 = 24个不同的组(我还将尝试12个组)。每个组包括:
答案 0 :(得分:1)
准确性是分类问题的常用评分方法。对于回归问题,它是R平方值。
对于scoring
中的GridSearchCV
参数,
如果为“无”,则使用估算器的计分方法。
对于SVR,默认评分值来自RegressorMixin
,即R^2
。
文档:
返回预测的确定系数R ^ 2。
系数R ^ 2定义为(1-u / v),其中u是残差 平方和((y_true-y_pred)** 2).sum()和v是总数 平方和((y_true-y_true.mean())** 2).sum()。
最佳分数是1.0,并且可能为负(因为 模式可能会更糟)。
始终不变的常数模型 忽略输入特征,预测y的期望值, R ^ 2得分为0.0。
因此,当您将R ^ 2设置为非常大/很小的值时,它会听起来有线连接。
一个玩具示例,以了解得分输出。
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import GridSearchCV, GroupKFold
from sklearn.pipeline import Pipeline
import numpy as np
np.random.seed(0)
X, y = datasets.make_regression()
groups = np.random.randint(0, 10, len(X))
pipe = Pipeline([("scaler", MinMaxScaler()), ("svr", svm.SVR())])
parameters = {'svr__C': [ 0.1, 1, 5, 100], 'svr__epsilon': [0.001, 0.1]}
svr = svm.SVR()
clf = GridSearchCV(pipe, parameters, cv=GroupKFold(n_splits=2))
clf.fit(X, y, groups)
print(clf.best_score_)
# 0.1239707770092825
我建议尝试使用其他cv
并调查问题。