Python 在visual studio代码中调试scikit learn GridSearchCV时出现类型错误
当我尝试在VisualStudio中调试python代码时,出现以下错误。令人惊讶的是,当我在没有调试的情况下运行代码时,代码运行良好。有什么线索吗 TypeError:必须以_winapi实例作为第一个参数调用未绑定的方法new_CreateProcess()(改为获取str实例) PS C:\GitHub\Project> 下面是导致错误的代码段。这是scikit learn中的标准网格搜索初始化。我不确定我错过了什么。我正在使用Python 2.7Python 在visual studio代码中调试scikit learn GridSearchCV时出现类型错误,python,visual-studio-code,scikit-learn,Python,Visual Studio Code,Scikit Learn,当我尝试在VisualStudio中调试python代码时,出现以下错误。令人惊讶的是,当我在没有调试的情况下运行代码时,代码运行良好。有什么线索吗 TypeError:必须以_winapi实例作为第一个参数调用未绑定的方法new_CreateProcess()(改为获取str实例) PS C:\GitHub\Project> 下面是导致错误的代码段。这是scikit learn中的标准网格搜索初始化。我不确定我错过了什么。我正在使用Python 2.7 from sklearn.model_s
from sklearn.model_selection import GridSearchCV
clf = GridSearchCV(estimator=model, param_grid=p_grid, scoring='roc_auc', n_jobs=4, cv=inner_cv, refit=True, return_train_score=True)
clf.fit(x, y)
错误发生在clf.fit()行。以下是对上述代码的完整回溯:
import pandas as pd
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_validate
from sklearn.preprocessing import StandardScaler
df = pd.read_csv([some file])
x = df.iloc[:,3:-1]
y = df.loc[:, 'Label']
colNames = x.columns
scaler = MinMaxScaler()
for i in range(2,x.shape[1]):
columnName = x.columns[i]
x[columnName] = scaler.fit_transform(x[columnName].values.reshape(-1,1))
p_grid = {'n_estimators' : list(range(10,101,10)),
'max_features' : list(range(6,30,5))}
model = RandomForestClassifier()
numTrials = 30
non_nested_scores = np.zeros(numTrials)
nested_scores = []
scores = {'auc': 'roc_auc', 'f1': 'f1', 'precision':'precision', 'recall':'recall', 'accuracy':'accuracy'}
resultsLog = pd.DataFrame(columns=['trial','auc','f1','precision','recall','accuracy'])
for i in range(numTrials):
n = 5
inner_cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=i)
outer_cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=i)
# Non_nested parameter search and scoring
clf = GridSearchCV(estimator=model, param_grid=p_grid, scoring='roc_auc', n_jobs=-1, cv=inner_cv, refit=True, return_train_score=True)
clf = clf.fit(x,y)
non_nested_scores[i] = clf.best_score_
# Nested CV with parameter optimization
nested_score = cross_validate(clf,
X=x,
y=y,
scoring=scores,
cv=outer_cv,
n_jobs=-1)
m1 = np.mean(nested_score['test_auc'])
m2 = np.mean(nested_score['test_f1'])
m3 = np.mean(nested_score['test_precision'])
m4 = np.mean(nested_score['test_recall'])
m5 = np.mean(nested_score['test_accuracy'])
newRow = pd.DataFrame({'trial':[i], 'auc':[m1], 'f1':[m2], 'precision':[m3], 'recall':[m4], 'accuracy':[m5]})
resultsLog = pd.concat([resultsLog, newRow], ignore_index=True)
nested_scores.append(nested_score)
你能包括完整的回溯吗?否则,异常来自何处并不明显。@BrettCannon谢谢您的关注。我已经按照你的建议添加了完整的回溯。如果您还需要什么,请告诉我。不幸的是,看起来您粘贴了代码,而不是回溯。我想要的是关于
TypeError
消息的一切。这是我收到的错误消息:发生异常:TypeError unbound方法new\u CreateProcess()必须以_winapiinstance作为第一个参数调用(改为get str instance)——这是否回答了您的问题?如果没有,请让我知道如何才能提供更多信息。非常感谢你@BrettCannoni如果这是整个错误消息,因为它没有说明调用new\u CreateProcess()
的位置,那么就不需要太多说明了。这意味着谁知道谁在打印错误消息,从而知道什么是不愉快的。在这一点上,我将在提交一个bug。