# how to declarate variables to solve this problem

3 views (last 30 days)
muhammad ismat on 20 Feb 2017
Answered: Walter Roberson on 21 Feb 2017
if i have two function first
function [label,s] = LSC(data,k,opts)
% Set and parse parameters
if (~exist('opts','var'))
opts = [];
end
***%[how to define variables p and r to take values from loop]***
maxIter = 100;
numRep = 10;
mode = 'kmeans';
nSmp=size(data,1);
% Landmark selection
if strcmp(mode,'kmeans')
kmMaxIter = 5;
if isfield(opts,'kmMaxIter')
kmMaxIter = opts.kmMaxIter;
end
kmNumRep = 1;
if isfield(opts,'kmNumRep')
kmNumRep = opts.kmNumRep;
end
[dump,marks]=litekmeans(data,p,'MaxIter',kmMaxIter,'Replicates',kmNumRep);
[label,s] = kmedo(U',k);
end
second function
function Accuracy=yarbb(data,x)
%for i=1:100
rng('default')
n = size(data,1);
data_rand = data(randperm(n),:);
m = ceil(n/10);
k = 1:m:n-m;
test = data_rand(k:k+m-1,:);
train = [data_rand(1:k-1,:); data_rand(k+m:end,:)];
for i=1:100
rng('default')
***for p=3:5
for r=2:5
[p,r]
auc= (ndash + 0.5 * nddash)/(ndash+nddash+nn);
end
Accuracy = mean(auc)
end
end
in second function i used for loop to pass variables "p" and "r" to first function to calculate "s" and return again to second function , but when i used for loop for variables "p" and "r" this caused errors that are [undefined variables "p" and adj(0,0) not found).

Walter Roberson on 21 Feb 2017
function Accuracy = yarbb(data, x)
rng('default')
n = size(data,1);
data_rand = data(randperm(n),:);
m = ceil(n/10);
k = 1:m:n-m;
test = data_rand(k:k+m-1, :);
train = [data_rand(1:k-1, :); data_rand(k+m:end, :)];
p_vals = 3:5;
r_vals = 2:5;
for i = 1:100
rng('default')
for pidx = 1 : length(p_vals)
p = pvals(pidx);
for ridx = 1 : length(r_vals)
r = r_vals(ridx);
[p,r]
[cluster_labels, s] = LSC(adj, x, p, r);
auc(ridx) = (ndash + 0.5 * nddash) / (ndash + nddash + nn);
end
Accuracy(pidx) = mean(auc)
end
end
function [label,s] = LSC(data, k, p, r, opts)
% Set and parse parameters
if (~exist('opts','var'))
opts = [];
end
maxIter = 100;
numRep = 10;
mode = 'kmeans';
nSmp = size(data,1);
% Landmark selection
if strcmp(mode,'kmeans')
kmMaxIter = 5;
if isfield(opts,'kmMaxIter')
kmMaxIter = opts.kmMaxIter;
end
kmNumRep = 1;
if isfield(opts,'kmNumRep')
kmNumRep = opts.kmNumRep;
end
[dump, marks] = litekmeans(data, p, 'MaxIter', kmMaxIter, 'Replicates', kmNumRep);
[label, s] = kmedo(U',k);
end
It is not clear why you want to pass r to LSC, as LSC does not use it, but I put it in because you asked for it.
We must presume in the line
auc(ridx) = (ndash + 0.5 * nddash) / (ndash + nddash + nn);
that ndash and nddash and nn are all functions that take no parameters, as none of those are parameters to the functions and none of them are initialized in the functions.
It is not clear why you bother running LSC, as the Accuracy you calculate does not depend upon anything output from LSC.