Python实现SVM分层K折交叉验证出现list object not callable报错如何解决
报错原因与修复方案
报错原因
你从sklearn.metrics导入了评估函数accuracy_score后,后续自定义了一个和函数同名的列表accuracy_score = [],直接覆盖了原函数的引用。后续你执行accuracy_score(y_test, y_pred)时,Python会将该名称识别为你定义的列表,列表不支持调用操作,因此抛出'list' object is not callable错误。
修复方法
只需要将你自定义的存储精度的列表改名,避免和导入的函数重名即可,比如改名为acc_scores,修改后的对应代码片段如下:
skf = StratifiedKFold(n_splits=10, shuffle=True) # 自定义列表改名,避免和导入的accuracy_score函数重名 acc_scores = [] for train_index, test_index in skf.split(X, y): X_train, X_test = X_scaled[train_index], X_scaled[test_index] y_train, y_test = y[train_index], y[test_index] svc.fit(X_train, np.ravel(y_train)) y_pred = svc.predict(X_test) # 此处调用的是sklearn的accuracy_score评估函数 score = accuracy_score(y_test, y_pred) acc_scores.append(score) # 计算平均精度时使用改名后的列表 print('accuracy score: %0.3f' % np.mean(acc_scores))
内容的提问来源于stack exchange,提问作者user3046211
相关产品推荐
相关产品推荐

