国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

特征維度降維算法——平均影響值算法(MIV)免費(fèi)MATLAB代碼獲取,西儲大學(xué)數(shù)據(jù)為例

這篇具有很好參考價值的文章主要介紹了特征維度降維算法——平均影響值算法(MIV)免費(fèi)MATLAB代碼獲取,西儲大學(xué)數(shù)據(jù)為例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1. 原理概述????

????????眾所周知,常用的特征維度降維方法有主成分分析,因子分析法,平均值影響法。而平均影響值算法(MIV)是神經(jīng)網(wǎng)絡(luò)對輸入變量進(jìn)行降維的最好方法之一。

????????在神經(jīng)網(wǎng)絡(luò)模型實(shí)際應(yīng)用中,由于沒有明確的理論來確定輸入變量,即網(wǎng)絡(luò)輸入神經(jīng)元難以確定。假如在神經(jīng)網(wǎng)絡(luò)的輸入變量中摻雜一些不重要的自變量,不僅會增加模型的訓(xùn)練時間,也會降低模型準(zhǔn)確性。因此篩選出影響程度大的網(wǎng)絡(luò)輸入變量對神經(jīng)網(wǎng)絡(luò)的改進(jìn)具有重要意義。

????????平均影響值(MIV)是評估輸入自變量對輸出變量影響程度的一個指標(biāo),MIV的正負(fù)表示該自變量對輸出變量的影響方向,其絕對值大小表示影響程度。MIV通過對自變量特征指標(biāo)值進(jìn)行加減10%,構(gòu)建兩個新的訓(xùn)練樣本,計算其對輸出的影響變化值(IV),然后將影響變化值(IV)平均得到該自變量的MIV值,最后將每個自變量都重復(fù)上述步驟得到每個自變量的MIV值,并按絕對值大小對各自變量的影響程度進(jìn)行排序。

2. 實(shí)驗部分

????????以西儲大學(xué)軸承數(shù)據(jù)為例,計算軸承數(shù)據(jù)的均值,方差,峰值,峭度,有效值,峰值因子,脈沖因子,波形因子,裕度因子共九個指標(biāo)作為神經(jīng)網(wǎng)絡(luò)的輸入神經(jīng)元。通過MIV值計算,篩選出特征重要度重要的幾個指標(biāo),達(dá)到特征降維,提升診斷精度的目的。

????????代碼實(shí)現(xiàn)的功能有很多,包含原生數(shù)據(jù)的滑動窗口處理,特征值計算,神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)準(zhǔn)備,MIV值計算,以及特征篩選后的診斷結(jié)果。大家按需所取,如果感覺代碼臃腫的后臺可以留言,我可以將代碼分開再發(fā)幾篇文章供大家參考。

????先上代碼結(jié)果:

????MIV值計算結(jié)果:

特征維度降維算法——平均影響值算法(MIV)免費(fèi)MATLAB代碼獲取,西儲大學(xué)數(shù)據(jù)為例

?????????篩選后的前四個重要的特征作為神經(jīng)網(wǎng)絡(luò)的神經(jīng)元輸入,帶入神經(jīng)網(wǎng)絡(luò)后的結(jié)果如下:

特征維度降維算法——平均影響值算法(MIV)免費(fèi)MATLAB代碼獲取,西儲大學(xué)數(shù)據(jù)為例

接下來上正餐:

????首先是滑動窗口數(shù)據(jù)處理代碼,一共是10個狀態(tài),每個狀態(tài)有120組樣本,每個樣本的數(shù)據(jù)量大小為:1×2048,共選取了電機(jī)轉(zhuǎn)速為1797下的10種故障數(shù)據(jù)來來進(jìn)行實(shí)驗。將數(shù)據(jù)集合在一個data變量中。

