机器学习音乐情感识别(matlab)


% 作者: dongyang
% 说明:本示例用以说明matlab的回归分析。matlab中的回归分析都在统计和机器学习工具箱里,和模式分类一样:
% 回归有单因变量回归分析(univariate)和多因变量回归分析(multivariate)。这里只讨论univariate回归分析
%  Matlab中的回归分析可以分为线性,广义线性,非线性等三大类。每一类的结果评估都会有所不同。
%  线性回归分析的评价:1,判定系数;2,预测结果与实际值的相关系数;3,用Anova做系数的显著性分析
%  广义线性回归分析的评价:1,判定系数;2,预测结果与实际值的相关系数。
%  非线性回归分析的评价:1,损失函数;2,预测结果与实际值的相关系数

%  高维度数据的特殊操作:一般对中低维度的特征数据,不管是回归还是分类,在matlab中都可以用SVM、线性回归或者逻辑回归模型来操作。
%                        但是对于高维度数据,如果不做特征选择的话,matlab中最好用高维线性回归(分类)模型来进行,适用函数是fitrlinear或者fitclinear
% 本示例里面介绍了线性回归,广义线性回归,SVM回归,高维度数据的线性回归,高斯过程回归,树回归等六种回归分析方法及其相应的结果评估
% 时间:10/2018


%数据读取和训练集/测试集拆分
m = csvread('E:/Data/music-a.csv',1,0); %参数中的1和0表示从第1行第0列开始读取,默认csv文件的第0行是label行
r = size(m);
column = r(2);
data = m(:,2:column);
label = m(:,1);
lc = length(unique(label));

Method = 6;  % 选择回归分析方法

if Method == 1
    % 线性回归
    disp('线性回归:');
    mdl = fitlm(data,label);
    pred = predict(mdl,data);
    corr = corrcoef(pred, label);
    % 结果的统计分析
    s = struct('R2',[],'aR2',[],'Corr',[],'Anova',[]);
    s.R2 = mdl.Rsquared.Ordinary;
    s.aR2 = mdl.Rsquared.Adjusted;
    s.Corr = corr(1,2);
    s.Anova = anova(mdl);
    
elseif Method == 2
    % 广义线性回归:它与线性回归的区别在于GLM的预测值分布并不仅仅是LM的正态分布,还可以是泊松、伽马、高斯等分布函数
    % 但是相比LM,GLM的属性里面没有了Anova分析,因为该分析是假设数据总体服从正态分布的
    % GLM的分布可以在参数中设置,默认值是正态分布
    disp('广义线性回归:');
    mdl = fitglm(data, label, 'linear', 'Distribution', 'gamma');
    pred = predict(mdl,data);
    corr = corrcoef(pred, label);
    % 结果的统计分析
    s = struct('R2',[],'aR2',[],'Corr',[],'NumCoef',[]);
    s.R2 = mdl.Rsquared.Ordinary;
    s.aR2 = mdl.Rsquared.Adjusted;
    s.Corr = corr(1,2);
    s.NumCoef = mdl.NumEstimatedCoefficients;
    
elseif Method == 3
     % 高维线性回归分析:适用高维度特征数据的回归分析模型,损失评估可以选择支持向量机或者最小均方误差函数准则
     % 它的结果评估不支持判定系数和Anova分析
    disp('高维线性回归:');
    mdl = fitrlinear(data,label);
    pred = predict(mdl,data);
    corr = corrcoef(pred, label);
    % 结果的统计分析
    s = struct('mse_Loss',[],'eps_Loss',[],'Corr',[]);
    s.mse_Loss = loss(mdl, data, label);
    s.eps_Loss = loss(mdl, data, label, 'LossFun','epsiloninsensitive');
    s.Corr = corr(1,2);
    
elseif Method == 4
     % SVM回归分析:非线性分析,所以不能做判定系数,一般用损失函数来检验结果
    disp('SVM回归:');
    mdl = fitrsvm(data, label,'KernelFunction','gaussian');
    pred = resubPredict(mdl);
    corr = corrcoef(pred, label);
    s = struct('mse_Loss',[],'eps_Loss',[],'Corr',[]);
    s.mse_Loss = resubLoss(mdl);
    s.eps_Loss = resubLoss(mdl,'LossFun','epsiloninsensitive');
    s.Corr = corr(1,2);
    
elseif Method == 5
    % 高斯过程回归
    disp('高斯过程回归:');
    mdl = fitrgp(data, label,'KernelFunction','squaredexponential');
    pred = resubPredict(mdl);
    corr = corrcoef(pred, label);
    s = struct('mse_Loss',[],'Corr',[]);
    s.mse_Loss = resubLoss(mdl);
    s.Corr = corr(1,2);
    
elseif Method == 6
    % 树回归
    disp('树回归:');
    mdl = fitrtree(data, label);
    pred = resubPredict(mdl);
    corr = corrcoef(pred, label);
    s = struct('mse_Loss',[],'Corr',[]);
    s.mse_Loss = resubLoss(mdl);
    s.Corr = corr(1,2);
    
else
    
end

%回归预测与实际值的对比图
disp(s);
diff = pred - label;
plot(diff);

 

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值