You can subscribe to this list here.
2001 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}

_{Jun}

_{Jul}
(10) 
_{Aug}
(5) 
_{Sep}
(3) 
_{Oct}
(41) 
_{Nov}
(41) 
_{Dec}
(33) 

2002 
_{Jan}
(75) 
_{Feb}
(10) 
_{Mar}
(170) 
_{Apr}
(174) 
_{May}
(66) 
_{Jun}
(11) 
_{Jul}
(10) 
_{Aug}
(44) 
_{Sep}
(73) 
_{Oct}
(28) 
_{Nov}
(139) 
_{Dec}
(52) 
2003 
_{Jan}
(35) 
_{Feb}
(93) 
_{Mar}
(62) 
_{Apr}
(10) 
_{May}
(55) 
_{Jun}
(70) 
_{Jul}
(37) 
_{Aug}
(16) 
_{Sep}
(56) 
_{Oct}
(31) 
_{Nov}
(57) 
_{Dec}
(83) 
2004 
_{Jan}
(85) 
_{Feb}
(67) 
_{Mar}
(27) 
_{Apr}
(37) 
_{May}
(75) 
_{Jun}
(85) 
_{Jul}
(160) 
_{Aug}
(68) 
_{Sep}
(104) 
_{Oct}
(25) 
_{Nov}
(39) 
_{Dec}
(23) 
2005 
_{Jan}
(10) 
_{Feb}
(45) 
_{Mar}
(43) 
_{Apr}
(19) 
_{May}
(108) 
_{Jun}
(31) 
_{Jul}
(41) 
_{Aug}
(23) 
_{Sep}
(65) 
_{Oct}
(58) 
_{Nov}
(44) 
_{Dec}
(54) 
2006 
_{Jan}
(96) 
_{Feb}
(27) 
_{Mar}
(69) 
_{Apr}
(59) 
_{May}
(67) 
_{Jun}
(35) 
_{Jul}
(13) 
_{Aug}
(461) 
_{Sep}
(160) 
_{Oct}
(399) 
_{Nov}
(32) 
_{Dec}
(72) 
2007 
_{Jan}
(316) 
_{Feb}
(305) 
_{Mar}
(318) 
_{Apr}
(54) 
_{May}
(194) 
_{Jun}
(173) 
_{Jul}
(282) 
_{Aug}
(91) 
_{Sep}
(227) 
_{Oct}
(365) 
_{Nov}
(168) 
_{Dec}
(18) 
2008 
_{Jan}
(71) 
_{Feb}
(111) 
_{Mar}
(155) 
_{Apr}
(173) 
_{May}
(70) 
_{Jun}
(67) 
_{Jul}
(55) 
_{Aug}
(83) 
_{Sep}
(32) 
_{Oct}
(68) 
_{Nov}
(80) 
_{Dec}
(29) 
2009 
_{Jan}
(46) 
_{Feb}
(18) 
_{Mar}
(95) 
_{Apr}
(76) 
_{May}
(140) 
_{Jun}
(98) 
_{Jul}
(84) 
_{Aug}
(123) 
_{Sep}
(94) 
_{Oct}
(131) 
_{Nov}
(142) 
_{Dec}
(125) 
2010 
_{Jan}
(128) 
_{Feb}
(158) 
_{Mar}
(172) 
_{Apr}
(134) 
_{May}
(94) 
_{Jun}
(84) 
_{Jul}
(32) 
_{Aug}
(127) 
_{Sep}
(167) 
_{Oct}
(109) 
_{Nov}
(69) 
_{Dec}
(78) 
2011 
_{Jan}
(39) 
_{Feb}
(58) 
_{Mar}
(52) 
_{Apr}
(47) 
_{May}
(56) 
_{Jun}
(76) 
_{Jul}
(55) 
_{Aug}
(54) 
_{Sep}
(165) 
_{Oct}
(255) 
_{Nov}
(328) 
_{Dec}
(263) 
2012 
_{Jan}
(82) 
_{Feb}
(147) 
_{Mar}
(400) 
_{Apr}
(216) 
_{May}
(209) 
_{Jun}
(160) 
_{Jul}
(86) 
_{Aug}
(141) 
_{Sep}
(156) 
_{Oct}
(6) 
_{Nov}

