Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 OPTICS walk – animated (DataSURG) ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● p is an (r,M)-coreobject iff |D(p, r)|  M (e.g. M=4, r = ) x is.

Similar presentations


Presentation on theme: "1 OPTICS walk – animated (DataSURG) ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● p is an (r,M)-coreobject iff |D(p, r)|  M (e.g. M=4, r = ) x is."— Presentation transcript:

1 1 OPTICS walk – animated (DataSURG) ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● p is an (r,M)-coreobject iff |D(p, r)|  M (e.g. M=4, r = ) x is directly density reachable from a coreobject, p, iff x  D(p,r) (disk of radius r about p) THM: if p i, p i+1 are coreobjects and p i+1 is DDR from p i then p i is DDR from p i+1 x is density reachable from a coreobject, p, iff  p=p 1 …p n =x  : each p i DDR from p i-1 x is density connected to y iff  coreobject, o,  : x and y are each DR from o A cluster is a set of (mutually?) density reachable objects which is maximal wrt density reachability (DB-scan definition). This means the set on the left has two clusters as shown on the right (blue is in both). Is that as you would want clusters defined? Note that density connected is symmetric but not transitive. Did DB-scan people intended that? Maybe so. But then a clustering is not a partition.

2 2 If p is a coreobject, its core-distance is the distance to its M th nearest neighbor (smallest distance with respect to which it is a coreobject) If p is any object, its reachability-distance is the smallest distance, r’, such that p is density-reachable from an r’-coreobject. Note: if RD(x)=r  sequence of coreobjects, p=p 1, p 2, …, p n-1, p n =x  : each p i r-DR from p i-1 and if you decrease a it is no longer true. Then x is r-DR from p n-1 and if you decrease r, x won’t be r-DR from p n-1 Therefore, RD(x)=r iff r is the smallest number such that within D(x,r) there is an r-coreobject. Note that there can be a coreobject, q, even closer than r, so the coreobject that causes the definition of RD(x) may not be the closest (i.e., RD(x) is not necessarily just the distance to the closest coreobject) In fact, as you build out r-rings from x it is the first radius  : a coreobject, q, is encountered with CD(q) ≤ r ● ● ● ● ● ●● ● ● ● ● ●

