在机器学习中使用FRUFS和VevestaX进行特征选择的教程

134 阅读3分钟

在机器学习问题中,特征选择有助于减少过拟合,去除噪声变量,减少内存占用。

在这篇文章中,我们提出了一种新的技术,即FRUFS

该算法是基于这样的理念:最重要的特征是能够基本代表所有其他特征的特征。同样地,第二个最重要的特征可以近似于所有其他的特征,但没有最重要的特征好,以此类推。

FRUFS与模型无关,是无监督的,这意味着Y在识别特征的重要性方面没有作用。因此,在第一步,我们从数据中删除Y。然后,我们把一个单一的特征j作为目标,并尝试用其余的特征用任何模型f来预测它。

在这个技术中,目标是X[j],特征是X[~j],其中X是数据。

所有的特征(除了特征j)都被用来预测特征j。该技术与模型无关,也就是说,从线性回归到XGBoost的任何模型都可以被用来预测目标特征j。这个过程对所有的特征重复进行,即1<=j<=n,最后,特征重要性被平均化。注意,数据的抽样是为了提高算法的收敛速度。

总之,我们可以说这个算法取决于一个特征对其他特征的预测能力。如果特征1可以被特征2、3和4所预测。我们可以很容易地放弃特征2、3和4。基于这个想法,FRUFS(基于特征相关性的无监督特征选择)被定义了。作者将FRUFS描述为一种无监督的特征选择技术,它使用有监督的算法,如XGBoost,根据特征的重要性进行排序。

如何使用VevestaX

为了跟踪实验--特征、设计的特征和参数,你可以使用VevestaX库。安装VevestaX的方法如下。

pip install vevestaX

导入并创建一个vevesta对象,如下所示

from vevestaX import vevesta as v
    
V=v.Experiment()

追踪所使用的特征

V.ds = data

其中data是带有输入特征的pandas数据帧。

追踪所设计的特征

V.fe = data

最后,如果你想跟踪代码中使用的特定变量,请在代码块的开头用V.start()括起来,在代码块的结尾用V.end()括起来。默认情况下,VevestaX跟踪代码中使用的所有变量。最后,使用V.dump将所使用的特征和变量转储到EXCEL文件中。例如

V.dump(technicalUsed = "XGBoost")

如果你在kaggle或者colab上工作,或者不想使用V.start()和V.end(),默认情况下,VevestaX会为你跟踪代码中使用的所有变量(原始数据类型)。

如何使用Frufs

你可以用以下方式安装这个库

pip install FRUFS

从导入该库开始

from FRUFS import FRUFS

按如下方式调用FRUFS对象。

model = FRUFS(model\_r, model\_c, k, n\_jobs, verbose, categorical\_features, random\_state)

例子

model = FRUFS(model\_r=DecisionTreeRegressor(random\_state=27),k=5, n\_jobs=-1, verbose=0, random\_state=1)

现在训练FRUFS模型,用它来缩小你的数据规模

x = model.fit\_transform(x)

最后,得到一个特征重要性得分的图表

model.feature\_importance()

关于VevestaX的更多信息,请访问Github

VevestaX库的输出样本

数据来源选项卡详细说明了实验中使用的特征,1表示特征存在,0表示实验中没有。

特征工程(Feature Engineering)选项卡详细介绍了在实验中创建的特征,1表示特征在该实验中被设计了,0表示没有。

frufs table 2

Modeling选项卡给出了实验中使用的特征细节,以及代码中使用的变量,如平均准确率、洗牌标志等。

frufs table 1

信息选项卡给出了用于做实验的文件的细节,包括版本、实验中使用的技术和实验的时间戳。

frufs table 4

EDA-correlation,顾名思义,给出了特征之间的关联性。

frufs table 5

EDA-散点图,顾名思义,给出了特征的散点图。

frufs scatterplot

EDA-性能图绘制了代码中使用的变量值与实验时间戳。

frufs performance plot

点击这里获取源代码