_{Dec}

2015 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}

_{Jun}

_{Jul}
(1) 
_{Aug}

_{Sep}
(1) 
_{Oct}

_{Nov}
(1) 
_{Dec}
(2) 
2016 
_{Jan}

_{Feb}
(2) 
_{Mar}
(2) 
_{Apr}
(1) 
_{May}
(1) 
_{Jun}
(2) 
_{Jul}
(1) 
_{Aug}
(1) 
_{Sep}

_{Oct}

_{Nov}
(1) 
_{Dec}

S  M  T  W  T  F  S 







1
(2) 
2

3
(1) 
4
(7) 
5
(1) 
6

7
(5) 
8

9
(8) 
10
(8) 
11
(1) 
12
(2) 
13
(4) 
14
(6) 
15

16
(1) 
17
(2) 
18
(3) 
19
(3) 
20
(2) 
21
(3) 
22
(5) 
23
(1) 
24
(3) 
25
(2) 
26
(1) 
27
(1) 
28

29
(2) 
30
(6) 






From: <fpoto@us...>  20081119 21:55:50

Revision: 5447 http://octave.svn.sourceforge.net/octave/?rev=5447&view=rev Author: fpoto Date: 20081119 21:31:26 +0000 (Wed, 19 Nov 2008) Log Message:  Implement the Ward's method. Now the linkage.m is Matlab compatible, at least as far as the methods are concerned. Modified Paths:  trunk/octaveforge/main/statistics/inst/linkage.m Modified: trunk/octaveforge/main/statistics/inst/linkage.m ===================================================================  trunk/octaveforge/main/statistics/inst/linkage.m 20081119 19:14:14 UTC (rev 5446) +++ trunk/octaveforge/main/statistics/inst/linkage.m 20081119 21:31:26 UTC (rev 5447) @@ 15,13 +15,13 @@ ## <http://www.gnu.org/licenses/>;. ## * texinfo * ## @deftypefn {Function File} {@var{y} =} linkage (@var{x}) ## @deftypefnx {Function File} {@var{y} =} linkage (@var{x}, @var{method}) +## @deftypefn {Function File} {@var{y} =} linkage (@var{d}) +## @deftypefnx {Function File} {@var{y} =} linkage (@var{d}, @var{method}) ## ## Produce a hierarchical clustering dendrogram from a distance vector ## created by the @code{pdist} function. ## ## @var{x} is the dissimilarity matrix relative to @var{n} observations, +## @var{d} is the dissimilarity matrix relative to @var{n} observations, ## formatted as a @math{(n1)*n/2}x1 vector as produced by @code{pdist}. ## @code{linkage} starts by putting each observation into a singleton ## cluster and numbering those from 1 to @var{n}. Then it merges two @@ 32,7 +32,8 @@ ## two columns are the numbers of the two component clusters and column ## 3 contains their distance. ## ## Methods define the way the distance between two clusters is computed: +## @var{method} defines the way the distance between two clusters is +## computed and how they are recomputed when two clusters are merged: ## ## @table @samp ## @item "single" (default) @@ 44,17 +45,17 @@ ## Furthest distance between two elements belonging each to one cluster. ## ## @item "average" ## Unweighted pair group method with averaging (UPGMA) +## Unweighted pair group method with averaging (UPGMA). ## The mean distance between all pair of elements each belonging to one ## cluster. ## ## @item "weighted" ## Weighted pair group method with averaging (WPGMA) +## Weighted pair group method with averaging (WPGMA). ## When two clusters A and B are joined together, the new distance to a ## cluster C is the mean between distances AC and BC. ## ## @item "centroid" ## Unweighted PairGroup Method using Centroids (UPGMC) +## Unweighted PairGroup Method using Centroids (UPGMC). ## Assumes Euclidean metric. The distance between cluster centroids, ## each centroid being the center of mass of a cluster. ## @@ 65,17 +66,23 @@ ## between the joined centroids. ## ## @item "ward" ## Inner squared distance (minimum variance) ## NOT IMPLEMENTED ## +## Ward's sum of squared deviations about the group mean (ESS). +## Also known as minimum variance or inner squared distance. +## Assumes Euclidean metric. How much the moment of inertia of the +## merged cluster exceeds the sum of those of the individual clusters. ## @end table ## ## @seealso{cluster,pdist} +## @strong{Reference} +## Ward, J. H. Hierarchical Grouping to Optimize an Objective Function +## J. Am. Statist. Assoc. 1963, 58, 236244, +## @url{http://iv.slis.indiana.edu/sw/data/ward.pdf}. ## @end deftypefn +## +## @seealso{pdist,squareform} ## Author: Bill Denney <denney@...> +## Author: Francesco Potort\xEC <pot@...> function y = linkage (x, method) +function dgram = linkage (d, method) ## check the input if (nargin < 1)  (nargin > 2) @@ 84,70 +91,67 @@ method = "single"; endif  if (isempty (x))  error ("linkage: x cannot be empty");  elseif (~ isvector (x))  error ("linkage: x must be a vector"); + if (isempty (d)) + error ("linkage: d cannot be empty"); + elseif (~ isvector (d)) + error ("linkage: d must be a vector"); endif  methods = { "single", "complete", "average", "weighted", "centroid", "median" };  method = lower (method);  switch (method) + methods = struct ... + ("name", { "single"; "complete"; "average"; "weighted"; + "centroid"; "median"; "ward" }, + "distfunc", {(@(x) min(x)) # single + (@(x) max(x)) # complete + (@(x,i,j,w) sum(dmult(q=w([i,j]),x))/sum(q)) # average + (@(x) mean(x)) # weighted + (@massdist) # centroid + (@(x,i) massdist(x,i)) # median + (@inertialdist) # ward + });  case (methods)  distfunction = ...  {(@(x) min(x)) # single  (@(x) max(x)) # complete  (@(x,q) sum(dmult(q,x)) / sum(q)) # average  (@(x) mean(x)) # weighted  (@(x,q) massdist(x,q)) # centroid  (@(x) massdist(x))}; # median  dist = distfunction {strcmp (method, methods)};  dissim = squareform (x, "tomatrix"); # dissimilarity NxN matrix  n = rows (dissim); # the number of observations  diagidx = sub2ind ([n,n], 1:n, 1:n); # indices of diagonal elements  dissim(diagidx) = Inf; # consider a cluster as far from itself  ## For equaldistance nodes, the order in which clusters are  ## merged is arbitrary, but some methods can produce different  ## clusterings depending on it. Rotating the initial matrix  ## produces an ordering more similar to Matlab's.  dissim = rot90 (dissim, 2);  cname = n:1:1; # cluster names in dissim  weight = ones (1, n); # cluster weights  y = zeros (n1, 3); # clusters from n+1 to 2*n1  for yidx = 1:n1  ## Find the two nearest clusters  [m midx] = min (dissim(:));  [r, c] = ind2sub (size (dissim), midx);  ## Here is the new cluster  y(yidx, :) = [cname(r) cname(c) dissim(r, c)];  ## Put it in place of the first one and remove the second  cname(r) = n + yidx;  cname(c) = [];  ## Compute the new distances  d = dist (dissim([r c], :), weight([r c]));  d(r) = Inf; # take care of the diagonal element  ## Put distances in place of the first ones, remove the second ones  dissim(r,:) = d;  dissim(:,r) = d';  dissim(c,:) = [];  dissim(:,c) = [];  ## The new weight is the sum of the components' weights  weight(r) += weight(c);  weight(c) = [];  endfor  ## Sort the cluster numbers, as Matlab does  y(:,1:2) = sort (y(:,1:2), 2); + mask = strcmp (lower (method), {methods.name}); + if (! any (mask)) + error ("linkage: %s: unknown method", method); + endif + dist = {methods.distfunc}{mask};  case "ward"  error ("linkage: %s is not yet implemented", method); + d = squareform (d, "tomatrix"); # dissimilarity NxN matrix + n = rows (d); # the number of observations + diagidx = sub2ind ([n,n], 1:n, 1:n); # indices of diagonal elements + d(diagidx) = Inf; # consider a cluster as far from itself + ## For equaldistance nodes, the order in which clusters are + ## merged is arbitrary. Rotating the initial matrix produces an + ## ordering similar to Matlab's. + cname = n:1:1; # cluster names in d + d = rot90 (d, 2); # exchange low and high cluster numbers + weight = ones (1, n); # cluster weights + dgram = zeros (n1, 3); # clusters from n+1 to 2*n1 + for cluster = n+1:2*n1 + ## Find the two nearest clusters + [m midx] = min (d(:)); + [r, c] = ind2sub (size (d), midx); + ## Here is the new cluster + dgram(clustern, :) = [cname(r) cname(c) d(r, c)]; + ## Put it in place of the first one and remove the second + cname(r) = cluster; + cname(c) = []; + ## Compute the new distances + newd = dist (d([r c], :), r, c, weight); + newd(r) = Inf; # take care of the diagonal element + ## Put distances in place of the first ones, remove the second ones + d(r,:) = newd; + d(:,r) = newd'; + d(c,:) = []; + d(:,c) = []; + ## The new weight is the sum of the components' weights + weight(r) += weight(c); + weight(c) = []; + endfor + ## Sort the cluster numbers, as Matlab does + dgram(:,1:2) = sort (dgram(:,1:2), 2);  otherwise  error ("linkage: %s: unknown method", method);  endswitch  ## Check that distances are monotonically increasing  if (any (diff (y(:,3)) < 0)) + if (any (diff (dgram(:,3)) < 0)) warning ("clustering", "linkage: cluster distances do not monotonically increase\n\ you should probably use a method different from \"%s\"", method); @@ 156,33 +160,57 @@ endfunction ## Take two row vectors, which are the Euclidean distances of clusters I ## and J from the others. Column J of second row contains Inf, column J ## of first row contains the distance between clusters I and J. The ## centroid of the new cluster is on the segment joining the old ones. W ## are the weights of clusters I and J. Use the law of cosines to find ## the distances of the new cluster from all the others. function y = massdist (x, w = [1 1])  c = x(1, x(2,:) == Inf); # distance between component clusters  w /= sum (w); # ratio of distance position  q2 = w(2);  y = sqrt (w(1)*x(1,:).^2 + q2*(x(2,:).^2 + (q21)*c^2)); +## and J from the others. Column I of second row contains the distance +## between clusters I and J. The centre of gravity of the new cluster +## is on the segment joining the old ones. W are the weights of all +## clusters. Use the law of cosines to find the distances of the new +## cluster from all the others. +function y = massdist (x, i, j, w) + c = x(2, i); # distance between I and J + if (nargin < 4) # median distance + qi = qj = 0.5; # equal weights ("weighted") + else # centroid distance + qi = w(i); qj = w(j); # the cluster weights + norm = qi + qj; # normalisation factor + qi /= norm; qj /= norm; # normalise them ("unweighted") + endif + y = sqrt (qi*x(1,:).^2 + qj*(x(2,:).^2  (1qj)*c^2)); endfunction +## Take two row vectors, which are the inertial distances of clusters I +## and J from the others. Column I of second row contains the inertial +## distance between clusters I and J. The centre of gravity of the new +## cluster K is on the segment joining I and J. W are the weights of +## all clusters. Use the law of cosines to find the distance of K from +## all the other clusters, then compute the intertial distance of K from +## all the other clusters and return it. +function y = inertialdist (x, i, j, w) + wi = w(i); wj = w(j); # the cluster weights + sij = wi + wj; # sum of weights of I and J + c2 = x(2,i)^2 * sij / wi / wj; # squared Eucl. dist. between I and J + s = [wi + w; wj + w]; # sum of weights for all cluster pairs + p = [wi * w; wj * w]; # product of weights for all cluster pairs + ed2 = x.^2 .* s ./ p; # convert inertial dist. to squared Eucl. + qi = wi/sij; qj = wj/sij; # normalise the weights of I and J + ## Squared Euclidean distances between all clusters and new cluster K + ed2 = qi*ed2(1,:) + qj*(ed2(2,:)  (1qj)*c2); + y = sqrt (ed2 * sij .* w ./ (sij + w)); # convert Eucl. dist. to inertial +endfunction %!shared x, y, t %! x = [3 1.7; 1 1; 2 3; 2 2.5; 1.2 1; 1.1 1.5; 3 1]; %! y = reshape(mod(magic(6),5),[],3); + +%!shared x, t +%! x = reshape(mod(magic(6),5),[],3); %! t = 1e6; %! disp ("linkage: should emit 4 warnings\n\t about the \"centroid\" and \"median\" methods"); %!assert (cond (linkage (pdist (x))), 55.787151, t); %!assert (cond (linkage (pdist (y))), 34.119045, t); %!assert (cond (linkage (pdist (x), "complete")), 27.506710, t); %!assert (cond (linkage (pdist (y), "complete")), 21.793345, t); %!assert (cond (linkage (pdist (x), "average")), 35.766804, t); %!assert (cond (linkage (pdist (y), "average")), 27.045012, t); %!assert (cond (linkage (pdist (x), "weighted")), 36.257913, t); %!assert (cond (linkage (pdist (y), "weighted")), 27.412889, t); %!assert (cond (linkage (pdist (x), "centroid")), 39.104461, t); %!assert (cond (linkage (pdist (y), "centroid")), 27.457477, t); %!assert (cond (linkage (pdist (x), "median")), 39.671458, t); %!assert (cond (linkage (pdist (y), "median")), 27.683325, t); +%!assert (cond (linkage (pdist (x))), 34.119045, t); +%!assert (cond (linkage (pdist (x), "complete")), 21.793345, t); +%!assert (cond (linkage (pdist (x), "average")), 27.045012, t); +%!assert (cond (linkage (pdist (x), "weighted")), 27.412889, t); +%!test warning off clustering +%! assert (cond (linkage (pdist (x), "centroid")),27.457477, t); +%! warning on clustering +%!warning <monotonically> linkage (pdist (x), "centroid"); +%!test warning off clustering +%! assert (cond (linkage (pdist (x), "median")), 27.683325, t); +%! warning on clustering +%!warning <monotonically> linkage (pdist (x), "median"); +%!assert (cond (linkage (pdist (x), "ward")), 17.195198, t); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. 
From: <michaelschmid@us...>  20081119 19:14:19

