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/2.5 Klassifikation - Multiklass Klassifikatoren.ipynb
T
2026-05-21 14:16:30 +02:00

133 KiB

Feature Engineering

Klassifikation

Instanzbasierte Modelle

Regelbasierte Modelle

Mathematische Modelle

Neuronale Netze

Multiklass Klassifikatoren

In [1]:
import sys
sys.path.append('./')
In [2]:
## preparation
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
%matplotlib inline

Theorie

In [3]:
iris_data = sns.load_dataset('iris')

x_new = 4.8
y_new = 2.2
fig, ax = plt.subplots(figsize=(6,6))
sns.scatterplot(x='sepal_length', 
                y='sepal_width', 
                data=iris_data,
                hue='species', 
                palette=['darkorange', 'green','darkviolet'])
ax.add_artist(plt.Circle((x_new, y_new), radius = 0.03, color='black', fill=True))
ax.add_artist(plt.Circle((x_new, y_new), radius = 0.35, color='black', fill=False))
plt.xlim(4, 8)
plt.ylim(1.5, 5.5);
In [4]:
## decision tree
X_iris = iris_data.drop('species', axis=1)
y_iris = iris_data.species

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(
    min_impurity_decrease=0.05, 
    random_state=1234)
model.fit(X_iris[['sepal_length', 'sepal_width']], y_iris)

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
plt.figure(figsize=(6, 6))
plot_tree(model,
          feature_names=X_iris.columns,
          class_names=model.classes_,
          filled=True); # Adds color accoding to class

One-vs-Rest

In [5]:
## load data
data = sns.load_dataset('iris')

## features - target - split
X = data.drop('species', axis=1)
y = data.species

## train - test - 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)

## define and train model
from sklearn.multiclass import OneVsRestClassifier
from sklearn.linear_model import LogisticRegression
model = OneVsRestClassifier(LogisticRegression(random_state=1234)).fit(X_train, y_train)

## predictions
pred = model.predict(X_test)
pred_proba = model.predict_proba(X_test)

## results
print(pd.DataFrame(
    pred_proba,
    pred
).head(10))
                   0         1         2
versicolor  0.013721  0.632638  0.353641
versicolor  0.008735  0.613221  0.378044
virginica   0.000446  0.339460  0.660093
setosa      0.873263  0.126729  0.000008
versicolor  0.082264  0.790321  0.127416
setosa      0.809556  0.190433  0.000011
setosa      0.872754  0.127239  0.000007
setosa      0.842567  0.157429  0.000004
versicolor  0.051173  0.812098  0.136729
virginica   0.000016  0.376987  0.622998

One-vs-One

In [6]:
## load data
data = sns.load_dataset('iris')

## features - target - split
X = data.drop('species', axis=1)
y = data.species

## train - test - 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)

## define and train model
from sklearn.multiclass import OneVsOneClassifier
from sklearn.linear_model import LogisticRegression
model = OneVsOneClassifier(LogisticRegression(random_state=1234)).fit(X_train, y_train)

## predictions
pred = model.predict(X_test)
print(pred)
['versicolor' 'versicolor' 'virginica' 'setosa' 'versicolor' 'setosa'
 'setosa' 'setosa' 'versicolor' 'virginica' 'versicolor' 'setosa'
 'virginica' 'versicolor' 'setosa' 'versicolor' 'virginica' 'setosa'
 'virginica' 'versicolor' 'versicolor' 'versicolor' 'versicolor'
 'versicolor' 'virginica' 'setosa' 'virginica' 'versicolor' 'virginica'
 'setosa' 'versicolor' 'virginica' 'setosa' 'virginica' 'virginica'
 'setosa' 'setosa' 'setosa' 'setosa' 'versicolor' 'setosa' 'versicolor'
 'setosa' 'virginica' 'virginica' 'setosa' 'virginica' 'virginica'
 'virginica' 'virginica']