?? distant.m
字號:
function [ data_temp ] = distant(r1, r2, data, x, lei, k)
%=====這是relief算法的第三步function [w , m] = weight( r1, r2, data )中的一個子函數。
%=====函數功能:針對樣本x找到一個m×2k的陣
%=====方法:計算每個特征的類內和類間距離。此處為:歐氏距離。(可根據需要選擇不同的方法)
% =====r1和r2分別是兩類樣本的個數。
% =====data是標準化之后的基因表達譜數據。
%=====x是樣本向量。
%=====lei是類別。lei=1表示樣本屬于第一類;lei=0表示樣本屬于第二類。
%=====k是r1和r2中的小值。
%=====data_temp是2k個樣本的基因表達量。大小為:特征個數×2k的陣。其中前面的k個樣本為類內樣本,后面的k個為類間樣本。
%=====data_temp中樣本選擇的原則:按照樣本x與其他同類樣本之間的距離從小到大選出的k個同類樣本;按照樣本x與異類樣本之間按照距離從大到小選出的k個異類樣本。
[m, n] = size( data );
%首先:計算每個樣本的類間和類內距離。
dist_temp = zeros(1, n);
for i = 1: n %樣本循環
y = data(:, i);
dist_temp(i) = sqrt(sum((x-y).*(x-y))); %是否有歐氏距離的函數。
end
if lei == 1 %表示樣本屬于第一類
[b1, ix1] = sort (dist_temp(1: r1)); %類內:從小到大排序選擇距離小的k個。
[b2, ix2] = sort (dist_temp(r1+1: n), 'descend');%類間:從大到小排序選擇距離大的k個。
data_temp(:, 1: k) = data (:,ix1(1: k)); %ix1(b-k+1:b)
data_temp(:, k+1:2*k) = data (:,(r1+ix2(1: k)));
else %表示樣本屬于第二類。
[b1,ix1] = sort (dist_temp(r1+1:n));%類內:從小到大排序選擇距離小的k個。
[b2,ix2] = sort (dist_temp(1:r1), 'descend' ); %類間:從大到小排序選擇距離大的k個。
data_temp(:,1:k) = data (:, (r1+ix1(1:k))); %ix1(b-k+1:b)
data_temp(:,k+1:2*k) = data (:, ix2(1:k));
end
%end of function [data_hm]=distant(r1,r2,data,x,lei,k)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -