4
4
https://github.com/Waikato/moa/blob/master/moa/src/main/java/moa/clusterers/denstream/WithDBSCAN.java
5
5
"""
6
6
import logging
7
- from typing import Iterable , Any
7
+ from typing import Dict , List , Iterable , Any
8
+
9
+ from py4j .java_gateway import JavaGateway
8
10
9
11
from utils import setup_logger , setup_java_gateway
10
12
@@ -64,10 +66,11 @@ def __init__(self,
64
66
self ._lambda_ = lambda_
65
67
self ._processing_speed = processing_speed
66
68
67
- self ._gateway = setup_java_gateway (imports = _IMPORTS )
69
+ self ._gateway : JavaGateway = setup_java_gateway (imports = _IMPORTS )
68
70
69
- self ._header = self ._generate_header ()
70
- self ._clusterer = self ._initialize_clusterer ()
71
+ self ._header : Any = self ._generate_header ()
72
+ self ._clusterer : Any = self ._initialize_clusterer ()
73
+ self ._instances : List [Any ] = []
71
74
72
75
@property
73
76
def window_range (self ) -> float :
@@ -155,6 +158,17 @@ def _initialize_clusterer(self) -> Any:
155
158
156
159
return clusterer
157
160
161
+ def _create_instance (self , vector ) -> Any :
162
+ """Create instance."""
163
+ instance = self ._gateway .jvm .DenseInstance (self ._dimensions )
164
+
165
+ for index , number in enumerate (vector ):
166
+ instance .setValue (index , number )
167
+
168
+ instance .setDataset (self ._header )
169
+
170
+ return instance
171
+
158
172
def transform (self ) -> None :
159
173
"""Transform."""
160
174
raise NotImplementedError
@@ -166,14 +180,10 @@ def partial_fit(self, batch: Iterable[Iterable[float]]) -> None:
166
180
:param batch: An iterable of vectors.
167
181
"""
168
182
for vector in batch :
169
- instance = self ._gateway .jvm .DenseInstance (self ._dimensions )
170
-
171
- for index , number in enumerate (vector ):
172
- instance .setValue (index , number )
173
-
174
- instance .setDataset (self ._header )
183
+ instance = self ._create_instance (vector )
175
184
176
185
self ._clusterer .trainOnInstanceImpl (instance )
186
+ self ._instances .append (instance )
177
187
178
188
def fit (self , batch : Iterable [Iterable [float ]]) -> None :
179
189
"""
@@ -182,3 +192,13 @@ def fit(self, batch: Iterable[Iterable[float]]) -> None:
182
192
:param batch: An iterable of vectors.
183
193
"""
184
194
self .partial_fit (batch )
195
+
196
+ def get_clustering_result (self ) -> Dict [int , int ]:
197
+ """
198
+ Get clustering result.
199
+
200
+ Result is in the form {
201
+ 'point_index': cluster_index
202
+ }
203
+ """
204
+ return self ._clusterer .getClusteringResult ().classValues (self ._instances )
0 commit comments