欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Matlab对泰坦尼克号数据预处理

程序员文章站 2022-05-02 15:13:49
...

介绍

最近有人托我写类似于泰坦尼克号生存预测的程序,不过人家还没想好用什么方法,所以在此我又把以前用python写过的泰坦尼克号翻出来用matlab写一遍。
泰坦尼克号数据的下载与介绍就不多说了,我以前的博文都写过。

实验步骤

读取数据

[num,txt,raw]=xlsread('titanic3.xls');%读取数据,num返回的是excel中的数据,txt输出的是文本内容,row输出的是未处理数据
%挑出需要的数据
need=[2,1,4,5,6,7,9,11];
raw=raw(2:end-1,need);%'survived','pclass','sex','age','sibsp','parch','fare','embarked'

因为数据里既有数字也有文字,所以取元胞raw来进行数据处理。

无缺失的属性

对于无缺失值、并且取值为数字的属性,可以通过cell2mat直接转为矩阵。

date_mat(:,2)=cell2mat(raw(:,2));%无缺失值直接转

而对于无缺失、取值为文字的属性,则需要将文字转换为数字。
这里w_string是该属性所有的文字枚举元胞,data中与w_string里第1个文字段相同的将被转为1。

function [data_list]=wz2num(data,w_string)% 文字->数字
%输入为元胞,输出为数组
    data_list=zeros(size(data))*nan;
    %cc=tabulate(data);
    for j=1:length(w_string)
        bb=strcmp(data,w_string(j));
        data_list(find(bb==1))=j;
    end
end

缺失属性

对于有缺失的数据,需要想方设法填充,数据缺失的话应该是无法训练的。或许有高手不需要填充缺失数据,小弟不才,对这方面了解不多。所以我要把缺失数据填充完整,并且方法简单粗暴。

function [data_list]=fillmis(data,method,n,k,w_string)%缺失值填充
%data:数据元胞,method:方法,n:数字or文字,k:方法的范围/,w_string:文字列表
    if(n)%如果是数字
        data_list=cell2mat(data);
        data_list=fillmissing(data_list,method,k);
        while(sum(isnan(data_list)))
            data_list=fillmissing(data_list,method,k);
        end
    else
        %data_list=zeros(size(data))*nan;
        [data_list]=wz2num(data,w_string);
        data_list=fillmissing(data_list,method,k);%'movmedian'
        while(sum(isnan(data_list)))
            data_list=fillmissing(data_list,method,k);
        end
        %tabulate(data_list)
    end
end

fillmissing是matlab自带的填充函数,它有以下几个方法可以选择
Matlab对泰坦尼克号数据预处理
Matlab对泰坦尼克号数据预处理
这里加while是为了防止有些缺失地方没有被填充。

归一化

[date_x,PS] = mapminmax(date_mat',0,1);

需要注意的是mapminmax认为同一行是一个属性,对行进行归一化。

归一化图

xx=1:size(date_x,2);yy=1:size(date_x,1);
image(xx,yy,date_x,'CDataMapping','scaled');colormap('jet');
colorbar
title('归一化颜色图');

Matlab对泰坦尼克号数据预处理

程序代码

相关标签: Matlab