特征选择算法的python源代码
时间: 2023-10-12 17:16:12 浏览: 59
特征选择是机器学习中重要的一环,可以帮助我们从原始数据中提取出最具有代表性的特征,提高模型的准确率和泛化能力。下面是一些常用的特征选择算法的 Python 代码。
1. 方差选择法
方差选择法是通过方差来判断特征的重要性,方差越大,代表该特征对样本的区分度越大。
```python
from sklearn.feature_selection import VarianceThreshold
# 设置方差阈值为0.2
selector = VarianceThreshold(threshold=0.2)
# 对数据进行特征选择
X_selected = selector.fit_transform(X)
```
2. 相关系数法
相关系数法是通过计算特征与目标变量之间的相关系数来判断特征的重要性,相关系数越大,代表该特征与目标变量之间的关联程度越高。
```python
import numpy as np
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
# 定义计算相关系数的函数
def calc_pearsonr(X, y):
scores, pvalues = [], []
for feature in range(X.shape[1]):
score, pvalue = pearsonr(X[:, feature], y)
scores.append(score)
pvalues.append(pvalue)
return (np.array(scores), np.array(pvalues))
# 选择与目标变量相关系数最高的前K个特征
selector = SelectKBest(score_func=calc_pearsonr, k=5)
# 对数据进行特征选择
X_selected = selector.fit_transform(X, y)
```
3. 卡方检验法
卡方检验法是通过计算特征与目标变量之间的卡方值来判断特征的重要性,卡方值越大,代表该特征与目标变量之间的关联程度越高。
```python
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
# 选择与目标变量卡方值最高的前K个特征
selector = SelectKBest(score_func=chi2, k=5)
# 对数据进行特征选择
X_selected = selector.fit_transform(X, y)
```
4. 互信息法
互信息法是通过计算特征与目标变量之间的互信息来判断特征的重要性,互信息越大,代表该特征与目标变量之间的关联程度越高。
```python
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import mutual_info_classif
# 选择与目标变量互信息最高的前K个特征
selector = SelectKBest(score_func=mutual_info_classif, k=5)
# 对数据进行特征选择
X_selected = selector.fit_transform(X, y)
```
5. Wrapper方法
Wrapper方法是通过将特征选择看作一个优化问题,通过训练模型来评估每个特征的重要性,并逐步选取最优特征的方法。
```python
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# 使用逻辑回归作为评估器,选择5个最优特征
estimator = LogisticRegression()
selector = RFE(estimator, n_features_to_select=5)
# 对数据进行特征选择
X_selected = selector.fit_transform(X, y)
```
以上是一些常用的特征选择算法的 Python 代码,可以根据需要选择合适的算法进行特征选择。