Conversation
| self.id = 1 | ||
| self.size = size | ||
| self.heap: list[tuple[float, int, Optional[PointType]]] = [(-np.inf, 1, None)] | ||
| heapq.heapify(self.heap) |
There was a problem hiding this comment.
А зачем делать heapify для кучи из одного элемента?
|
|
||
| class Heap: | ||
| def __init__(self, size: int): | ||
| self.id = 1 |
There was a problem hiding this comment.
Не совсем понимаю предназначение id
| class Heap: | ||
| def __init__(self, size: int): | ||
| self.id = 1 | ||
| self.size = size |
| raise ValueError("Leaf size must be positive") | ||
|
|
||
| valid_points = self._validate_points(points) | ||
| self.dim: int = valid_points.shape[1] |
There was a problem hiding this comment.
Наверное для удобства стоит в конструкторе объявить через None
|
|
||
|
|
||
| class AbstractScaler(metaclass=ABCMeta): | ||
| def fit(self, data: np._typing.NDArray) -> None: |
There was a problem hiding this comment.
В декоратор @abstractmethod стоило бы обернуть
| raise ValueError("Features and targets must be same lenght") | ||
| self.model = KDTree(features, self.leaf_size, self.metric) | ||
| self.classifier = dict((tuple(pair[0]), pair[1]) for pair in zip(features.tolist(), targets.tolist())) | ||
| self.targets = targets |
There was a problem hiding this comment.
Не понимаю зачем хранить таргеты отдельно, если они уже есть в self.classifier
| if point in self.classifier: | ||
| probability.append( | ||
| ( | ||
| np.unique(self.targets), | ||
| (self.classifier[point] == np.unique(self.targets)).astype(int), | ||
| ) | ||
| ) |
There was a problem hiding this comment.
Слабо понимаю что тут вообще происходит, но кажется это некорректно, как минимум потому что могут быть две одинаковые точки с разными лейблами
| ) | ||
| ) | ||
| else: | ||
| result = self.model.query([point], self.k) |
There was a problem hiding this comment.
У тебя model.query принимает много точек сразу, почему бы их всех туда не передать?
| result = self.model.query([point], self.k) | ||
| target_result = np.array([self.classifier[tuple(neighbors.tolist())] for neighbors in result[0]]) | ||
| counts = np.array([(target_result == val).sum() for val in np.unique(self.targets)]) | ||
| probability.append((self.targets, counts / len(result[0]))) |
There was a problem hiding this comment.
Кажется сохранять в каждом предикте таргеты это оверхед по памяти, у тебя они всё равно используются только в классе
There was a problem hiding this comment.
А еще почему выше np.unique(self.targets), а тут просто self.targets
| def transform(self, data: np._typing.NDArray) -> np._typing.NDArray: | ||
| if self.median is None or self.iqr is None: | ||
| raise ValueError("Scaler unfitted") | ||
| return (data - self.median) / self.iqr |
No description provided.