Revision: 5446 http://octave.svn.sourceforge.net/octave/?rev=5446&view=rev Author: michaelschmid Date: 20081119 19:14:14 +0000 (Wed, 19 Nov 2008) Log Message:  spelling correction modified inst/__calcperf.m Modified Paths:  trunk/octaveforge/main/nnet/inst/__calcperf.m Modified: trunk/octaveforge/main/nnet/inst/__calcperf.m ===================================================================  trunk/octaveforge/main/nnet/inst/__calcperf.m 20081119 18:42:50 UTC (rev 5445) +++ trunk/octaveforge/main/nnet/inst/__calcperf.m 20081119 19:14:14 UTC (rev 5446) @@ 12,7 +12,7 @@ ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; see the file COPYING. If not, see +## along with this program; see the file COPYING. If not, see ## <http://www.gnu.org/licenses/>;. ## * texinfo * @@ 55,7 +55,7 @@ ## this can be done with matrix calculation... ## called "dotprod" ## to do this, there must be a special matrix ...  ## e.g. IW = [1 2 3 4 5; 6 7 8 910] * [ 1 2 3; 4 5 6; 7 8 9; 10 11 12; 1 2 3]; + ## e.g. IW = [1 2 3 4 5; 6 7 8 9 10] * [ 1 2 3; 4 5 6; 7 8 9; 10 11 12; 1 2 3]; if (iLayers==1) IWtemp{iLayers,1} = IW{iLayers,1} * Im; onlyTempVar = [IWtemp(iLayers,1) Btemp(iLayers)]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. 
From: <fpoto@us...>  20081119 18:42:54

