Skip to content
#Using scikit -learn to fit a classifier
from sklearn.neighbors import KNeighborsClassifier 
 
X = churn_df[[ "total_day_charge", "total_eve_charge"]].values y = churn_df["churn"].values 
 
print (X.shape, y.shape)

knn = KNeighborsClassifier(n_neighbors= 15) 
 
knn.fit(X, y)

#Predicting on unlabeled data
X_new = np.array([[ 56.8, 17.5],
                  [24.4, 24.1],                   
                  [50.1, 10.9]]) 
 
print (X_new.shape)

predictions = knn.predict(X_new) 
 
print ('Predictions: {}'.format(predictions)) 


#Train/test
from sklearn.model_selection import train_test_split 
 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.3,                                                     random_state=21, stratify=y) 
 
knn = KNeighborsClassifier(n_neighbors= 6) 
 
knn.fit(X_train, y_train) 
print (knn.score(X_test, y_test)) 

#Model Complexity and over/under fitting
train_accuracies = {} 
test_accuracies = {} 
neighbors = np.arange(1, 26) 
 
for neighbor in neighbors: 
 
    knn = KNeighborsClassifier(n_neighbors=neighbor) 
 
    knn.fit(X_train, y_train) 
 
    train_accuracies[neighbor] = knn.score(X_train, y_train)     
    test_accuracies[neighbor] = knn.score(X_test, y_test)
    
    #Plotting Results
plt.figure(figsize=( 8, 6))
plt.title("KNN: Varying Number of Neighbors") 
plt.plot(neighbors, train_accuracies.values(), label="Training Accuracy")
plt.plot(neighbors, test_accuracies.values(), label="Testing Accuracy")
plt.legend() 
plt.xlabel("Number of Neighbors")
plt.ylabel("Accuracy")
plt.show()