在机器学习问题中,特征选择有助于减少过拟合,去除噪声变量,减少内存占用。
在这篇文章中,我们提出了一种新的技术,即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表示没有。
Modeling选项卡给出了实验中使用的特征细节,以及代码中使用的变量,如平均准确率、洗牌标志等。
信息选项卡给出了用于做实验的文件的细节,包括版本、实验中使用的技术和实验的时间戳。
EDA-correlation,顾名思义,给出了特征之间的关联性。
EDA-散点图,顾名思义,给出了特征的散点图。
EDA-性能图绘制了代码中使用的变量值与实验时间戳。






