【发布时间】:2021-04-21 06:05:49
【问题描述】:
我将 Titanic 数据集作为我的第一个 Kaggle 项目。但是我收到了这个用户警告,我正在尝试找出如何摆脱它。
所以我做了两个预处理子管道:
num_pipeline = Pipeline([
('imputer', SimpleImputer( strategy='median')),
('scaler', StandardScaler()) ])
cat_pipeline = Pipeline([
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('onehot', OneHotEncoder()) ])
我选择的用于构建模型的功能是:
numeric_features = ['Age', 'SibSp', 'Parch', 'Fare']
categorical_features = ['Pclass', 'Sex', 'Embarked']
我的预处理管道是:
preprocessor = ColumnTransformer(
transformers = [
('num', num_pipeline, numeric_features),
('cat', cat_pipeline, categorical_features)
])
在我的最终管道中,我添加了一个分类器:
clf = Pipeline([
('Preprocessor' , preprocessor),
('Classifier', DecisionTreeClassifier()) ])
然后我调用 cross_val_score 来评估模型,这就是我收到用户警告的时候:
cross_val_score(clf, X_train, y_train, cv=3, scoring="accuracy")
ValueError:在转换期间在第 2 列中发现未知类别 ['Missing'] 用户警告,
数组([ 南, 0.70403587, 0.74774775])
我的猜测是 cross_val_score 在没有“缺失”类别的情况下获得第一个折叠,然后在另一个带有“缺失”类别的情况下对其进行测试。因此出现错误。 所以我尝试删除“Embarked”中缺失值的行,但仍然得到奇怪的错误。
【问题讨论】:
标签: python scikit-learn cross-validation