分类,cross_val_score() returns 1的数组
Classification, cross_val_score() returns an array of 1
我有这个管道,其中 X_train
和 y_train
都是数组,它们的行数相同(所有整数和浮点数,y_train 是二进制,值为 1 和0).当我 运行 它时,一切似乎都很顺利。这是代码:
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.impute import KNNImputer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score, KFold
seed = 7
kfold = KFold(n_splits=10)
pipe = Pipeline([
('Scaler', StandardScaler()),
("Imputer", KNNImputer()),
('ML', RandomForestClassifier(max_depth=3))])
results = cross_val_score(pipe, X_train, y_train, cv=kfold, scoring="roc_auc")
当我尝试打印结果时,它给了我这个:
print(results)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
它给出了一个包含 10 个值 1 的数组。
- 为什么?
- 如何访问每个模型?
- 我如何选择最好的一个(假设它们有不同的值)?
这在 cross_val_score
函数的文档中有解释。
在您的示例中,您获得了每个折叠的 ROC AUC(通过选择您的 scoring
参数)
我猜你的模型严重过度拟合数据,这就是 AUC 始终为 1.0,即最大值
我有这个管道,其中 X_train
和 y_train
都是数组,它们的行数相同(所有整数和浮点数,y_train 是二进制,值为 1 和0).当我 运行 它时,一切似乎都很顺利。这是代码:
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.impute import KNNImputer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score, KFold
seed = 7
kfold = KFold(n_splits=10)
pipe = Pipeline([
('Scaler', StandardScaler()),
("Imputer", KNNImputer()),
('ML', RandomForestClassifier(max_depth=3))])
results = cross_val_score(pipe, X_train, y_train, cv=kfold, scoring="roc_auc")
当我尝试打印结果时,它给了我这个:
print(results)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
它给出了一个包含 10 个值 1 的数组。
- 为什么?
- 如何访问每个模型?
- 我如何选择最好的一个(假设它们有不同的值)?
这在 cross_val_score
函数的文档中有解释。
在您的示例中,您获得了每个折叠的 ROC AUC(通过选择您的 scoring
参数)
我猜你的模型严重过度拟合数据,这就是 AUC 始终为 1.0,即最大值