为了达到使用oneclass svm或者IsolationForest 完成特定语音分类,笔者在kaggle找到一个例子Common Voice | Kaggle,根据mp3文件提取话音特征来预测说话者的年龄,这个例子很好阐述怎么将语音特征提取出来,然后基于特征和性别来有监督学习,最后使用回归模型完成年龄预测。
整个算法分为以下几个个部分:
1、Data Collection 数据探索
查看csv文件中数据内容如下:
2、Data Pre-processing 数据处理
将age、gender列没有空行的数据提取出来。同时将年龄的字符串格式转为机器学习能够识别的数值型数据。
3、Feature Engineering 特征提取
Librosa是一个用于音频分析的Python软件包,提供了创建音频信息检索系统所需的构建模块。Librosa帮助可视化音频信号,并使用不同的信号处理技术进行特征提取。
3.1函数feature_extraction完成特征提取
函数feature_extraction完成四个特征提取:Spectral Centroid、Spectral Centroid、Spectral Rolloff、MFCCs 。然后将csv文件中原有的gender加入到特征features中,性别对于年龄来说也是一个重要的特征。
3.2函数create_df_features组成新的特征dataframe
使用函数create_df_features来存储特征,形成新的dataframe数据,方便后面的训练和测试。
3.3特征标准正态分布StandardScaler
使用StandardScaler将特征转换为标准正态分布。
3.4LabelEncoder将性别类别数字化
使用LabelEncoder将性别类别数字化处理。
3.5SelectKBest过滤特征,选择22个特征
4、Model Selection 模型选择
选择了两个模型:Support Vector Machine(SVM)、Random Forest(随机森林)。
4.1使用网格搜索来完成模型参数选择,总的来说SVM模型更高。
4.2使用SVM模型训练并测试
使用train_test_split完成训练和测试数据分离,使用SVC模型在训练集训练,在测试集测试。
画出混淆矩阵如下:
classification_report获得测试得分如下:
网友评论