输出与输入具有相同的大小/类别,但fittype错误:自定义方程式必须产生与输入相同的大小/形状的输出

时间:2019-05-28 17:49:24

标签: matlab parameters curve-fitting data-fitting model-fitting

我正在尝试使用以前使用过的自定义时差学习功能。我对其进行了少许修改,使其仅按列输出“ V”变量,并采用数字为stim的单列“ 1, 2, 3, 4, or 5”。基于数字

  • 它将创建一个0s矩阵,并且它是length of the number of trials(刺激长度)
  • ,并且将根据每个add 1的{ stim (1, 2, 3, 4, 5)中该试验的编号(我知道这不是 最干净的方法,但这只是在fittype中工作的唯一方法 功能)。

功能显示如下:

function model = TDFit3(x,r,alpha,g)
model = [];
% create 5 columns 0s with 1 denoting if number is present in column
% for that trial
stim = x;
X = [];
for j=1:length(stim)
    if stim(j) == 1
        X(j, :) = [1 0 0 0 0];
    elseif stim(j) == 2
        X(j, :) = [0 1 0 0 0];
    elseif stim(j) == 3
        X(j, :) = [0 0 1 0 0];
    elseif stim(j) == 4
        X(j, :) = [0 0 0 1 0];
    elseif stim(j) == 5
        X(j, :) = [0 0 0 0 1];
    end
end

% initialization
[N,D] = size(X);
w = zeros(D,1);         % weights
X = [X; zeros(1,D)];    % add buffer at end

% run Kalman filter
for n = 1:N

    h = X(n,:) - g*X(n+1,:);    % temporal difference features
    V = X(n,:)*w;               % value estimate
    rhat = h*w;                 % reward prediction
    dt = r(n) - rhat;           % prediction error
    w = w + alpha*dt*h';        % weight update
    model = [model; V];

   end
end

该功能独立于曲线拟合。我已经对其进行了测试,并产生了预期的结果。两个输入和139x1双变量,输出是139x1双变量。它们是相同的类,并且大小相同。

但是,当我尝试曲线拟合以确定最佳的α和g拟合系数时,无论是在GUI应用程序中还是如下所示:

[xData, yData, zData] = prepareSurfaceData( stim, r, outcome );
    ft = fittype( 'TDFit3(x,y,alpha,g)', 'independent', {'x', 'y'}, 'dependent', 'z', 'coefficients', {'alpha','g'} )

每次尝试对数据进行曲线拟合时,都会收到以下错误。

  

使用fittype / testCustomModelEvaluation(第16行)自定义时出错   方程必须产生输出向量,矩阵或数组,即   与输入数据相同的大小和形状。此自定义公式无法   满足要求:

     

TD_Fit(x,y,alpha,g)

     

fittype> iCreateFittype中的错误(第373行)       testCustomModelEvaluation(obj);

     

fittype错误(第330行)                   obj = iCreateFittype(obj,varargin {:});

我不确定为什么会这样,因为我检查了大小和类别,并且它们在曲线拟合或拟合类型之外是相同的。 “ a”变量是下面的输出变量。

Size and Class of each variable

谁知道如果输出与曲线拟合之外的输入变量的类和大小相同,为什么会发生此错误?我已经精疲力竭了,不知道在曲线拟合之外运行时,如果变量都是双精度和相同大小,该如何解决。

我尝试了各种格式化函数输出的方式以确保其正确,我仔细检查了变量的分配,我独立于曲线拟合重新运行了函数,并且输出始终是相同大小和class作为输入变量。我不知道为什么会给我这个错误。

我希望系数适合曲线,但是这种错误阻止了这种情况。

0 个答案:

没有答案