特征工程:独热编码、多项式特征与特征选择
立即解锁
发布时间: 2025-09-07 01:56:11 阅读量: 18 订阅数: 22 AIGC 


数据清洗的艺术与实践
### 特征工程:独热编码、多项式特征与特征选择
#### 1. 数据预处理与独热编码
在处理调查数据集时,我们首先对年龄特征进行了转换。通过以下代码,将年龄数据转换为无符号 8 位整数类型并进行转置,然后为不同年龄范围创建合成列:
```python
age = age.astype(np.uint8).T
survey5 = survey5.assign(Young=age[0],
Mid_Age=age[1],
Old=age[2])
survey5.drop('Age', axis=1, inplace=True)
```
处理后的数据示例如下:
| 序号 | Language | Experience | Success | Education | Young | Mid_Age | Old |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| 13 | Python | 0 | 0 | 2 | 0 | 1 | 0 |
| 2 | Python | 0 | 1 | 2 | 0 | 1 | 0 |
| 25 | R | 0 | 1 | 0 | 0 | 1 | 0 |
| 16 | Python | 0 | 1 | 0 | 0 | 0 | 1 |
| 19 | Python | 0 | 0 | 1 | 0 | 0 | 1 |
| 79 | JavaScript | 0 | 1 | 1 | 0 | 1 | 0 |
| 5 | Python | 0 | 1 | 0 | 0 | 1 | 0 |
| 24 | Python | 0 | 1 | 0 | 1 | 0 | 0 |
接下来,我们引入了独热编码的概念。在很多模型和统计技术中,需要将特征编码为数字。一种简单的方法是将值编码为数字序数,但这可能会引入人为的顺序。例如,不同的编程语言之间并没有内在的顺序。
独热编码可以将一个具有多个值的特征转换为多个特征,每个新特征对应一个类别值,且只有一个新特征的值为 1,其余为 0。
在 Pandas 中,可以使用 `get_dummies()` 函数进行独热编码,示例代码如下:
```python
survey6 = pd.get_dummies(survey5, prefix="Lang")
```
处理后的数据示例如下:
| | 83 | 5 | 6 | 42 | 100 | 97 | 40 | 25 | 115 | 103 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| Lang_C++ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Lang_JavaScript | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Lang_MATLAB | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| Lang_Python | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 |
| Lang_R | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
| Lang_Scala | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Lang_VB | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Lang_Whitespace | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
在 scikit-learn 中,可以使用 `OneHotEncoder` 类进行独热编码,示例代码如下:
```python
from sklearn.preprocessing import OneHotEncoder
lang = survey5[['Language']]
enc = OneHotEncoder(sparse=False).fit(lang)
one_hot = enc.transform(lang)
print(enc.get_feature_names())
print("\nA few encoded rows:")
print(one_hot[80:90])
```
独热编码的流程可以用以下 mermaid 流程图表示:
```mermaid
graph LR
A[原始特征] --> B[判断是否需要编码]
B -- 是 --> C[选择编码工具]
C -- Pandas --> D[使用 get_dummies()]
C -- scikit-learn --> E[使用 OneHotEncoder]
D --> F[得到独热编码数据]
E --> F
B -- 否 --> G[使用原始特征]
```
#### 2. 多项式特征生成
多项式特征生成可以创建大量新的合成特征。其基本思想是添加由现有特征最多 N 个特征的乘积组成的新特征。在 scikit-learn 中,可以使用 `PolynomialFeatures` 类来实现。
以威斯康星乳腺癌数据集为例,该数据集有 30 个数值特征和一个二进制目标。首先
0
0
复制全文
相关推荐