3 3 Next, I argue that OPTICS does not address the curse of dimensionality very well (said another way, the example on the first slide ought to be one cluster, not two). SIZE(n-sphere)  0 as n  ∞ means all objects are in the middle-range corners of the n- cube, not in the major corners (the “points” on the n-cube) or minor corners (the dimples on the n-cube). The curse of dimensionality says “as you build out n-spheres you get no nbrs, no nbrs, …, no nbrs, too many nbrs!” This is because if you look at the n-cube (say of radius = 1) the number of “points” that have radius=1 in k ≤ n dimensions (k=1 is a minor corner or intercept or dimple and k=n is a major point or main diagonal) is given by the k th coefficient in the binomial formula (b+c) n =C(n,0)b n c 0 + C(n,1)b n-1 c 1 +…+ C(n,k)b n-k c k +…+ C(n,n)b 0 c n Where C(n,k) = n!/(n-k)!k! and as k goes from 0 to n, it is: 1, n, n(n-1)/2, n(n-1)(n-2)/2*3,…, n(n-1), …, (n-k+1)/2*3*…*k,…, 1 For large n the big numbers are in the middle. The point is that the L∞ spheres may not suffer from the curse of dimensionality like the Euclidean ones do. And therefore they may be preferable in OPTICS! (we can calculate them quickly and then a “square OPTICS” would make the group on slide-1 into one cluster!

4 4 Next, I ask some questions (in quest of the “perfect” walk-based clustering method. OPTICS walks the space by stepping to a nearby coreobject, based on some continual reordering of a temporary ordering of local nbrs (can Amal continue his animation to include new rings with multiple new points? I’m still not sure how the OPTICS walk proceeds and whether there is a scalable vertically determined walk which will be better. Elizabeth walked to the closest point? (Elizabeth, I’m sure I don’t have that quite right or complete. Could you fill in the correct details. Hilbert (and Peano) walk is entirely spatial (next step has to do with spatial arrangements only). There must be a better way in the middle between spatial only and OPTICS’ strange walk which involves (it seems) a continual revision of the order_seed file and the order_file.

5 5 The generating-distance  is the largest distance considered for clusters (largest radius for a disk of count at least Mp points to be in a cluster. I.e.,  = largest Mp-core-radius possible). Cluster core-disks radii,  i are  : 0  i  . The core-distance of a core point, p, is the smallest radius,  ’ (   ) about p that encircles at least Mp points. (smallest Mp-core-radius for p). The reachability-distance of p is the smallest distance such that p is density- reachable from a core object, o. Some Definitions This is a corepoint also. Its nbr to the left, then has RD given by length of green arrow! (less that that shown by red arrow).?????

6 6 OPTICS OPTICS(Objects, e, M, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, M) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,M) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) 6 4 Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRchdist = max(d, dist(obj, centerObj)) if obj.RchDist == NULL: obj.RchDist = newRdist insert(obj, newRdist) elif newRdist < obj.RchDist: obj.RchDist = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist Pt2 | 4 Pt3 | 4 Pt4 | 4 6 2 Pt2 | 4 Pt3 | 2 Pt4 | 2 Pt5 | 3

7 7 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e e’ Order File Obj RD Pt1 UnDef OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj RD Pt2 4 Pt3 2 Pt4 2 Pt5 2 Pt3 2 12 3 5 6 7 4 Pt6 3.5 Pt3 2 Pt4 1.2 Pt5 1.3 Obj = 3

8 8 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e e’ Order File Obj RD Pt1 UnDef OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj RD Pt2 4 Pt4 1.2 Pt5 1.3 Pt3 2 12 3 5 6 7 4 Pt6 3.5 Pt4 1.2 Pt6 3.2 Obj = 4

9 9 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e e’ Order File Obj RD Pt1 UnDef OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj RD Pt2 4 Pt5 1.3 Pt6 3.2 Pt3 2 12 3 5 6 7 4 Pt7 3.1 Pt4 1.2 Pt5 1.3 Obj = 5

10 10 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e Order File Obj RD Pt1 UnDef OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj RD Pt2 4 Pt7 3.1 Pt3 2 12 3 5 6 7 4 Pt4 1.2 Pt5 1.3 Obj = 7 Pt6 3.2 Pt7 3.1 Skip the other statements after OrderFile.write(obj) because obj.coreDistance == NULL or UNDEFINED

11 11 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e e’ Order File Obj RD Pt1 UnDef OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj RD Pt2 4 Pt6 3.2 Pt3 2 12 3 5 6 7 4 Pt4 1.2 Pt5 1.3 Obj = 6 Pt6 3.2 Pt7 3.1 Skip these parts because all neighbors of Obj have been processed. Pt6 3.2

12 12 OPTICS walk OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) 12 12 3 3 4 4 5 5 6 6 7 7 RDist Visited Data Points UnDf The reachability- distance of p is the smallest distance such that p is density-reachable from a core object o.

13 13 Acknowledgements [OPTICS] Ankerst, M., Breunig, M., Kreigel, H.-P., and Sander, J. 1999. OPTICS:Ordering points to identify clustering structure. In Proceedings of the ACM SIGMODConference, 49-60, Philadelphia, PA. OPTICS Presentation by Chris Mueller November 4, 2004 http://www.osl.iu.edu/~chemuell/projects/presentations/optics-v1.pdf DataSURG 108 Meeting on 04/26/2005 (Dr. Perrizo, Elizabeth,DongMei,Amal)

14 14 Once one has the OPTICS walk ordering and the derived attribute, RchDist, then what? Build a set of basic P-trees on the derived attribute, RchDist (Log 2 (MaxRchDist) of them). This is a one time process, the cost of which can be amortized over the value lifetime of the (presumably high value) data set. Build out rings around MinRchDist to find clusters (in density order). Each time a ring has a substantial number of objects, the mask gives one the objects at that density level. –The ordering separates that set into “Density Connected” components –(either using the DC equivalence relation or the DC’ equivalence relation.

15 15 DC and DC’ equivalence relation definition and discussion I start with what I see as wrong with the approach as it is put forth in OPTICS (involving walks). I am not dealing with DENCLUE since it is not walk based. I start with an insistence that clustering IS partitioning (into mutually exclusive and collectively exhaustive subsets). Partitions are the mathematical dual of equivalence relations - binary relations that are reflexive ( (x,x) in R for every x ), symmetric ( (x,y) in R then (y,x) in R ) and transitive ( x,y) & (y,z) in R then (x.z) in R ). The duality is: A partition defines an equivalence relation by (x,y) in R iff x & y belong to the same partition component. An equivalence relation defines a partition into its equivalence classes.

16 16 DC and DC’ equivalence relation definition and discussion-2 It appears as though the OPTICS people are trying to define an equivalence relation (and thereby, a partition or clustering). They define 3 binary relations (presumably working toward one that’s reflexive, symmetric, transitive on core-objects plus border-objects). It goes as follows assuming epsilon and M have been chosen. x is a core-object iff |{y: d(x,y) M (x,y) in DDR (Direct Density Reachable) iff x is a core-object and d(x,y) epsilon, thus (x,z) not in DDR) So to get the transitivity, they define Density Reachable, DR, (x,y) in DR iff there exists x=P 1,...,P n =y such that (P i,P i+1 ) in DDR (implies P 1,...,P n-1 must be core-objects) DR not reflexive DR not symmetric: (x,y) in R, y may not be core or border object) so (y,x) may not be in R DR is transitive: x=P 1,...,P n =y (P i,P i+1 ) in DR & y=P i+1,...,P i+m =z (P i+j,P i+j+1 ) in DR, then x=P 1,...,P i+m =z (P k,P k+1 ) in DR)

