如何在Python中使用opensmile将提取的特征保存为.arff文件?
解决opensmile特征转Weka兼容ARFF文件的方法
opensmile处理后返回的y是pandas DataFrame,可以借助第三方库直接将其转换为符合Weka要求的ARFF格式,以下是两种可靠实现方式:
方法一:使用pandas-arff库(推荐)
这个库专门针对pandas DataFrame和ARFF格式的转换,对Weka兼容性更好。
步骤1:安装依赖
pip install pandas-arff
步骤2:修改代码实现保存
import opensmile from pandas_arff import dump smile = opensmile.Smile( feature_set=opensmile.FeatureSet.ComParE_2016, feature_level=opensmile.FeatureLevel.Functionals, ) y = smile.process_file('audio.wav') # 可选:如果是分类任务,添加类别标签列(示例) # y['class_label'] = 'positive' # 根据你的实际标签修改 # 保存为ARFF文件 dump( y, 'audio_features.arff', relation='audio_compar_features', # 自定义ARFF的关系名称 clean_string_values=True, arff_encode_nominal=True # 自动将字符串类型列识别为Weka的nominal属性 )
方法二:使用scipy库(无需额外安装)
如果已经安装了scipy,可以用其内置的ARFF处理工具:
import opensmile from scipy.io import arff smile = opensmile.Smile( feature_set=opensmile.FeatureSet.ComParE_2016, feature_level=opensmile.FeatureLevel.Functionals, ) y = smile.process_file('audio.wav') # 将DataFrame转换为结构化数组 structured_data = y.to_records(index=False) # 保存ARFF文件 arff.savearff('audio_features_scipy.arff', structured_data)
注意事项
- 多文件处理:如果要批量处理音频,先将所有文件的特征合并到同一个DataFrame,再保存为单个ARFF文件,方便Weka批量加载。
- 特征名兼容性:opensmile的ComParE_2016特征名基本符合Weka要求,无需额外修改。
- 类别标签:如果添加标签列,确保标签为字符串类型,这样会被Weka识别为分类属性。
内容的提问来源于stack exchange,提问作者Mister Sir
相关产品推荐
相关产品推荐

