我是照着书上的例子练习的,结果发生了数据传递不过来的情况,具体函数代码如下:
%getdata函数,这个函数的意思就是想把excel中的数据读出来,但最终的结果却没有成功传递,label更是为0
function [ data,label ] = getdata( xlsfile )
[~,label]=xlsread(xlsfile,1,'B2:B261');
[height,~]=xlsread(xlsfile,'C2:C261');
[weight,~]=xlsread(xlsfile,'D2:D261');
data=[height,weight];
l=zeros(size(label));
for i=1:length(l)
if label{i}=='男'
l(i)=1;
end
end
label=l;
%divide函数
function [ traind,trainl,testd,testl ] = divide( data,label )
%UNTITLED2 此处显示有关此函数的摘要
% 此处显示详细说明
%随机数
rng(0)
%男女各取30个进行训练
TRAIN_NUM_M=30; %TRAIN_NUM_M:男生取出的训练人数
TRAIN_NUM_F=30; %TRAIN_NUM_M:女生取出的训练人数
%男女分开
m_data=data(label==1,:); %将男生数据提取出来
f_data=data(label==0,:); %将女生数据提取出来
NUM_M=length(m_data); %男生的个数
%男
r=randperm(NUM_M); %生成NUM_M个随机数,大小为1-NUM_M,即将1-NUM_M进行随机排列
traind(1:TRAIN_NUM_M,:)=m_data(r(1:TRAIN_NUM_M),:); %将男生数据中1-TRAIN_NUM_M行的数据传递给traind,即男生训练数据保存在traind中
testd(1:NUM_M-TRAIN_NUM_M,:)=m_data(r(TRAIN_NUM_M+1:NUM_M),:); %将男生数据中TRAIN_NUM_M+1-TNUM_M的数据传递给testd,即男生测试数据保存在testd中
NUM_F=(f_data); %女生的个数
%女
r=randperm(NUM_F); %生成NUM_F个随机数,大小为1-NUM_F,即将1-NUM_F进行随机排列
traind(TRAIN_NUM_M+1:TRAIN_NUM_M+TRAIN_NUM_F,:)=f_data(r(1:TRAIN_NUM_F),:); %将女生数据中1-TRAIN_NUM_F的数据传递给traind,即女生训练数据保存在traind中
testd(NUM_M-TRAIN_NUM_M+1:NUM_M-TRAIN_NUM_M+NUM_F-TRAIN_NUM_F,:)=f_data(r(TRAIN_NUM_F+1:NUM_F),:); %将女生数据中TRAIN_NUM_M+1-TNUM_M的数据传递给testd,即女生测试数据保存在testd中
%赋值,将训练和测试数据中的男女生进行标签分配,男生为1,女生为0
trainl=zeros(1,TRAIN_NUM_M+TRAIN_NUM_F);
trainl(1:TRAIN_NUM_M)=1;
test1=zeros(1,NUM_M-TRAIN_NUM_M+NUM_F-TRAIN_NUM_F);
test1(1:NUM_M-TRAIN_NUM_M)=1;
end
%主函数
>> xlsfile='student.xls';
>> [data,label] = getdata('student.xls');
>> [ traind,trainl,testd,testl ] = divide( data,label );