我想为cross_validate
使用自定义函数,该函数使用特定的y_test
来计算精度,这与实际目标y_test
不同。y_test
。 / p>
我已经尝试过使用make_scorer
的几种方法,但是我不知道如何通过我的替代方法y_test
:
scoring = {'prec1': 'precision',
'custom_prec1': make_scorer(precision_score()}
scores = cross_validate(pipeline, X, y, cv=5,scoring= scoring)
有什么建议的办法吗?
答案 0 :(得分:1)
以这种方式发现。也许代码不是最佳的,对此感到抱歉。
好的,让我们开始:
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
from sklearn.metrics.scorer import make_scorer
xTrain = np.random.rand(100, 100)
yTrain = np.random.randint(1, 4, (100, 1))
yTrainCV = np.random.randint(1, 4, (100, 1))
model = LogisticRegression()
yTrainCV
将用作自定义得分手。
def customLoss(xArray, yArray):
indices = xArray.index.values
tempArray = [1 if value1 != value2 else 0 for value1, value2 in zip(xArray.values, yTrainCV[[indices]])]
return sum(tempArray)
scorer = {'main': 'accuracy',
'custom': make_scorer(customLoss, greater_is_better=True)}
这里没有几招:
greater_is_better
:True
/ False
将返回正数或负数GridSearchCV
的简历中获得的索引然后...
grid = GridSearchCV(model,
scoring=scorer,
cv=5,
param_grid={'C': [1e0, 1e1, 1e2, 1e3],
'class_weight': ['balanced', None]},
refit='custom')
grid.fit(xTrain, pd.DataFrame(yTrain))
print(grid.score(xTrain, pd.DataFrame(yTrain)))
refit
中的GridSearchCV
参数DataFrame
的形式传递目标数组-这将有助于我们检测自定义损失函数中的索引