机器学习中的线性相关性:特征选择与降维的应用场景
发布时间: 2024-07-09 01:25:52 阅读量: 70 订阅数: 21
(179979052)基于MATLAB车牌识别系统【带界面GUI】.zip
![机器学习中的线性相关性:特征选择与降维的应用场景](https://img-blog.csdnimg.cn/direct/8fffa6a4c4fb4303bc01e35aa40c8f9e.png)
# 1. 线性相关性的概念与度量**
线性相关性衡量两个或多个变量之间的线性关系强度。它通常用相关系数来表示,范围从 -1 到 1。
* **正相关:**当两个变量同时增加或减少时,相关系数为正。
* **负相关:**当一个变量增加而另一个变量减少时,相关系数为负。
* **零相关:**当两个变量之间没有线性关系时,相关系数为零。
相关系数的绝对值表示相关性的强度。越接近 1 或 -1,相关性越强。
# 2. 特征选择
特征选择是机器学习中至关重要的步骤,它可以帮助我们从原始数据集中选出最具信息量和预测力的特征,从而提高模型的性能和可解释性。特征选择的方法主要分为三种:过滤式、包裹式和嵌入式。
### 2.1 过滤式特征选择
过滤式特征选择根据特征本身的统计特性进行选择,而不考虑目标变量。常用的过滤式特征选择方法包括:
#### 2.1.1 相关性分析
相关性分析衡量特征与目标变量之间的相关程度。常用的相关性系数包括皮尔逊相关系数和斯皮尔曼相关系数。
**代码块:**
```python
import numpy as np
import pandas as pd
# 计算皮尔逊相关系数
def pearson_corr(X, y):
return np.corrcoef(X, y)[0, 1]
# 计算斯皮尔曼相关系数
def spearman_corr(X, y):
return pd.DataFrame(X).corrwith(pd.DataFrame(y), method='spearman').iloc[0]
```
**逻辑分析:**
* `pearson_corr` 函数计算两个一维数组之间的皮尔逊相关系数。
* `spearman_corr` 函数计算两个 DataFrame 之间所有列与目标变量之间的斯皮尔曼相关系数。
#### 2.1.2 方差分析
方差分析衡量特征中包含的信息量。方差较大的特征通常包含更多信息。
**代码块:**
```python
from sklearn.feature_selection import VarianceThreshold
# 选择方差大于阈值的特征
selector = VarianceThreshold(threshold=0.5)
selected_features = selector.fit_transform(X)
```
**逻辑分析:**
* `VarianceThreshold` 类用于选择方差大于指定阈值的特征。
* `fit_transform` 方法将输入特征矩阵 `X` 转换为仅包含方差大于阈值的特征。
### 2.2 包裹式特征选择
包裹式特征选择将特征选择过程与模型训练过程结合起来。它通过评估不同特征组合对模型性能的影响来选择最优特征子集。
#### 2.2.1 向前选择
向前选择从空特征子集开始,逐步添加特征,直到达到最佳模型性能。
**代码块:**
```python
from sklearn.feature_selection import SequentialFeatureSelector
# 使用向前选择方法
selector = SequentialFeatureSelector(estimator=estimator, n_features_to_select=5)
selected_features = selector.fit_transform(X, y)
```
**逻辑分析:**
* `SequentialFeatureSelector` 类用于进行向前选择。
* `estimator` 参数指定用于评估特征子集的模型。
* `n_features_to_select` 参数指定要选择的特征数量。
#### 2.2.2 向后选择
向后选择从包含所有特征的子集开始,逐步删除特征,直到达到最佳模型性能。
**代码块:**
```python
from sklearn.feature_selection import RFE
# 使用向后选择方法
selector = RFE(estimator=estimator, n_features_to_select=5)
selected_features = selector.fit_transform(X, y)
```
**逻辑分析:**
* `RFE` 类用于进行向后选择。
* `estimator` 参数指定用于评估特征子集的模型。
* `n_features_to_select` 参数指定要选择的特征数量。
### 2.3 嵌入式特征选择
嵌入式特征选择将特征选择过程嵌入到模型训练过程中。它通过在模型优化过程中惩罚不重要的特征来选择最优特征子集。
#### 2.3.1 L1 正则化
L1 正则化通过向模型损失函数中添加特征系数的绝对值之和来惩罚不重要的特征。
**代码块:**
```python
from sklearn.linear_model import Lasso
# 使用 L1 正则化
model = Lasso(alpha=0.1)
model.fit(X, y)
selected_features = np.where(model.coef_ != 0)[0]
```
**逻辑分析:**
* `Lasso` 类用于进行 L1 正则化。
* `alpha` 参数控制正则化项的强度。
* `coef_` 属性包含模型的特征系数。
* `np.where` 函数返回非零系数的特征索引。
#### 2.3.2 L2 正则化
L2 正则化通过向模型损失函数中添加特征系数的平方和来惩罚不重要的特征。
**代码块:**
```python
from sklearn.linear_model import Ridge
# 使用 L2 正则化
model = Ridge
```
0
0