17 17 DC and DC’ equivalence relation definition and discussion-3 OPTICS get symmetry (& reflexivity on core-objects and border-objects, CB) by defining Density Connected, DC, (x,y) in DC iff there is core-object, o, such that (o, x), (o, y) in DR. DC is reflexive on CB (coreo-bjects plus border objects) DC is symmetric on CB ( use the same o for (x, y) in DC and (y, x) in DC ) DC is NOT TRANSITIVE (see first example on first slide, basically b b x c b c y b c b z In this example, (x, y) in DC and (y, z) in DC but (x, z) not in DC So they would put y in either the x-cluster or the z-cluster depending upon which was processed first? That doesn't seem correct (not sure they realize they lost transitivity when moving to DC). Note the following pathological case on the next slide Or would they put y in both?

18 18 DC and DC’ equivalence relation definition and discussion-4 b b b x c y c z c u This could end up clustered as b b b x c y c z c u or b b b x c y c z c u or several other clusterings. I think it should all be one cluster. So my solution is to redefine DC as DC' (so that it is reflexive, symmetric and transitive on CB) (x,y) in DC' iff thereis x=z 1,...,z n =y such that ((z i,z i+1 ) in DC. Now the trick is to figure out how to actually do DC' clustering vertically and in a scalable fashion.

19 19 The generating-distance  is the largest distance considered for clusters (largest radius for a disk of count at least Mp points to be in a cluster. I.e.,  = largest Mp-core-radius possible). Cluster core-disks radii,  i are  : 0  i  . The core-distance of a core point, p, is the smallest radius,  ’ (   ) about p that encircles at least Mp points. (smallest Mp-core-radius for p). The reachability-distance of p is the smallest distance such that p is density- reachable from a core object, o. Amal’s version Definitions This is a corepoint also. Its nbr to the left, then has RD given by length of green arrow! (less that that shown by red arrow).????? Yes, But this is an example of a moment during the walk where the red is the core object used to find the RDs

20 20 Pt5 | 2.4 Pt4 | 2 Pt3 | 2 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e e’ Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist Pt2 | 3 Pt3 | 3 Pt4 | 3 e e’ Pt2 | 3 Pt5 | 3 1 2 3 4 5 6 7 e e’ Pt3 | 2 2.4 Pt6 | 3.5 1 2 3

21 21 Pt5 | 1.6Pt5 | 2.4 Pt4 | 2 Pt3 | 2 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e e’ Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist Pt2 | 3 1 2 3 4 5 6 7 Pt3 | 2 1.6 Pt6 | 3.5 1 2 3 Pt4 | 2 1 2 3

22 22 Pt5 | 1.6 Pt4 | 2 Pt3 | 2 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e e’ Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist Pt2 | 3 1 2 3 4 5 6 7 Pt3 | 2 2.5 Pt6 | 3.5 1 2 3 Pt4 | 2 Pt5 | 1.6Pt6 | 3.3Pt7 | 3

23 23 Pt5 | 1.6 Pt4 | 2 Pt3 | 2 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): OrdSeeds Obj | RchDist Pt2 | 3 1 2 3 4 5 6 7 Pt3 | 2 1 2 3 Pt4 | 2 Pt5 | 1.6Pt7 | 3 Pt6 | 3.3 Pt7 | 3 NULL

24 24 7 Pt5 | 1.6 Pt4 | 2 Pt3 | 2 OPTICS OPTICS(Objects, e, MinPts, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) e e’ Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: Done ! OrdSeeds Obj | RchDist Pt2 | 3 1 2 3 4 5 6 Pt3 | 2 3.6 Pt7 | 3 1 2 3 Pt4 | 2 Pt5 | 1.6 Pt6 | 3.5 Pt7 | 3 Pt6 | 3.5

25 25 Amal’s L-shaped OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): OrdSeeds Obj | RchDist 1 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● eNULL