clear
clc
addpath(genpath(pwd));
%DE是驅(qū)動端數(shù)據(jù) FE是風(fēng)扇端數(shù)據(jù) BA是加速度數(shù)據(jù) 選擇其中一個就行
load 97.mat  %正常
load 105.mat  %直徑0.007英寸,轉(zhuǎn)速為1797時的  內(nèi)圈故障
load 118.mat   %直徑0.007,轉(zhuǎn)速為1797時的  滾動體故障
load 130.mat  %直徑0.007,轉(zhuǎn)速為1797時的  外圈故障
load 169.mat   %直徑0.014英寸,轉(zhuǎn)速為1797時的  內(nèi)圈故障
load 185.mat    %直徑0.014英寸,轉(zhuǎn)速為1797時的  滾動體故障
load 197.mat    %直徑0.014英寸,轉(zhuǎn)速為1797時的  外圈故障
load 209.mat   %直徑0.021英寸,轉(zhuǎn)速為1797時的  內(nèi)圈故障
load 222.mat  %直徑0.021英寸,轉(zhuǎn)速為1797時的  滾動體故障
load 234.mat  %直徑0.021英寸,轉(zhuǎn)速為1797時的 外圈故障
% 一共是10個狀態(tài),每個狀態(tài)有120組樣本,每個樣本的數(shù)據(jù)量大小為:1×2048
w=1000;                  % w是滑動窗口的大小1000
s=2048;                  % 每個故障表示有2048個故障點(diǎn)
m = 120;            %每種故障有120個樣本
D0=[];
for i =1:m
    D0 = [D0,X097_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D0 = D0';
D1=[];
for i =1:m
    D1 = [D1,X105_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D1 = D1';

D2=[];
for i =1:m
    D2 = [D2,X118_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D2 = D2';
D3=[];
for i =1:m
    D3 = [D3,X130_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D3 = D3';
D4=[];
for i =1:m
    D4 = [D4,X169_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D4 = D4';
D5=[];
for i =1:m
    D5 = [D5,X185_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D5 = D5';
D6=[];
for i =1:m
    D6 = [D6,X197_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D6 = D6';
D7=[];
for i =1:m
    D7 = [D7,X209_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D7 = D7';
D8=[];
for i =1:m
    D8 = [D8,X222_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D8 = D8';
D9=[];
for i =1:m
    D9 = [D9,X234_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D9 = D9';
data = [D0;D1;D2;D3;D4;D5;D6;D7;D8;D9];

然后將data變量的每一條數(shù)據(jù)求均值,方差,峰值,峭度,有效值,峰值因子,脈沖因子,波形因子,裕度因子共九個指標(biāo),并存放在new_data變量中。

for i = 1:size(data,1)
    xdata = data(i,:);
    junzhi=mean(xdata);  %均值
    fangcha=mean((xdata-junzhi).^2);   %方差
    p=max(xdata)-min(xdata);  %峰值
    k=kurtosis(xdata);  %峭度
    r=rms(xdata); %有效值
    c=p/r;    %峰值因子
    v=p/mean(abs(xdata)); %脈沖因子
    s=r/mean(abs(xdata));  %波形因子
    ma=p/mean(sqrt(abs(xdata)))^2;  %裕度因子
    new_data(i,:) = [junzhi,fangcha,p,k,r,c,v,s,ma];
end

??接下來是數(shù)據(jù)送入神經(jīng)網(wǎng)絡(luò)之前的整理,具體就是給每類數(shù)據(jù)打上標(biāo)簽和歸一化。

%% 導(dǎo)入數(shù)據(jù)
bv = 120;    %每種狀態(tài)數(shù)據(jù)有60組
% 加標(biāo)簽值
hhh = size(new_data,2); 
for i=1:size(new_data,1)/bv
    new_data(1+bv*(i-1):bv*i,hhh+1)=i;
end
% 輸入數(shù)據(jù)
input=new_data(:,1:end-1);    %第1列至倒數(shù)第2列為輸入
output=data(:,end);       %最后1列為輸出
[inputn,inputps]=mapminmax(input',0,1);
[outputn,outputps]=mapminmax(output');

?求取MIV值的具體代碼:

p=inputn;
t=outputn;
p=p';
[m,n]=size(p);
yy_temp=p;
% p_increase為增加10%的矩陣 p_decrease為減少10%的矩陣
for i=1:n
    p=yy_temp;
    pX=p(:,i);
    pa=pX*1.1;
    p(:,i)=pa;
    aa=['p_increase'  int2str(i) '=p;'];
    eval(aa);
end

for i=1:n
    p=yy_temp;
    pX=p(:,i);
    pa=pX*0.9;
    p(:,i)=pa;
    aa=['p_decrease' int2str(i) '=p;'];
    eval(aa);
end
%% 特征重要度神經(jīng)網(wǎng)絡(luò)
nntwarn off;
p=yy_temp;
p=p';
% bp網(wǎng)絡(luò)建立
net=newff(minmax(p),[8,1],{'tansig','purelin'},'traingdm');
% 初始化網(wǎng)絡(luò)
net=init(net);
% 網(wǎng)絡(luò)訓(xùn)練參數(shù)設(shè)置
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.7;
net.trainParam.epochs=2000;
net.trainParam.showWindow = false;
net.trainParam.showCommandLine = false;
% 網(wǎng)絡(luò)訓(xùn)練
net=train(net,p,t);
%% 變量重要度計算
% 轉(zhuǎn)置后sim
for i=1:n
    eval(['p_increase',num2str(i),'=transpose(p_increase',num2str(i),');'])
end
for i=1:n
    eval(['p_decrease',num2str(i),'=transpose(p_decrease',num2str(i),');'])
end
% result_in為增加10%后的輸出 result_de為減少10%后的輸出
for i=1:n
    eval(['result_in',num2str(i),'=sim(net,','p_increase',num2str(i),');'])
end
for i=1:n
    eval(['result_de',num2str(i),'=sim(net,','p_decrease',num2str(i),');'])
end
for i=1:n
    eval(['result_in',num2str(i),'=transpose(result_in',num2str(i),');'])
end
for i=1:n
    eval(['result_de',num2str(i),'=transpose(result_de',num2str(i),');'])
end
%  MIV的值
%  MIV被認(rèn)為是在神經(jīng)網(wǎng)絡(luò)中評價變量相關(guān)的最好指標(biāo)之一
%  其符號代表相關(guān)的方向,絕對值大小代表影響的相對重要性。
for i=1:n
    IV= ['result_in',num2str(i), '-result_de',num2str(i)];
    eval(['MIV_',num2str(i) ,'=mean(',IV,')*(1e7)',';']) ;
    eval(['MIVX=', 'MIV_',num2str(i),';']);
    MIV(i,:)=MIVX;
end
[MB,iranked] = sort(MIV,'descend');

??數(shù)據(jù)可視化分析,畫圖:

%% 數(shù)據(jù)可視化分析
%-------------------------------------------------------------------------------------
figure()
barh(MIV(iranked),'g');
xlabel('Variable Importance','FontSize',12,'Interpreter','latex');
ylabel('Variable Rank','FontSize',12,'Interpreter','latex');
title('特征變量重要度','fontsize',12,'FontName','華文宋體')
hold on
barh(MIV(iranked(1:5)),'y');
hold on
barh(MIV(iranked(1:3)),'r');
grid on 
xt = get(gca,'XTick');    
xt_spacing=unique(diff(xt));
xt_spacing=xt_spacing(1);    
yt = get(gca,'YTick');    
% 條形標(biāo)注
for ii=1:length(MIV)
    text(...
        max([0 MIV(iranked(ii))+0.02*max(MIV)]),ii,...
        ['P ' num2str(iranked(ii))],'Interpreter','latex','FontSize',12);
end
set(gca,'FontSize',12)
set(gca,'YTick',yt);
set(gca,'TickDir','out');
set(gca, 'ydir', 'reverse' )
set(gca,'LineWidth',2);
drawno

接下來是將求得的iranked值帶入神經(jīng)網(wǎng)絡(luò)里邊,求出診斷結(jié)果的代碼。


function [outputt,predict_label]  = BP(iranked)
addpath(genpath(pwd));
%DE是驅(qū)動端數(shù)據(jù) FE是風(fēng)扇端數(shù)據(jù) BA是加速度數(shù)據(jù) 選擇其中一個就行
load 97.mat  %正常
load 105.mat  %直徑0.007英寸,轉(zhuǎn)速為1797時的  內(nèi)圈故障
load 118.mat   %直徑0.007,轉(zhuǎn)速為1797時的  滾動體故障
load 130.mat  %直徑0.007,轉(zhuǎn)速為1797時的  外圈故障
load 169.mat   %直徑0.014英寸,轉(zhuǎn)速為1797時的  內(nèi)圈故障
load 185.mat    %直徑0.014英寸,轉(zhuǎn)速為1797時的  滾動體故障
load 197.mat    %直徑0.014英寸,轉(zhuǎn)速為1797時的  外圈故障
load 209.mat   %直徑0.021英寸,轉(zhuǎn)速為1797時的  內(nèi)圈故障
load 222.mat  %直徑0.021英寸,轉(zhuǎn)速為1797時的  滾動體故障
load 234.mat  %直徑0.021英寸,轉(zhuǎn)速為1797時的 外圈故障
% 一共是10個狀態(tài),每個狀態(tài)有120組樣本,每個樣本的數(shù)據(jù)量大小為:1×2048
w=1000;                  % w是滑動窗口的大小1000
s=2048;                  % 每個故障表示有2048個故障點(diǎn)
m = 120;            %每種故障有120個樣本
D0=[];
for i =1:m
    D0 = [D0,X097_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D0 = D0';
D1=[];
for i =1:m
    D1 = [D1,X105_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D1 = D1';

D2=[];
for i =1:m
    D2 = [D2,X118_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D2 = D2';
D3=[];
for i =1:m
    D3 = [D3,X130_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D3 = D3';
D4=[];
for i =1:m
    D4 = [D4,X169_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D4 = D4';
D5=[];
for i =1:m
    D5 = [D5,X185_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D5 = D5';
D6=[];
for i =1:m
    D6 = [D6,X197_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D6 = D6';
D7=[];
for i =1:m
    D7 = [D7,X209_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D7 = D7';
D8=[];
for i =1:m
    D8 = [D8,X222_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D8 = D8';
D9=[];
for i =1:m
    D9 = [D9,X234_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D9 = D9';
data = [D0;D1;D2;D3;D4;D5;D6;D7;D8;D9];
for i = 1:size(data,1)
    xdata = data(i,:);
    junzhi=mean(xdata);
    fangcha=mean((xdata-junzhi).^2);   
    p=max(xdata)-min(xdata); 
    k=kurtosis(xdata);
    r=rms(xdata); 
    c=p/r; 
    v=p/mean(abs(xdata));
    s=r/mean(abs(xdata));
    ma=p/mean(sqrt(abs(xdata)))^2;
    new_data1(i,:) = [junzhi,fangcha,p,k,r,c,v,s,ma];
end

%這里進(jìn)行一個簡單的判斷
iranked = iranked';
if sum(length(iranked)==[1,2,3,4,5,6,7,8,9])==9
    new_data = new_data1;
else
    ir = iranked(1:4);  %取重要度較高的前4個特征作為神經(jīng)網(wǎng)絡(luò)的輸入
    new_data = new_data1(:,ir);
end

rng('default')
%% 導(dǎo)入數(shù)據(jù)
bv = 120;    %每種狀態(tài)數(shù)據(jù)有60組
% 加標(biāo)簽值
hhh = size(new_data,2); 
for i=1:size(new_data,1)/bv
    new_data(1+bv*(i-1):bv*i,hhh+1)=i;
end
new_data=new_data(randperm(size(new_data,1)),:);    %此行代碼用于打亂原始樣本,使訓(xùn)練集測試集隨機(jī)被抽取,有助于更新預(yù)測結(jié)果。
input=new_data(:,1:end-1);
output1 =new_data(:,end);
for i=1:size(new_data,1)
    switch output1(i)
        case 1
            output(i,1)=1;
        case 2
            output(i,2)=1;
        case 3
            output(i,3)=1;
         case 4
          output(i,4)=1;
         case 5
          output(i,5)=1;
            case 6      
          output(i,6)=1;
            case 7
          output(i,7)=1;
            case 8     
          output(i,8)=1;
            case 9    
          output(i,9)=1;
            case 10   
          output(i,10)=1;
     end
end
m=fix(size(new_data,1)*0.7);    %訓(xùn)練的樣本數(shù)目
input_train=input(1:m,:)';
output_train=output(1:m,:)';
input_test=input(m+1:end,:)';
output_test=output(m+1:end,:)';
%% 數(shù)據(jù)歸一化
[inputn,inputps]=mapminmax(input_train,0,1);
% [outputn,outputps]=mapminmax(output_train);
inputn_test=mapminmax('apply',input_test,inputps);
 
hiddennum_best = 30;
%% 構(gòu)建最佳隱含層節(jié)點(diǎn)的BP神經(jīng)網(wǎng)絡(luò)
disp(' ')
disp('標(biāo)準(zhǔn)的BP神經(jīng)網(wǎng)絡(luò):')
net0=newff(inputn,output_train,hiddennum_best,{'tansig','purelin'},'trainlm');% 建立模型
%網(wǎng)絡(luò)參數(shù)配置
net0.trainParam.epochs=1000;            % 訓(xùn)練次數(shù),這里設(shè)置為1000次
net0.trainParam.lr=0.01;                % 學(xué)習(xí)速率,這里設(shè)置為0.01
net0.trainParam.goal=0.000001;           % 訓(xùn)練目標(biāo)最小誤差,這里設(shè)置為0.0001
net0.trainParam.show=25;                % 顯示頻率,這里設(shè)置為每訓(xùn)練25次顯示一次
% net0.trainParam.mc=0.01;                % 動量因子
net0.trainParam.min_grad=1e-6;          % 最小性能梯度
net0.trainParam.max_fail=6;             % 最高失敗次數(shù)
 
%開始訓(xùn)練
net0=train(net0,inputn,output_train);
%預(yù)測
an0=sim(net0,inputn_test); %用訓(xùn)練好的模型進(jìn)行仿真
predict_label=zeros(1,size(an0,2));
for i=1:size(an0,2)
    predict_label(i)=find(an0(:,i)==max(an0(:,i)));
end
outputt=zeros(1,size(output_test,2));
for i=1:size(output_test,2)
    outputt(i)=find(output_test(:,i)==max(output_test(:,i)));
end

%% 畫方框圖
confMat = confusionmat(outputt,predict_label);  %output_test是真實(shí)值標(biāo)簽
figure;
set(gcf,'unit','centimeters','position',[15 5 13 9])
plotConfMat(confMat.');  
xlabel('Predicted label')
ylabel('Real label')
hold off
end

歡迎大家評論區(qū)留言哦!

代碼獲取方式,下方卡片回復(fù)關(guān)鍵詞:特征降維

歡迎大家評論區(qū)留言,需要什么類型的代碼,歡迎告訴博主!文章來源地址http://www.zghlxwxcb.cn/news/detail-482713.html

到了這里,關(guān)于特征維度降維算法——平均影響值算法(MIV)免費(fèi)MATLAB代碼獲取,西儲大學(xué)數(shù)據(jù)為例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包