Skip to content

Instantly share code, notes, and snippets.

@michelkana
Created October 26, 2021 15:13
Show Gist options
  • Save michelkana/383bb7e2f93622789cf8c8fdd4f3c216 to your computer and use it in GitHub Desktop.
Save michelkana/383bb7e2f93622789cf8c8fdd4f3c216 to your computer and use it in GitHub Desktop.
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.neighbors import KNeighborsRegressor
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
KNNModels = {}
k_list = [1,3,5,10,12,15,20,75,250]
for k in k_list:
knr = KNeighborsRegressor(n_neighbors=k)
KNNModels[k] = knr.fit(x_train, y_train)
f, axarr = plt.subplots(2, len(k_list), figsize=(40,10))
f.suptitle('Scatter plot of actual vs KNN predicted for Train and Test data', fontsize ='x-large')
count = 0
r2_scores = []
for key, value in KNNModels.items():
y_train_predicted = KNNModels[key].predict(x_train)
r2_score_train = r2_score(y_train, y_train_predicted)
axarr[0,count].scatter(x_train, y_train, label='actual', marker = '*', alpha=.8)
axarr[0,count].legend(loc="upper right")
axarr[0,count].set_title('Train k=' + str(key) + ' R2=' + str(round(r2_score_train, 2)))
axarr[0,count].set_xlabel('Time')
axarr[0,count].set_ylabel('Score')
axarr[0,count].grid(False)
axarr[0,count].scatter(x_train, y_train_predicted, color='g', label='predicted', alpha=.4)
axarr[0,count].legend(loc="upper right")
axarr[0,count].set_xlabel('Time')
axarr[0,count].set_ylabel('Score')
y_test_predicted = KNNModels[key].predict(x_test)
r2_score_test = r2_score(y_test, y_test_predicted)
axarr[1,count].scatter(x_test, y_test, label='actual', color='r', alpha=.8)
axarr[1,count].legend(loc="upper right")
axarr[1,count].set_title('Test k=' + str(key) + ' R2=' + str(round(r2_score_test, 2)))
axarr[1,count].set_xlabel('Time in minutes')
axarr[1,count].set_ylabel('Pickups count')
axarr[1,count].grid(False)
axarr[1,count].scatter(x_test, y_test_predicted, color='g', label='predicted', alpha=.4)
axarr[1,count].legend(loc="upper right")
axarr[1,count].set_xlabel('Time in minutes')
axarr[1,count].set_ylabel('Pickups count')
count+=1
r2_scores.append([key, r2_score_train, r2_score_test])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment