|
2 | 2 |
|
3 | 3 | classNormalizePositive(object): |
4 | 4 |
|
5 | | -deffit(self, X, y=None): |
| 5 | +deffit(self, features, y=None): |
6 | 6 | # count features that are greater than zero in axis 0: |
7 | | -binary= (X>0) |
| 7 | +binary= (features>0) |
8 | 8 | count0=binary.sum(axis=0) |
9 | 9 |
|
10 | 10 | # to avoid division by zero, set zero counts to one: |
11 | | -count0+= (count0==0) |
| 11 | +count0[count0==0] =1. |
12 | 12 |
|
13 | | -self.mean=X.sum(axis=0)/count0 |
| 13 | +self.mean=features.sum(axis=0)/count0 |
14 | 14 |
|
15 | 15 | # Compute variance by average squared difference to the mean, but only |
16 | 16 | # consider differences where binary is True (i.e., where there was a |
17 | 17 | # true rating): |
18 | | -diff= (X-self.mean) *binary |
| 18 | +diff= (features-self.mean) *binary |
19 | 19 | diff**=2 |
| 20 | +# regularize the estimate of std by adding 0.1 |
20 | 21 | self.std=np.sqrt(0.1+diff.sum(axis=0)/count0) |
21 | 22 | returnself |
22 | 23 |
|
23 | | -deffit_transform(self, X): |
24 | | -returnself.fit(X).transform(X) |
| 24 | +deftransform(self, features): |
| 25 | +binary= (features>0) |
| 26 | +features=features-self.mean |
| 27 | +features/=self.std |
| 28 | +features*=binary |
| 29 | +returnfeatures |
25 | 30 |
|
26 | | -deftransform(self, X): |
27 | | -binary= (X>0) |
28 | | -X=X-self.mean |
29 | | -X/=self.std |
30 | | -X*=binary |
31 | | -returnX |
32 | | - |
33 | | -definverse_transform(self, X, copy=True): |
| 31 | +definverse_transform(self, features, copy=True): |
34 | 32 | ifcopy: |
35 | | -X=X.copy() |
36 | | -X*=self.std |
37 | | -X+=self.mean |
38 | | -returnX |
| 33 | +features=features.copy() |
| 34 | +features*=self.std |
| 35 | +features+=self.mean |
| 36 | +returnfeatures |
| 37 | + |
| 38 | +deffit_transform(self, features): |
| 39 | +returnself.fit(features).transform(features) |
| 40 | + |
39 | 41 |
|
40 | 42 | defpredict(train): |
41 | 43 | norm=NormalizePositive() |
|
0 commit comments