机器学习音乐情感识别(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);elseend%回归预测与实际值的对比图
disp(s);
diff = pred - label;
plot(diff);

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部