将 scikit-learn 中 GridSearchCV 中每个折叠的准确性和平均值制成表格
Tabulate accuracy and mean for each fold in GridSearchCV from scikit-learn
我在 scikit-learn Python3 中使用两个参数集 A 和 B 对我的模型进行网格搜索。代码如下所示:
parameterA = ['a', 'b']
parameterB = np.array([10, 100])
param_grid = dict(parameterA=parameterA, parameterB=parameterB)
model = buildModel()
grid = GridSearchCV(model, param_grid, scoring="accuracy")
grid_result = grid.fit(X, Y)
for parameters, scores in grid_result.grid_scores_:
print("Mean: " + scores.mean())
print("Parameters: " + parameters)
- 我是否理解正确,score.mean() 是准确度的平均值?
- 如何输入自己的评分函数?在文档中,它表示 "scorer(estimator, X, y)"。我从哪里得到 X 和 y?它们不是交叉验证的训练和测试集吗?它们可以访问吗?
- 是否有可能获得交叉验证的 每个 折叠的所有这些值?默认情况下,有 k=3 倍,所以我希望每个参数组合的平均值和准确度是三倍。
首先,您不应再使用 grid_scores_
,因为它在版本 0.18 中已弃用,取而代之的是 cv_results_
属性。 grid_scores_
属性在版本 0.20.
中不可用
Q° : 我是否理解正确,score.mean() 是准确度的平均值?
A :属性 cv_results_
实际上 returns 是您要查找的所有指标的字典。检查一下:cv_result_
.
Q° : 是否有可能为交叉验证的每一折获得所有这些值?默认情况下,有 k=3 倍,所以我希望每个参数组合的平均值和准确度是三倍。
A :是的,实际上您需要使用属性 verbose
。 verbose
必须是一个整数,它控制详细程度:越高,消息越多。例如你可以设置 verbose=3
.
Q° : 如何输入自己的评分函数?
A :在你定义了一个损失函数之后使用make_scorer。您的损失函数必须具有以下签名:score_func(y, y_pred, **kwargs)
。基本损失函数可以是分类良好的样本与总样本数的比率(您可以想象任何一种指标,可以让您很好地了解分类器的性能)。
你会这样做:
def my_loss_func(y, y_pred):
return np.sum(y == y_pred)/float(len(y_pred))
my_scorer = make_scorer(my_loss_func, greater_is_better=True)
然后您可以在您的 GridSearch 中使用您的 scorer
。
我在 scikit-learn Python3 中使用两个参数集 A 和 B 对我的模型进行网格搜索。代码如下所示:
parameterA = ['a', 'b']
parameterB = np.array([10, 100])
param_grid = dict(parameterA=parameterA, parameterB=parameterB)
model = buildModel()
grid = GridSearchCV(model, param_grid, scoring="accuracy")
grid_result = grid.fit(X, Y)
for parameters, scores in grid_result.grid_scores_:
print("Mean: " + scores.mean())
print("Parameters: " + parameters)
- 我是否理解正确,score.mean() 是准确度的平均值?
- 如何输入自己的评分函数?在文档中,它表示 "scorer(estimator, X, y)"。我从哪里得到 X 和 y?它们不是交叉验证的训练和测试集吗?它们可以访问吗?
- 是否有可能获得交叉验证的 每个 折叠的所有这些值?默认情况下,有 k=3 倍,所以我希望每个参数组合的平均值和准确度是三倍。
首先,您不应再使用 grid_scores_
,因为它在版本 0.18 中已弃用,取而代之的是 cv_results_
属性。 grid_scores_
属性在版本 0.20.
Q° : 我是否理解正确,score.mean() 是准确度的平均值?
A :属性 cv_results_
实际上 returns 是您要查找的所有指标的字典。检查一下:cv_result_
.
Q° : 是否有可能为交叉验证的每一折获得所有这些值?默认情况下,有 k=3 倍,所以我希望每个参数组合的平均值和准确度是三倍。
A :是的,实际上您需要使用属性 verbose
。 verbose
必须是一个整数,它控制详细程度:越高,消息越多。例如你可以设置 verbose=3
.
Q° : 如何输入自己的评分函数?
A :在你定义了一个损失函数之后使用make_scorer。您的损失函数必须具有以下签名:score_func(y, y_pred, **kwargs)
。基本损失函数可以是分类良好的样本与总样本数的比率(您可以想象任何一种指标,可以让您很好地了解分类器的性能)。
你会这样做:
def my_loss_func(y, y_pred):
return np.sum(y == y_pred)/float(len(y_pred))
my_scorer = make_scorer(my_loss_func, greater_is_better=True)
然后您可以在您的 GridSearch 中使用您的 scorer
。