Revision: 5445 http://octave.svn.sourceforge.net/octave/?rev=5445&view=rev Author: fpoto Date: 20081119 18:42:50 +0000 (Wed, 19 Nov 2008) Log Message:  Now works for 1D vectors, too. Modified Paths:  trunk/octaveforge/main/statistics/inst/pdist.m Modified: trunk/octaveforge/main/statistics/inst/pdist.m ===================================================================  trunk/octaveforge/main/statistics/inst/pdist.m 20081118 22:43:46 UTC (rev 5444) +++ trunk/octaveforge/main/statistics/inst/pdist.m 20081119 18:42:50 UTC (rev 5445) @@ 124,25 +124,25 @@ if (str2num(version()(1:3)) > 3.1) y = norm (diff, "cols"); else  y = sqrt (sumsq (diff)); + y = sqrt (sumsq (diff, 1)); endif case "seuclidean" diff = X(:,Xi)  X(:,Yi);  weights = inv (diag (var (x)));  y = sqrt (sum ((weights * diff) .* diff)); + weights = inv (diag (var (x, 1))); + y = sqrt (sum ((weights * diff) .* diff, 1)); case "mahalanobis" diff = X(:,Xi)  X(:,Yi); weights = inv (cov (x));  y = sqrt (sum ((weights * diff) .* diff)); + y = sqrt (sum ((weights * diff) .* diff, 1)); case "cityblock" diff = X(:,Xi)  X(:,Yi); if (str2num(version()(1:3)) > 3.1) y = norm (diff, 1, "cols"); else  y = sum (abs (diff)); + y = sum (abs (diff), 1); endif case "minkowski" @@ 154,37 +154,39 @@ if (str2num(version()(1:3)) > 3.1) y = norm (diff, p, "cols"); else  y = (sum ((abs (diff)).^p)).^(1/p); + y = (sum ((abs (diff)).^p, 1)).^(1/p); endif case "cosine" prod = X(:,Xi) .* X(:,Yi);  weights = sumsq (X(:,Xi)) .* sumsq (X(:,Yi)); + weights = sumsq (X(:,Xi), 1) .* sumsq (X(:,Yi), 1); y = 1  sum (prod) ./ sqrt (weights); case "correlation" + error ("pdist: cannot compute correlation distance between 1D vectors") corr = cor (X); y = 1  corr (sub2ind (size (corr), Xi, Yi))'; case "spearman" + error ("pdist: cannot compute spearman distance between 1D vectors") corr = spearman (X); y = 1  corr (sub2ind (size (corr), Xi, Yi))'; case "hamming" diff = logical (X(:,Xi)  X(:,Yi));  y = sum (diff) / rows (X); + y = sum (diff, 1) / rows (X); case "jaccard" diff = logical (X(:,Xi)  X(:,Yi)); weights = X(:,Xi)  X(:,Yi);  y = sum (diff & weights) ./ sum (weights); + y = sum (diff & weights, 1) ./ sum (weights, 1); case "chebychev" diff = X(:,Xi)  X(:,Yi); if (str2num(version()(1:3)) > 3.1) y = norm (diff, Inf, "cols"); else  y = max (abs (diff)); + y = max (abs (diff), 1); endif endswitch This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. 