数据观世界
引言
机器学习和深度学习算法都是从由不同类型的特征组成的数据中学习。机器学习算法的训练时间和性能在很大程度上取决于数据集中的特征。理想情况下,我们应该只在数据集中保留那些实际上有助于我们的机器学习模型学习的东西。
不必要的冗余特征不仅减慢了算法的训练时间,而且还影响了算法的性能。选择用于训练机器学习模型的最合适特征的过程称为“特征选择”。
在训练机器学习模型之前执行特征选择主要由以下几个方面的好处:
具有较少特征的模型具有较高的可解释性具有较少特征的机器学习模型更容易较少的特征可以增强泛化,减少过度拟合特征选择可消除数据冗余具有较少特征的模型的训练时间显着降低具有较少特征的模型不容易出错人们已经提出了多种方法来为机器学习算法选择最佳特征,其中一类方法称为过滤器方法。在本文中,我们将学习一些用于特征选择的基本过滤方法。
特征选择的过滤器方法
过滤器方法属于特征选择方法的一种类别,其可以选择独立于机器学习算法模型之外的特征,使用过滤方法选择的特征可用作任何机器学习模型的输入,这是过滤方法的最大优点之一。过滤器方法的另一个优点是速度非常快。
过滤器方法可大致分为两类:单变量过滤器方法和多变量过滤器方法。
单变量过滤器方法是根据特定标准对各个特征进行排序,然后选择前N个特征。可以将不同类型的排名标准用于单变量过滤器方法,例如费舍尔得分(fisher score),互信息(mutual information)和特征方差。
单变量滤波器方法的主要缺点之一是它可能会选择冗余特征,因为在做出决策时不考虑各个特征之间的关系,单变量滤波器方法非常适合从数据中去除常量和准常量特征。
多变量过滤器方法能够考虑特征之间的相互关系,从数据中删除冗余特征。
在本文中,我们将看到如何在Python的帮助下从数据集中删除常量,准常量,重复和相关的特征。
一、删除常量特征
常量特征是仅包含数据集中所有输出的一个值的特征,其不提供任何有助于对记录进行分类的信息。因此,建议从数据集中删除所有常量特征。
让我们看看如何从数据集中删除常量特征。我们采用的数据集是Santandar Customer Satisfaction数据集,可以从Kaggle下载,我们将使用“train.csv”。但是,为了方便,我们将其重命名为“santandar_data.csv”。
导入所需的库和数据集
常量特征的值具有零方差,因为所有值都相同。我们可以使用Python的Scikit Learn库的VarianceThreshold函数找到常量列。执行以下代码以导入所需的库和数据集:
在输出中,您应该看到(40000,371),这意味着我们的数据集中有4万行和371列。
将数据拆分为训练集和测试集
需要注意的是,为了避免过拟合,特征选择应仅应用于训练集。我们将数据划分为训练和测试集。执行以下脚本:
使用方差阈值删除常量特征
为删除常量特征,我们将使用之前导入的VarianceThreshold函数。该函数需要输入阈值参数的值,为参数传递零值将过滤所有具有零方差的特征。 执行以下脚本以创建常量特征的过滤器:
consta