用于在模拟数据流上选择特性的python包
pystreamfs的Python项目详细描述
pystreamfs是一个开放源码的python包,允许在模拟数据流上快速简单地比较功能选择算法。
用户可以在作为numpy.ndarray提供的任何数据集上模拟具有不同批处理大小的数据流。 pystreamfs将指定的功能选择算法应用于每个批处理,并计算 每次t时选择的功能集。pystreamfs也可用于绘制性能指标。
pystreamfs为数据流提供了5种内置的功能选择算法。此外,您可以在github上找到3个可供下载的数据集。 pystreamfs具有模块化结构,因此易于扩展(有关更多信息,请参见第2.5节)。
许可证:麻省理工学院许可证
即将进行的更改:
- 能够模拟要素流
- 生成人工数据流的能力
- 一次测试多个特征选择算法的能力
1开始
1.1预排队
需要安装以下python模块(比指定的版本旧的版本也可能工作):
- python>;=3.7.1
- numpy=1.15.4
- psutil=5.4.7
- matplotlib>;=2.2.3
- scikit学习>;=0.20.1
1.2如何获取pystreamfs
使用pip:pip安装pystreamfs
或在/dist
中下载并解压缩.tar.gz文件。导航到解压文件夹并执行
python setup.py安装
2包装
2.1文件
主要模块是/pystreamfs/pystreamfs.py
。特征选择算法存储在/algorithms
2.2主模块:pystreamfs.py
pystreamfs.py
提供以下功能:
x,y=准备数据(数据、目标、随机播放)
- 说明:准备用于模拟数据流的数据集:随机排序数据矩阵的行并提取目标变量
y
和功能x
- 输入:
数据
:numpy.ndarray,数据集目标
:int,目标变量的索引shuffle
:bool,如果true
随机排序样本
- 输出:
x
:numpy.ndarray,功能y
:numpy.ndarray,目标变量
- 说明:准备用于模拟数据流的数据集:随机排序数据矩阵的行并提取目标变量
stats=模拟流(x,y,fs_算法,模型,参数)
- 说明:遍历数据集中的所有数据点以模拟数据流。 执行给定的特征选择算法并返回性能统计信息。
- 输入:
x
:numpy.ndarray,这是由prepare\data()返回的
x
y
:numpy.ndarray,这是由prepare\u data()返回的
y
fs_算法
:函数,特征选择算法ml_model
:对象,用于计算精度分数的机器学习模型(关于knn的备注:相邻数量必须大于或等于批量大小)参数
:dict,包括:num-features
:整数,要返回的功能数批处理大小
:整数,在一次迭代中处理的实例数
附加算法特定参数
- 输出:
统计信息
:dict功能
:列表列表,每个批次的选定功能集时间平均值
:float,一次执行功能选择的平均计算时间时间度量值
:列表,每个批次的时间度量值memory_avg
:float,执行一次功能选择后的平均内存使用量,使用psutil.process(os.getpid()).memory_full_info().uss
内存测量
:列出每个批次的内存测量acc_avg
:float,所选功能集分类的平均精度acc_measures
:列表,每批的精度测量值fscr_avg
:浮点,每个时间窗口的平均特征选择更改率(fscr)。 fscr是相对于t-1在t中变化的选定特征的百分比(如果所有选定特征保持相同,则fscr=0;如果所有选定特征发生变化,则fscr=1)fscr_measures
列出每个批次的fscr度量值
plt=plot_stats(stats,ftr_names,param,fs_name,model_name):
- 说明:在所有时间窗口中绘制时间、内存、FSCR和选定功能的统计信息。
- 输入:
统计信息
:dict(请参见simulate嫒stream()
的统计信息
)ftr\u名称
:numpy.ndarray,包含所有功能名称参数
:dict,参数fs_name
:字符串,特征选择算法的名称型号名称
:字符串,机器学习型号的名称
- 输出:
plt
:pyplot对象:统计图
2.3内置功能选择算法
- 基于感知器算法的在线特征选择。(2013年)-链接到论文
- 利用Huang等人的矩阵草图在数据流(FSD)上进行无监督特征选择。(2015年)-链接到纸张
- hamoodi等提出的基于微簇近邻的特征选择方法。(2018年)-链接到论文
- 基于carvalho等人改进的平衡风选分类器的极值特征选择。(2006年)-链接到纸张
- Vadim Borisov基于神经网络的取消特征选择(github)
2.4可下载数据集
所有数据集都已清理并规范化。所有数据集的目标变量都移到第一列。
- 德国信用评分(链接)
- 人类活动识别的二进制版本(链接)。
- 原始har数据集有一个多变量目标。对于它的二进制版本,我们将类"walking"定义为正类(label=1),将所有其他类定义为负类(non-walking)。 我们把172原始"行走"类的2个样本,随机抽取所有其他类的3000个实例。
- usenet(链接)
2.5如何添加特征选择算法
如果要使用pystreamfs测试自己的特征选择算法,则必须将算法封装在一个函数中 格式如下:
defyour_fs_algorithm(X,Y,w,param):"""Your feature selection algorithm :param numpy.nparray X: current data batch :param numpy.nparray Y: labels of current batch :param numpy.nparray w: feature weights :param dict param: any parameters the algorithm requires :return: w (updated feature weights), param :rtype numpy.ndarray, dict """...dofeatureselection...returnw,param
然后,您可以导入和测试功能选择算法,方法与任何内置算法相同(请参见示例)。
<H2>3。例frompystreamfsimportpystreamfsimportnumpyasnpimportpandasaspdfrompystreamfs.algorithmsimportofsfromsklearn.neighborsimportKNeighborsClassifier# Load a datasetdata=pd.read_csv('../datasets/har.csv')feature_names=np.array(data.drop('target',1).columns)data=np.array(data)# Extract features and target variableX,Y=pystreamfs.prepare_data(data,0,False)# Load a FS algorithmfs_algorithm=ofs.run_ofs# Define parametersparam=dict()param['num_features']=5# number of features to returnparam['batch_size']=50# batch size# Define ML modelmodel=KNeighborsClassifier(n_jobs=-1,n_neighbors=5)# Data stream simulationstats=pystreamfs.simulate_stream(X,Y,fs_algorithm,model,param)# Plot statisticspystreamfs.plot_stats(stats,feature_names,param,'Online feature selection (OFS)','K Nearest Neighbor').show()