This repository has been archived on 2026-06-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cas-pml/SL/aufgaben/template/2_Code/9 Nachtraege Allgemein 20240627.ipynb
T
2026-05-21 14:16:30 +02:00

85 KiB

Nachträge

  • dieses Dokument kann von Kurstag zu Kurstag ergänzt werden, daher sollte es jeweils ebenfalls jeweils neu heruntergeladen werden

Extra Themen

  • eine Zusammenstellung von Themen aus der Präsentation, welche nicht prüfungsrelevant sind, zusätzlich zu den explizit mit (i) gekennzeichneten Folien
  • die Zusammenstellung wird fortlaufend ergänzt
Kapitel Folie(n)
1. Feature Engineering
1.1.4.5 Begriffe - Homonyme und Synonyme 20-21
1.2.3.1 Numerische Variablen - Quantitativ (Nachbemerkung) 24
1.2.4.5 Lineare Zusammenhänge, etc. 49-55
2. Klassifikation
3. Regression
3.2.1.1 Multiple Lineare Regression 13
3.3.2.1 DecisionTreeRegressor - Theorie 12

Bessere Parametrisierung bei Tuning Plots

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 used
In [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 der obigen Darstellung wird die Wahl der ticks (Stützpunkte) auf der X-Achse dem System überlassen
  • diese kann aber auch wie folgt übersteuert werden
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');

Splitting Kriterium bei DecisionTreeRegressor

vgl. Folie 12 in Kapitel 3.3:

  • in der Folie steht für MSE folgende Formel:
MSE=\frac{1}{n}\sum\limits_{i=1}^{n}{(y_i-\hat{y}_i)^2}
  • wobei
    • n: Anzahl Beobachtungen der Testdaten
    • y_i: wahrer Targetwert der i-ten Beobachtung der Testdaten
    • \hat{y}_i: Mittelwert aller Targetwerte der Testdaten
  • das ist exakt dieselbe Formulierung für Mean squared error, wie sie auch in der Zusammenstellung der Performance Metriken Regression in Kap. 4.4.2.2. geschrieben ist
  • als Splitting Kriterium wird bei diesem Regressor per Default 'squared_error' eingesetzt
  • das ist tatsächlich eine (leichte) Modifikation der oben genannten Metrik:
    • n: Anzahl der Beobachtung im jeweiligen Knoten
    • y_i: wahrer Targetwert der i-ten Beobachtung im jeweiligen Knoten
    • \hat{y}_i: Prediction des jeweiligen Knotens
  • da aber die Prediction jedes Knotens aus dem Mittelwert der darin vorliegenden Targetwerte besteht, kann obige Formel auch so geschrieben werden:
MSE=\frac{1}{n}\sum\limits_{i=1}^{n}{(y_i-\bar{y})^2}
  • dadurch entspricht die Formulierung jener der Stichprobenvarianz, welche aus der Statistik bekann sein dürfte