机器学习笔记(Matlab 版本)

1. python 与MATLAB数据互相之间可以转换:   .mat 数据可以转化为Python 格式的数据。
         save input1.mat input1;
         save input2.mat input2;
2. 1  采用随机森林算法处理minist 数据的正确率大概为96%左右,随机森林是普通机器学习算法中最优秀的算法之一了。
2.2 

3.    indices = crossvalind('Kfold', 10, 3);                %将数据样本随机分割为3部分。
      indices  生成10行1列的数据,结果在1,2,3之间出现。
      test = (indices == 1);       %%数组与标量之间的关系运算,结果为逻辑型数据。
%%    其中每一行代表一个样本
Data=[1 2;2 3;3 4;4 5;5 6;6 7];
target=[1;2;3;4;5;6];
Data_target=[Data target];
indices = crossvalind('Kfold',6, 3);       %%注意每次运算得到的结果均不一致,三分之二的数据用于训练, 三分之一的数据用于测试。
indices=[2;1 ;3 ;3 ;1 ;2];
i=1;
test = (indices == i);
train = ~test;
trainData = Data(train, :);
testData = Data(test, :);
traintarget = target(train, :);
testtarget = target(test, :);

3.1数组与标量之间的的6种关系运算符最后得到的结果为与数组逐元素比较得到的新数组。 (关系运算符得到的结果为逻辑型变量)
3.2 数组与数组之间的的6种关系运算符最后得到的结果为与数组逐元素比较得到的新数组。

accuracy1 = zeros(1,4);
for i = 1:4
    test = (indices == i);
    train = ~test;
    p_cv_train=p_train(train,:);
    t_cv_train=t_train(train,:);
    p_cv_test=p_train(test,:);
    t_cv_test=t_train(test,:);
    model = TreeBagger(500, p_cv_train, t_cv_train,'NumPredictorsToSample', 5);
    [Predict_label,Scores] = predict(model,p_cv_test);
    T_sim_1=str2num(cell2mat(Predict_label));
    accuracy1(i) = length(find(T_sim_1 == t_cv_test)) / length(t_cv_test)*100;
end
accuracy2=mean(accuracy1);

4. 高光谱图像分类代码: http://www.escience.cn/people/jiangjunjun/Project_Code.html
7*7 均值滤波:
for i=1:size(data,3);
    data(:,:,i) = imfilter(data(:,:,i),fspecial('average',7));
end 

4.1  sub2ind (size(data),i,j)  将第i行第j列的数据转化为单下标。       %自带for 循环。

[m n p] = size(indian_pines_corrected);
indian_pines_map = uint8(zeros(m,n));
data_col = reshape(indian_pines_corrected,m*n,p);
[mm nn] = ind2sub([m n],1:m*n);       %自带for 循环。
data_col = [mm' nn' data_col];           %每个像元对应的行数+列数+各个波段像元值。(一行表示一个像元)

G=reshape(BPoutput,m,n);
valid_index=sub2ind([m,n],sample(m_train*train_ratio+1:end,2),sample(m_train*train_ratio+1:end,1));%%%取验证样本的下标
c=mean(G(valid_index));  % the c in paper,we use mean value of all data
disp(['mean c: ',num2str(c)]);
Pro=mat2gray(G./c);  %Normalized Probability

ENVI 中ROI数据导出为TXT文档时将以像元方式逐行显示,X代表像元所在的列数,Y代表像元所在的行数。
(如果将经典版本中的ROI转化为shp文件,将直接转化为点文件,不利于端元位置显示,新版本中可以直接转化为面文件)

; ENVI Output of ROIs (5.3.1) [Wed Mar 21 16:29:54 2018]
; Number of ROIs: 1
; File Dimension: 1059 x 886
;
; ROI name: roi
; ROI rgb value: {255, 0, 0}
; ROI npts: 1
; ID     X  Y      Map X       Map Y        Lat          Lon      B1      B2      B3      B4      B5
   1  1058  1  695793.75  4337904.25  39.168340  -108.733627  0.0118  0.1373  0.1804  0.2157  0.2275

图片

     将ROI数据转化为分类数据,得到的结果是一个单波段影像(影像大小跟原始影像相同),同一个类别的值相同(同一类别的像元值本身是可编辑的),未定义区域的像元值为0。  这种通常为编程中标签数据的通用形式
%% 将图像的DN值与标签对应连接起来。
trainl=[0 1 2;3 1 0];                %标签数据。
trainl=reshape(trainl,6,1);
trainlog=~(~trainl);
trainlable=trainl(trainlog,:);
[trainlable,ind1]=sort(trainlable);
testcon=[1 1 1 2;3 3 2 3;2 5 5 5;4 6 4 8;5 3 2 8; 6 4 1 1];           % 原始波段数据。
traincon=testcon(trainlog,:);
traincon=traincon(ind1,:);
data=[traincon trainlable];

图片

原始影像与标签数据之间存在一一对应的关系: (应用该原则的前提是标签和原始数据来自相同的方式)
    i=1;                    % i为标签值。 
    ci = length(find(indian_pines_gt==i));      
    [v]=find(indian_pines_gt==i);
     datai = data_col(find(indian_pines_gt==i),:);     

4.2    mod(a,b)就是求的是a除以b的余数。
4.3   diag (v)   将向量转化为对角矩阵。
          V=[1 2 3 4 5];
          diag(V);


5. 1    [A, R] = geotiffread(filename)  % 读取带地理坐标的TIFF数据。 reads a georeferenced multispectral image or data grid from the GeoTIFF file specified by  filename  into  A  and constructs a spatial referencing object,  R .
A为三维矩阵,[m,n,p] m为行数(886),n为列数(1059),p为波段数。
R为类似结构体的复杂数据类型。


5.2  问题:遥感影像中有1,2,3,4,5 五种标签,如果将3,4 两种标签合并成一种标签 (通过ROI合并功能来实现,将树木跟草合并成植被),是否影响机器学习结果?
结果表明 1种标签中包含二种地物的情况同样不影响信息的提取。

图片

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值