我正在尝试使用以前使用过的自定义时差学习功能。我对其进行了少许修改,使其仅按列输出“ 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作为输入变量。我不知道为什么会给我这个错误。
我希望系数适合曲线,但是这种错误阻止了这种情况。