content: #!/usr/bin/python
  
  import matplotlib.pyplot as plt
  from prep_terrain_data import makeTerrainData
  from class_vis import prettyPicture
  from time import time
  features_train, labels_train, features_test, labels_test = makeTerrainData()
  
  
  ### the training data (features_train, labels_train) have both "fast" and "slow" points mixed
  ### in together--separate them so we can give them different colors in the scatterplot,
  ### and visually identify them
  grade_fast = [features_train[ii][0] for ii in range(0, len(features_train)) if labels_train[ii]==0]
  bumpy_fast = [features_train[ii][1] for ii in range(0, len(features_train)) if labels_train[ii]==0]
  grade_slow = [features_train[ii][0] for ii in range(0, len(features_train)) if labels_train[ii]==1]
  bumpy_slow = [features_train[ii][1] for ii in range(0, len(features_train)) if labels_train[ii]==1]
  
  
  #### initial visualization
  plt.xlim(0.0, 1.0)
  plt.ylim(0.0, 1.0)
  plt.scatter(bumpy_fast, grade_fast, color = "b", label="fast")
  plt.scatter(grade_slow, bumpy_slow, color = "r", label="slow")
  plt.legend()
  plt.xlabel("bumpiness")
  plt.ylabel("grade")
  plt.show()
  #################################################################################
  
  
  ### your code here!  name your classifier object clf if you want the 
  ### visualization code (prettyPicture) to show you the decision boundary
  
  # K Nearest Neighbor
  from sklearn.neighbors import KNeighborsClassifier
  from sklearn.metrics import accuracy_score
  clf = KNeighborsClassifier(n_neighbors=1)
  
  t0 = time()
  clf.fit(features_train, labels_train)
  print "training time:", round(time()-t0, 3), "s"
  
  t0 = time()
  pred = clf.predict(features_test)
  print "predicting time:", round(time()-t0, 3), "s"
  acc = accuracy_score(pred, labels_test)
  print acc
  
  
  # Random Forest
  from sklearn.ensemble import RandomForestClassifier
  from sklearn.metrics import accuracy_score
  clf = RandomForestClassifier(n_estimators=10)
  
  t0 = time()
  clf.fit(features_train, labels_train)
  print "training time:", round(time()-t0, 3), "s"
  
  t0 = time()
  pred = clf.predict(features_test)
  print "predicting time:", round(time()-t0, 3), "s"
  acc = accuracy_score(pred, labels_test)
  print acc
  
  
  # Addaboost
  from sklearn.ensemble import AdaBoostClassifier
  from sklearn.metrics import accuracy_score
  clf = AdaBoostClassifier(n_estimators=100)
  
  t0 = time()
  clf.fit(features_train, labels_train)
  print "training time:", round(time()-t0, 3), "s"
  
  t0 = time()
  pred = clf.predict(features_test)
  print "predicting time:", round(time()-t0, 3), "s"
  acc = accuracy_score(pred, labels_test)
  print acc
  
  try:
      prettyPicture(clf, features_test, labels_test)
  except NameError:
      pass
  