85 KiB
85 KiB
In [1]:
## for scikit-learn 1.4.2, to silence warnings regarding physical cores
import os
os.environ['LOKY_MAX_CPU_COUNT'] = '4' ## depending on the hardware usedIn [2]:
## suppress Future warning
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)In [3]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
%matplotlib inline
datapath = '../3_data'
from os import chdir; chdir(datapath)
## load data
data = pd.read_csv('bank_data_prep.csv')
data.shape ## check
## features - target - split
## organize features and target as independent objects
X = data.drop('y', axis=1)
y = data['y']
## test - train - split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
train_size=2 / 3,
random_state=1234)
## demo dataset
demo_data = pd.read_csv('demo_data_class.csv')
X_demo = demo_data.drop('y', axis=1)
y_demo = demo_data['y']
## import trainer class
from sklearn.neighbors import KNeighborsClassifier
## instantiate (and parameterize) the model
model = KNeighborsClassifier()
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()
params = range(5, 16) ## k values as range from 1 to 20 by 1
scores = [] ## empty list for collecting score results by iteration
## iterate over params
for param in params:
model.set_params(n_neighbors=param)
model.fit(X_train, y_train)
scores.append(model.score(X_test, y_test))
print(param, model.score(X_test, y_test)) ## for trace progress only
## visualization
fig = sns.lineplot(x=params, y=scores)
plt.scatter(x=params[scores.index(max(scores))], y=max(scores), color="black")
plt.xlabel('k')
plt.ylabel('accuracy');5 0.7493154852449042 6 0.7505324003650745 7 0.7520535442652875 8 0.7517493154852449 9 0.7554000608457561 10 0.7532704593854579 11 0.7608761788865227 12 0.7532704593854579 13 0.7602677213264375 14 0.7554000608457561 15 0.7578338910860968
In [4]:
## $$ andere Grafik darstellung mit kontrollierten Werten auf der X-Achse
fig = sns.lineplot(x=params, y=scores)
plt.scatter(x=params[scores.index(max(scores))], y=max(scores), color="black")
plt.xlabel('k')
plt.xticks(params) ## new
plt.ylabel('accuracy');