交叉val分数在sklearn中返回NAN

2024-04-29 01:01:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我从cross_val_分数中得到nan分数。我能知道怎么处理吗。。一天以来一直在挣扎

from sklearn.model_selection import KFold, cross_val_score
from sklearn.model_selection import train_test_split
import hyperopt
from hyperopt import tpe
from hyperopt import STATUS_OK
from hyperopt import Trials
from hyperopt import hp
from hyperopt import fmin
from sklearn.linear_model import LogisticRegression
df = pd.read_csv('creditcard.csv')
df.head()

def hyperopt_train_test(params):
    cv = StratifiedShuffleSplit(n_splits = 1, test_size = .25, random_state = 0 ) 
    clf =LogisticRegression(**params)

    return cross_val_score(clf,  df.loc[:,:'Amount'], df['Class'],cv = cv,scoring='f1').mean()

space = {
    'C' : hp.uniform('C', 0.05, 10),
    'penalty': hp.choice('penalty',['l2','l1']),
    'max_iter':hp.choice('max_iter',[200,300,400,500])
}

def f(params,scores=[]):
    acc = hyperopt_train_test(params)
    print(acc, "Accuracy")
    scores.append(acc)
    return {'scores':scores,'loss': 1-acc, 'status': STATUS_OK, 'scores':scores}

trials = Trials()
trials
best = fmin(f, space, algo=tpe.suggest, max_evals=10, trials=trials)
print('best:',best)
hyperopt.space_eval(space,best)

DataSet can be downloaded here


Tags: fromtestimportdfspacevalparamssklearn
2条回答

在交叉评分中,尝试使用df.loc[:,:'Amount'].values, df['Class'].values

cross_val_score方法有一个奇怪的问题,如果底层数据类型或参数存在任何问题,并且在内部遇到错误,而不是在输出中打印它给出的精确错误回溯

要了解您的具体问题,请使用此参数“错误分数”

cross_val_score(xgboost.XGBClassifier(), X.values, y.values, cv=kfold, error_score="raise")

这将打印您需要修复的确切错误。在我的例子中,我必须将字符串变量转换为浮点数

相关问题 更多 >