1
2
3
4
5
6 """ Define the class _KNNRegressionModel_, used to represent a k-nearest neighbhors
7 regression model
8
9 Inherits from _KNNModel_
10 """
11
12 from rdkit.ML.KNN import KNNModel
13
14
16 """ This is used to represent a k-nearest neighbor classifier
17
18 """
19
20 - def __init__(self, k, attrs, dfunc, radius=None):
21 self._setup(k, attrs, dfunc, radius)
22
23 self._badExamples = []
24
26 return "Regression Model"
27
29 self._badExamples = examples
30
32 return self._badExamples
33
36
37 - def PredictExample(self, example, appendExamples=0, weightedAverage=0, neighborList=None):
38 """ Generates a prediction for an example by looking at its closest neighbors
39
40 **Arguments**
41
42 - examples: the example to be classified
43
44 - appendExamples: if this is nonzero then the example will be stored on this model
45
46 - weightedAverage: if provided, the neighbors' contributions to the value will be
47 weighed by their reciprocal square distance
48
49 - neighborList: if provided, will be used to return the list of neighbors
50
51 **Returns**
52
53 - the classification of _example_
54
55 """
56 if appendExamples:
57 self._examples.append(example)
58
59
60 knnLst = self.GetNeighbors(example)
61
62 accum = 0.0
63 denom = 0.0
64 for knn in knnLst:
65 if knn[1] is None:
66 continue
67 if weightedAverage:
68 dist = knn[0]
69 if dist == 0.0:
70 w = 1.
71 else:
72 w = 1. / dist
73 else:
74 w = 1.0
75 accum += w * knn[1][-1]
76 denom += w
77 if denom:
78 accum /= denom
79 if neighborList is not None:
80 neighborList.extend(knnLst)
81 return accum
82