26 26 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 e’ Pt3 | 1.25 Pt4 | 1.25 Pt5 | 2 5

27 27 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 e’ Pt3 | 1.25 Pt4 | 1.25 Pt5 | 2 Pt3 | 1.25 Pt5 | 1.25 Pt6 | 2

28 28 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 e’ Pt3 | 1.25 Pt4 | 1.25 Pt5 | 1.25 Pt6 | 2 Pt4 | 1.25 Pt6 | 1.25

29 29 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 e’ Pt3 | 1.25 Pt4 | 1.25 Pt3 | 1.25 Pt5 | 1.25 Pt6 | 1.25 Pt4 | 1.25 Pt7 | 2 Pt5 | 1.25

30 30 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 e’ Pt3 | 1.25 Pt4 | 1.25 Pt3 | 1.25 Pt6 | 1.25 Pt4 | 1.25 Pt7 | 2 Pt6 | 1.25 Pt8 | 1.5 7 8 Pt5 | 1.25 Pt7 | 1.25

31 31 8 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 2.00 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 e’ Pt3 | 1.25 Pt4 | 1.25 Pt3 | 1.25 Pt5 | 1.25 Pt4 | 1.25 Pt7 | 1.25 Pt5 | 1.25 7 Pt6 | 1.25 Pt7 | 1.25 Pt6 | 1.25 Pt8 | 1.5 Pt9 | 2 9

32 32 8 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 Pt3 | 1.25 Pt4 | 1.25 Pt3 | 1.25 Pt5 | 1.25 Pt4 | 1.25 Pt7 | 1.25 Pt5 | 1.25 7 Pt6 | 1.25 Pt7 | 1.25 Pt6 | 1.25 Pt8 | 1.5 Pt9 | 2 9 e’ Pt8 | 1.5 Pt9 | 1.25 Pt10 | 1.25 10 11 Pt11 | 2

33 33 8 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 Pt3 | 1.25 Pt4 | 1.25 Pt3 | 1.25 Pt5 | 1.25 Pt4 | 1.25 Pt7 | 1.25 Pt5 | 1.25 7 Pt6 | 1.25 Pt7 | 1.25 Pt6 | 1.25 Pt8 | 1.5 9 e’ Pt8 | 1.5 Pt9 | 1.25 Pt10 | 1.25 10 11 Pt11 | 2 Pt9 | 1.25 Pt11 | 1.25 Pt12 | 2 12

