目录
11.1子集收集与评价
属性称为"特征" ,对当前学习任务有用的属性称为"相关特征" 、没什么用的属性称为"无关特 征" . 从给定的特征集合中选择出相关特征于集的过程,称为"特征选择"。
特征选择是一个重要的"数据预处理" 过程。我们要从初始的特征集合中选取一个包含了所有重要信息的特征子集,首先,是子集搜索,给走特征集合 {a1,a2 ,... ad} ,我们可将每个特征看作一个候选子集,对这d个候选单特征子集进行评价,假定 {a2} 最优,于是将 {a2}作为第一轮的选定集;然后,在上一轮的选定集中加入一个特征,构成包含两个特征的候选子集,以此往复操作。其次,是子集评价,子集的信息增益为:
信息熵定义为:
信息增益 Gain(A)
越大,意味着特征子集
包含的有助于分类的信息越多.于是,对每个候选特征子集,我们可基于训练数据集来计算其信息增益,以此作为评价准则。
常见的特征选择方法大致可分为三类:过滤式
、包裹式
和嵌入式.
11.2过滤式选择
过滤式方法先对数据集进行特征选择,然后再训练学习器。
Relief 是一种著名的过滤式特征选择方法,该方法设计了一个"相关统计量"来度量特征的重要性。该统计量是一个向量,其每个分量分别对应于一个初始特征,而特征子集的重要性则是由子集中每个特征所对应的相关统计量分量之和来决定。
下面是关于Relief算法的过滤式特征选择方法的实验代码及分析和结果:
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.ensemble import RandomForestClassifier
from skfeature.function.statistical import reliefF
# 加载数据集
data = load_iris()
X = data.data
y = data.target
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 计算特征的ReliefF评分
reliefF_scores = reliefF.reliefF(X_train, y_train)
# 将特征按ReliefF评分排序
ranked_features = np.argsort(reliefF_scores)[::-1]
# 选择前k个特征
k = 2
selected_features = ranked_f