特征选择目的
- 减少特征数量/降维/模型泛华能力更强, 减少过拟合
- 增强特征和特征值间的理解
sklearn 相关常用特征选择方法
- 过滤法(Filter): 按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征
- 移除低方差特征
Removing features with low variance
(适用于:特征值为离散变量)script 1
2
3
4from sklearn.feature_selection import VarianceThreshold
x = [[0,2,0,3],[0,1,4,3],[0,1,1,3]]
VarianceThreshold(threshold=1).fit_transform(x) # 移除方差阈值小于1的特征列
[[0],[4],[1]] - 单变量特征选择
Univariate feature selection
:计算单特征统计学意义指标,判断指标重要度, 去除不重要指标- 分类问题(y分散): 卡方检验, f_classif(离散变量方差分析计算),mutual_info_classif(计算离散目标变量互信息),互信息
script 1
2
3
4
5
6
7
8
9卡方校验
from sklearn.feature_selection import chi2, SelectKBest,VarianceThreshold
iris = load_iris()
x, y = iris.data, iris.target
SelectKBest(chi2, k=1).fit_transform(x, y) #使用卡方校验特征值, 返回k个排名靠前的特征
互信息
@todo - 回归问题(y连续): 皮尔逊相关系数, f_regression(连续变量方差分析计算), mutual_info_regression(计算连续变量互信息), 最大信息系数
script 1
2
3
4
5
6
7
8
9皮尔逊相关系数`(缺陷点: 线性关系敏感,非线性无法分辨关系)`
from scipy.stats import pearson
r, p = pearsonr(x, y) #x:自变量 y:因变量 得到相关系数r, 和p_value相关系数显著性(p-value在500个样本值以上有较高的可靠性)
或者
pd.DataFrame.corr(df,method=('pearson/kendall/spearman'))
要先检验相关系数的显著性,如果显著,证明相关系数有统计学意义,下一步再来看相关系数大小,
距离相关系数
@todo - 基于模型(机器学习算法)排序特征,并选择: 针对 每个单独的特征 和 响应变量建立预测模型。
script 1
2
3
4
5
6
7
8
9
10
11
12
13
14boston = (load_boston())
X = boston.data
Y = boston.target
names = boston.feature_names
names
rf = RandomForestRegressor(n_estimators=20, max_depth=4)
scores = []
for i in range(X.shape[1]):
score = cross_val_score(rf, X[:,i:i+1],Y, scoring="r2", cv=ShuffleSplit(len(X), 3, .3))
scores.append((format(np.mean(score), '.3f'), names[i]))
scores
- 分类问题(y分散): 卡方检验, f_classif(离散变量方差分析计算),mutual_info_classif(计算离散目标变量互信息),互信息
- 移除低方差特征
- 包装法(Wrapper): 根据目标函数(通常是预测效果分)筛选n个特征/排除n个特征
- 过滤法(Filter): 按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征
原文作者:Neo Anderson
原文链接:https://www.neofaster.cc/archives/f8be437.html
发表日期:October 23rd 2019, 5:20:53 pm
更新日期:August 28th 2021, 10:51:27 am
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可
-
Next Post风控模型/风控指标/数据审计
-
Previous Post构建信用评分卡模型通用步骤实现细节(三) - 探索性分析(Exploratory Data Analysis)