在机器学习领域,特征选择是一个至关重要的步骤,它涉及到从数据集中挑选出对预测目标变量有显著影响的特征。特征选择不仅能够提升模型的性能,还能减少计算成本,避免过拟合。本文将探讨特征选择的重要性以及几种常用的特征选择方法。
特征工程是数据科学问题解决过程中的关键任务之一。通过合理地展示数据,可以极大地影响模型的评估结果。这种方法涉及到尝试所有特征组合,以突出关键特征,同时排除那些无关紧要的特征。这需要领域知识来选择最合适的特征,以获得准确的结果。
特征选择或变量选择是特征工程中的核心过程,它通过挑选对目标属性有重要影响的特征来减少依赖变量的数量。通过这种方法,可以通过剪枝冗余特征来减小数据集的大小,从而减少模型的计算成本,并在某些情况下提高模型的准确性。
以心脏病临床数据集为例,该数据集包含了患有左心室收缩功能障碍和心力衰竭病史的患者的医疗记录。有12个特征来进行预测过程。利用在这个领域的专业知识,可以判断出,性别可能不是预测心力衰竭的关键特征,因此可以从模型训练中排除。
增加特征会使模型学习变得复杂,并可能导致过拟合。为了概括特征选择方法/模型,将探讨几种特征选择技术来降低数据集的维度。基本方法有三种:基于模型的方法(Extra-tree分类器)、迭代搜索(前向逐步选择)和单变量统计(相关性和卡方检验)。
from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)
feat_importances = pd.Series(model.feature_importances_, index=X.columns)
feat_importances.nlargest(13).plot.bar()
plt.show()
list1 = feat_importances.keys().to_list()
# 与输出变量的相关性
cor_target = abs(corr["DEATH_EVENT"])
# 选择高度相关的特征
relevant_features = cor_target[cor_target > 0.2]
list4 = relevant_features.keys().to_list()
list4
chi2_features = SelectKBest(chi2, k=6)
X_kbest_features = chi2_features.fit_transform(X, Y)
mask = chi2_features.get_support()
new_feature = []
for bool, feature in zip(mask, X.columns):
if bool:
new_feature.append(feature)
list3 = new_feature
list3