目录 / scikit-learn-feature-encoding-steps
scikit-learn-feature-encoding-steps
Scikit-learn 特征编码步骤指南与说明 1. 导入必要的库 首先,导入 scikit-learn 中用于特征编码的模块,例如: ```python from sklearn.preprocessing import LabelEncoder, OneHotEncoder, OrdinalEncoder from sklearn.compose import ColumnTransformer ``` 2. 理解数据类型 区分分类特征(categorical features)和数值特征(numerical features)。特征编码主要用于处理分类变量。 3. 标签编码(Label Encoding) 使用 `LabelEncoder` 将分类标签转换为整数。适用于目标变量或有序分类特征。 ```python label_encoder = LabelEncoder() y_encoded = label_encoder.fit_transform(y) ``` 注意:不要对特征矩阵中的多个列直接使用 `LabelEncoder`,应逐列处理或使用其他方法。 4. 独热编码(One-Hot Encoding) 使用 `OneHotEncoder` 将分类特征转换为二进制向量,避免模型误认为类别之间有顺序关系。 ```python onehot_encoder = OneHotEncoder(sparse_output=False, drop='first') # drop='first' 可避免多重共线性 X_encoded = onehot_encoder.fit_transform(X_categorical) ``` 5. 有序编码(Ordinal Encoding) 若分类特征具有明确顺序(如“低”、“中”、“高”),可使用 `OrdinalEncoder` 并指定类别顺序。 ```python ordinal_encoder = OrdinalEncoder(categories=[['低', '中', '高']]) X_encoded = ordinal_encoder.fit_transform(X_ordinal) ``` 6. 使用 ColumnTransformer 进行列级编码 在包含多种类型特征的 DataFrame 中,使用 `ColumnTransformer` 对指定列应用不同编码方式。 ```python preprocessor = ColumnTransformer( transformers=[ ('cat', OneHotEncoder(), ['category_col']), ('ord', OrdinalEncoder(), ['ordinal_col']) ], remainder='passthrough' # 保留其他列 ) X_transformed = preprocessor.fit_transform(X) ``` 7. 处理未知类别 在测试集中可能出现训练时未见的类别。设置 `handle_unknown='ignore'` 可避免报错。 ```python OneHotEncoder(handle_unknown='ignore') ``` 8. 保存和复用编码器 训练完成后,保存编码器以便在预测时一致地转换新数据。 ```python import joblib joblib.dump(onehot_encoder, 'encoder.pkl') ``` 9. 注意事项 - 避免数据泄露:编码器应仅在训练集上拟合(fit),再应用于训练集和测试集(transform)。 - 高基数分类变量(类别过多)可能导致维度爆炸,可考虑目标编码或嵌入等方法。 - 编码后特征名称可能丢失,可通过 `get_feature_names_out()` 获取。 10. 示例流程 ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, tes...
这是模型对公开材料的总结,不是官方声明,请以原链内容为准。
存档时间线
| 版本 | 存档时间 | 内容哈希 | 内容 |
|---|---|---|---|
| v1 | 2026-11-14 17:14 | 65283910 | 可取 |
版本索引永久保留;内容副本只保留最新 1 份,更早版本仅留索引与哈希(存档时间线的证据链不会因此断裂)。
提交举报 / 纠错
侵权举报经核验成立后,我们会即时下线该条目并删除已存的内容副本。