代码之家  ›  专栏  ›  技术社区  ›  Notna

基于Matlab平台的K-折叠交叉验证

  •  0
  • Notna  · 技术社区  · 6 年前

    我有一个包含学生信息的Matlab表(数字和分类)。此处提供了一个示例:

    School = {'GB'; 'UR'; 'GB'; 'GB'; 'UR'};
    School = categorical(School);
    Age = [14;14;12;16;19];
    Relationship = {'yes'; 'yes'; 'no'; 'no'; 'yes'};
    Relationship = categorical(Relationship);
    Status = {'ft'; 'pt'; 'ft'; 'ft'; 'ft'};
    Status = categorical(Status);
    Father_Job = {'pol'; 'ser'; 'oth'; 'ele'; 'cle'};
    Father_Job = categorical(Father_Job);
    Health = [1;2;3;3;5];
    Exam = {'pass'; 'pass'; 'fail'; 'fail'; 'pass'};
    Exam = categorical(Exam);
    
    T =
    School    Age    Relationship    Status    Father_Job    Health    Exam
    ______    ___    ____________    ______    __________    ______    ____
    
      GB      14         yes           ft         pol          1       pass
      UR      14         yes           pt         ser          2       pass
      GB      12         no            ft         oth          3       fail
      GB      16         no            ft         ele          3       fail
      UR      19         yes           ft         cle          5       pass
    

    我想用这些数据来预测和分类考试的及格/不及格。我打算用 fitglm 进行逻辑回归,以及 fitcnb 做一个朴素的贝叶斯分类器。我知道这两种方法在Matlab中都能很好地处理分类变量,所以使用我的表和它的分类变量应该没有问题。

    但是,当我想使用 cvpartition crossvalind 进行10倍交叉验证。当我尝试创建折叠索引时,会出现以下错误: 不支持使用StSLab.Intual.GrpIdx使用线性索引(一个下标)或多维索引(三个或更多下标)订阅表的错误。使用行下标和变量下标 .

    我的目标是执行以下操作:

    % Column 7 (Exam) is the response variable
    X = T(:, 1:6);
    Y = T(:, 7);
    
    % Create indices of 5-fold cross-validation (here I get errors)
    cvpart = cvpartition(Y,'KFold',5);
    indices = crossvalind('Kfold',Y,5);
    
    % Create my test and training sets
    for i = 1:5
     test = (indices == i); 
     train = ~test;
     Xtrain = X(train,:);
     Xtest = X(test,:);
     Ytrain = Y(train,:);
     Ytest = Y(test,:);
    end
    
    % Fit logistic model
    mdl = fitglm(Xtrain,Ytrain,'Distribution','binomial')
    

    有人能接受这个吗?我知道我可以把分类变量改成数值变量,但我不愿意。这附近有吗?谢谢您。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Raha    6 年前

    我认为你的主要问题是你的数据集太小了。n=5,这甚至不足以创建未验证的模型。