34 34 Pt11 | 1.25 8 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 Pt3 | 1.25 Pt4 | 1.25 Pt3 | 1.25 Pt5 | 1.25 Pt4 | 1.25 Pt7 | 1.25 Pt5 | 1.25 7 Pt6 | 1.25 Pt7 | 1.25 Pt6 | 1.25 Pt8 | 1.5 9 e’ Pt8 | 1.5 Pt9 | 1.25 Pt10 | 1.25 10 11 Pt9 | 1.25 Pt12 | 2 12 Pt10 | 1.25 Pt12 | 1.25

35 35 Pt12 | 1.25 Pt11 | 1.25 8 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 Pt3 | 1.25 Pt4 | 1.25 Pt3 | 1.25 Pt5 | 1.25 Pt4 | 1.25 Pt7 | 1.25 Pt5 | 1.25 7 Pt6 | 1.25 Pt7 | 1.25 Pt6 | 1.25 Pt8 | 1.5 9 e’ Pt8 | 1.5 Pt9 | 1.25 Pt10 | 1.25 10 11 Pt9 | 1.25 Pt13 | 2 12 Pt10 | 1.25 Pt11 | 1.25

36 36 Pt12 | 1.25 Pt11 | 1.25 8 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): d = centerObj.coreDistance for each unprocessed obj in neighbors: newRdist = max(d, dist(obj, centerObj)) if obj.reachability == NULL: obj.reachability = newRdist insert(obj, newRdist) elif newRdist < obj.reachability: obj.reachability = newRdist decrease(obj, newRdist) OrdSeeds Obj | RchDist 1 2 3 4 5 1.25 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 Pt3 | 1.25 Pt4 | 1.25 Pt3 | 1.25 Pt5 | 1.25 Pt4 | 1.25 Pt7 | 1.25 Pt5 | 1.25 7 Pt6 | 1.25 Pt7 | 1.25 Pt6 | 1.25 Pt8 | 1.5 9 e’ Pt8 | 1.5 Pt9 | 1.25 Pt10 | 1.25 10 11 Pt9 | 1.25 Pt13 | 2 12 Pt10 | 1.25 Pt11 | 1.25 Pt12 | 1.25 Pt13 | 1.25

37 37 Pt13 | 1.25 Pt12 | 1.25 Pt11 | 1.25 8 6 e OPTICS OPTICS(Objects, e=2, MinPts=3, OrderFile): for each unprocessed obj in objects: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e, MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) for obj in orderSeeds: neighbors = Objects.getNeighbors(obj, e) obj.setCoreDistance(neighbors, e,MinPts) OrderFile.write(obj) if obj.coreDistance != NULL: orderSeeds.update(neighbors, obj) Order File Obj | RchDist Pt1 | UnDf OrderSeeds::update(neighbors, centerObj): OrdSeeds Obj | RchDist 1 2 3 4 5 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● Pt2 | 1.25 Pt3 | 1.25 Pt4 | 1.25 Pt3 | 1.25 Pt5 | 1.25 Pt4 | 1.25 Pt7 | 1.25 Pt5 | 1.25 7 Pt6 | 1.25 Pt7 | 1.25 Pt6 | 1.25 Pt8 | 1.5 9 e’ Pt8 | 1.5 Pt9 | 1.25 Pt10 | 1.25 10 11 Pt9 | 1.25 12 Pt10 | 1.25 Pt11 | 1.25 Pt12 | 1.25 NULL Pt13 | 1.25 Done !

38 38 8 6 OPTICS 1 2 3 4 5 1 2 3 ● ● ● ● ● ●● ● ● ● ● ● ● 7 9 10 11 12 Order File Obj | RchDist Pt1 | UnDf Pt2 | 1.25 Pt3 | 1.25 Pt4 | 1.25 Pt5 | 1.25 Pt6 | 1.25 Pt7 | 1.25 Pt8 | 1.5 Pt9 | 1.25 Pt10 | 1.25 Pt11 | 1.25 Pt12 | 1.25 Pt13 | 1.25 At e=1.25, 2 Clusters At e=2, 1 Cluster 1 2 3


Download ppt "1 OPTICS walk – animated (DataSURG) ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● p is an (r,M)-coreobject iff |D(p, r)|  M (e.g. M=4, r = ) x is."

Similar presentations


Ads by Google