Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. import numpy as np
  2. from util import get_data
  3. from datetime import datetime
  4. from scipy.stats import norm
  5. from scipy.stats import multivariate_normal as mvn
  6.  
  7. class NaiveBayes(object):
  8. def fit(self, X, Y, smoothing=1e-2):
  9. self.gaussians = dict()
  10. self.priors = dict()
  11. labels = set(Y)
  12. for c in labels:
  13. current_x = X[Y == c]
  14. self.gaussians[c] = {
  15. 'mean': current_x.mean(axis=0),
  16. 'var': current_x.var(axis=0) + smoothing,
  17. }
  18. self.priors[c] = float(len(Y[Y == c])) / len(Y)
  19.  
  20. def score(self, X, Y):
  21. P = self.predict(X)
  22. return np.mean(P == Y)
  23.  
  24. def predict(self, X):
  25. N, D = X.shape
  26. K = len(self.gaussians)
  27. P = np.zeros((N, K))
  28. for c, g in iteritems(self.gaussians):
  29. mean, var = g['mean'], g['var']
  30. P[:,c] = mvn.logpdf(X, mean=mean, cov=var) + np.log(self.priors[c])
  31. return np.argmax(P, axis=1)
  32.  
  33.  
  34. if __name__ == '__main__':
  35. X, Y = get_data(10000)
  36. Ntrain = len(Y) // 2
  37. Xtrain, Ytrain = X[:Ntrain], Y[:Ntrain]
  38. Xtest, Ytest = X[Ntrain:], Y[Ntrain:]
  39.  
  40. model = NaiveBayes()
  41. t0 = datetime.now()
  42. model.fit(Xtrain, Ytrain)
  43. print("Training time:", (datetime.now() - t0))
  44.  
  45. t0 = datetime.now()
  46. print("Train accuracy:", model.score(Xtrain, Ytrain))
  47. print("Time to compute train accuracy:", (datetime.now() - t0), "Train size:", len(Ytrain))
  48.  
  49. t0 = datetime.now()
  50. print("Test accuracy:", model.score(Xtest, Ytest))
  51. print("Time to compute test accuracy:", (datetime.now() - t0), "Test size:", len(Ytest))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement