【进阶篇】使用Scikit-learn的特征选择和降维方法进行特征工程和数据预处理
发布时间: 2024-06-24 16:10:55 阅读量: 8 订阅数: 33 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![【进阶篇】使用Scikit-learn的特征选择和降维方法进行特征工程和数据预处理](https://img-blog.csdnimg.cn/20190925112725509.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc5ODU5Mg==,size_16,color_FFFFFF,t_70)
# 1. 特征工程和数据预处理概述**
特征工程是机器学习管道中一个至关重要的步骤,它涉及到将原始数据转换为模型可以理解和利用的特征。数据预处理是特征工程的一个子集,它包括清理数据、处理缺失值和标准化特征。
特征工程的目标是创建具有以下特性的特征:
* **相关性:**与目标变量相关
* **信息量:**包含有关目标变量的有价值信息
* **非冗余:**不包含与其他特征重复的信息
* **可解释性:**人类可以理解和解释
# 2. 特征选择
特征选择是特征工程中的一个重要步骤,它旨在从原始特征集中选择出最相关的特征,以提高模型的性能和可解释性。特征选择方法可以分为三类:过滤法、包裹法和嵌入法。
### 2.1 过滤法
过滤法是基于特征本身的统计特性来进行特征选择的。它不考虑目标变量,因此计算效率高。常用的过滤法包括:
#### 2.1.1 方差过滤法
方差过滤法选择方差较大的特征。方差衡量了特征值的分布程度,方差较大的特征表示其值分布较分散,具有较好的区分能力。
```python
from sklearn.feature_selection import VarianceThreshold
# 实例化方差过滤法
selector = VarianceThreshold(threshold=0.5)
# 拟合数据
selector.fit(X)
# 提取方差大于阈值的特征
selected_features = selector.get_support(indices=True)
```
**参数说明:**
* `threshold`:方差阈值,默认值为 0。
**代码逻辑:**
* `fit(X)` 方法拟合数据,计算每个特征的方差。
* `get_support(indices=True)` 方法返回方差大于阈值的特征索引。
#### 2.1.2 卡方检验
卡方检验是一种统计检验方法,用于检验特征与目标变量之间的相关性。卡方检验值越大,表示特征与目标变量相关性越强。
```python
from sklearn.feature_selection import chi2
# 实例化卡方检验
selector = chi2(k=10)
# 拟合数据
selector.fit(X, y)
# 提取卡方检验值最大的 k 个特征
selected_features = selector.get_support(indices=True)
```
**参数说明:**
* `k`:要选择的特征数量,默认值为 10。
**代码逻辑:**
* `fit(X, y)` 方法拟合数据,计算每个特征与目标变量之间的卡方检验值。
* `get_support(indices=True)` 方法返回卡方检验值最大的 k 个特征索引。
### 2.2 包裹法
包裹法将特征选择过程与模型训练过程结合起来,通过评估不同特征组合对模型性能的影响来选择特征。包裹法计算量大,但通常能获得更好的特征选择结果。
#### 2.2.1 递归特征消除法
递归特征消除法(RFE)是一种包裹法,它通过逐次移除对模型贡献最小的特征来进行特征选择。
```python
from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression
# 实例化 RFE
selector = RFE(estimator=LinearRegression(), n_features_to_select=5)
# 拟合数据
selector.fit(X, y)
# 提取选择的特征
selected_features = selector.get_support(indices=True)
```
**参数说明:**
* `estimator`:用于评估特征重要性的模型,默认值为决策树。
* `n_features_to_select`:要选择的特征数量,默认值为 10。
**代码逻辑:**
* `fit(X, y)` 方法拟合数据,逐次移除对模型贡献最小的特征。
* `get_support(indices=True)` 方法返回选择的特征索引。
#### 2.2.2 嵌入式特征选择法
嵌入式特征选择法将特征选择过程嵌入到模型训练过程中,通过模型本身的惩罚项或正则化项来选择特征。
```python
from sklearn.linear_model import Lasso
# 实例化 Lasso 模型
model = Lasso(alpha=0.1)
# 训练模型
model.fit(X, y)
# 提取非零系数的特征
selected_features = np.where(model.coef_ != 0)[0]
```
**参数说明:**
* `alpha`:正则化系数,值越大,惩罚项越大,选择的特征越少。
**代码逻辑:**
* `fit(X, y)` 方法训练 Lasso 模型,并计算每个特征的系数。
* `np.where(model.coef_ != 0)[0]` 返回非零系数的特
0
0
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)