import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
Read the 'KNN_Project_Data csv file into a dataframe
df = pd.read_csv('KNN_Project_Data')
Check the head of the dataframe.
df.head()
Since this data is artificial, we'll just do a large pairplot with seaborn.
Use seaborn on the dataframe to create a pairplot with the hue indicated by the TARGET CLASS column.
sns.pairplot(df, hue = 'TARGET CLASS')
Time to standardize the variables.
Import StandardScaler from Scikit learn.
from sklearn.preprocessing import StandardScaler
Create a StandardScaler() object called scaler.
myscaler = StandardScaler()
Fit scaler to the features.
myscaler.fit(X = df.drop('TARGET CLASS', axis = 1))
Use the .transform() method to transform the features to a scaled version.
X = myscaler.transform(X = df.drop('TARGET CLASS', axis = 1))
Convert the scaled features to a dataframe and check the head of this dataframe to make sure the scaling worked.
tdf = pd.DataFrame(X, columns=df.columns[:-1])
tdf.head()
Use train_test_split to split your data into a training set and a testing set.
from sklearn.model_selection import train_test_split
y = df['TARGET CLASS']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 101)
Import KNeighborsClassifier from scikit learn.
from sklearn.neighbors import KNeighborsClassifier
Create a KNN model instance with n_neighbors=1
myKNN = KNeighborsClassifier(n_neighbors = 1)
Fit this KNN model to the training data.
myKNN.fit(X_train, y_train)
Let's evaluate our KNN model!
Use the predict method to predict values using your KNN model and X_test.
y_predict = myKNN.predict(X_test)
Create a confusion matrix and classification report.
from sklearn.metrics import confusion_matrix, classification_report
print(confusion_matrix(y_test,y_predict))
print(classification_report(y_test,y_predict))
Let's go ahead and use the elbow method to pick a good K Value!
Create a for loop that trains various KNN models with different k values, then keep track of the error_rate for each of these models with a list. Refer to the lecture if you are confused on this step.
err_rates = []
for idx in range(1,40):
knn = KNeighborsClassifier(n_neighbors = idx)
knn.fit(X_train, y_train)
pred_idx = knn.predict(X_test)
err_rates.append(np.mean(y_test != pred_idx))
Now create the following plot using the information from your for loop.
plt.style.use('ggplot')
plt.subplots(figsize = (10,6))
plt.plot(range(1,40), err_rates, linestyle = 'dashed', color = 'blue', marker = 'o', markerfacecolor = 'red')
plt.xlabel('K-value')
plt.ylabel('Error Rate')
plt.title('Error Rate vs K-value')
Retrain your model with the best K value (up to you to decide what you want) and re-do the classification report and the confusion matrix.
myKNN = KNeighborsClassifier(n_neighbors = 31)
myKNN.fit(X_train,y_train)
y_predict = myKNN.predict(X_test)
print('WITH K=31')
print('')
print(confusion_matrix(y_test,y_predict))
print('')
print(classification_report(y_test,y_predict))