0% fanden dieses Dokument nützlich (0 Abstimmungen)
186 Ansichten11 Seiten

Hausaufgabe 1 Machine Learning

Das Dokument beschreibt die Anwendung verschiedener maschineller Lernalgorithmen wie K-nächste Nachbarn und Support Vector Machine zur Klassifizierung von Raumzuständen als behaglich oder unbehaglich auf Basis von Temperatur- und Feuchtigkeitsdaten. Die Algorithmen werden anhand eines Beispieldatensatzes trainiert und ihre Genauigkeit wird evaluiert.
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als DOCX, PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
186 Ansichten11 Seiten

Hausaufgabe 1 Machine Learning

Das Dokument beschreibt die Anwendung verschiedener maschineller Lernalgorithmen wie K-nächste Nachbarn und Support Vector Machine zur Klassifizierung von Raumzuständen als behaglich oder unbehaglich auf Basis von Temperatur- und Feuchtigkeitsdaten. Die Algorithmen werden anhand eines Beispieldatensatzes trainiert und ihre Genauigkeit wird evaluiert.
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als DOCX, PDF, TXT herunterladen oder online auf Scribd lesen

Hausaufgabe 1 Machine Learning

Modul SMART HOME SoSe 2021/2022

von

Francisco José Araque Pineda


Matrikel-Nummer: 0473287
Studiengang: Wirtschaftingenieurwesen

Prof. Dr. Rita Streblow

Berlin, den August 2, 2022


Inhaltsübersicht
1. Einleitung...............................................................................................................3
2. Nächster Nachbar und K-nächste Nachbarn...........................................................4
3. Support Vector Machine.........................................................................................6
4. Schlussfolgerungen der Aufgabe..........................................................................10
1. Einleitung
In dieser Aufgabe wollen wir verschiedene Algorithmen des maschinellen Lernens
einsetzen, um den Zustand eines Raumes als „behaglich“ oder unbehaglich zu
klassifizieren.

Für die Entwicklung der Algorithmen wurde beschlossen, das Tool Google Colab zu
verwenden. Google Colab ist ein kostenloses Online-Tool, das die Entwicklung und
Ausführung von Python-Codes ermöglicht, ohne dass der Computer über bestimmte
Eigenschaften verfügen muss. Der Hauptgrund für die Verwendung dieses Tools ist die
Flüssigkeit und die Benutzerfreundlichkeit, die es bietet.

Der Hausaufgabendatensatz besteht aus einer .csv-Datei mit einer Tabelle mit 34 Zeilen
und 9 Spalten. Vor der Anwendung eines Algorithmus ist es notwendig, die Daten zu
verarbeiten und nur die für diese Aufgabe wesentlichen Informationen zu speichern.
Daher werden die Spalten „Temp. In ºC“, „rel. Feuchte in %“ und „Bewertung“
beibehalten und der Rest gestrichen. Der Name der Spalten wird dann in „x1“, „x2“ und
„y“ geändert.

Schließlich wird der Wert der Spalte „y“ durch eine „1“ ersetzt, wenn er „behaglich“
war, oder durch eine „0“, wenn er „unbehaglich“ war.

Nach der Verarbeitung des ursprünglichen Datensatzes werden die folgenden


Algorithmen angewandt: Nächster Nachbarn, K-nächste Nachbarn und Support Vector
Machine.
2. Nächster Nachbar und K-nächste Nachbarn
Der erste Schritt besteht darin, die Bibliotheken zu laden, die für die Implementierung
dieser beiden Algorithmen verwendet werden sollen.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import matplotlib.patches as mpatches
import seaborn as sb

%matplotlib inline
plt.rcParams['figure.figsize'] = (16, 9)
plt.style.use('ggplot')

from sklearn.model_selection import train_test_split


from sklearn.preprocessing import MinMaxScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix

Der Datensatz wird auch geladen.


datosread = '/content/Datensatz_Hausaufgabe_scikit-learn.csv'
datos = pd.read_csv(datosread, on_bad_lines='skip', sep=';')

Die Daten werden in Training und Test unterteilt.


X = datos[['x1','x2']].values
y = datos['y'].values

X_train, X_test, y_train, y_test = train_test_split(X, y,


random_state=0)
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

Als nächstes verwenden wir einen Befehl, um zu sehen, für welche Werte von „k“ die
höchste Genauigkeit erzielt wird.
k_range = range(1, 20)
scores = []
for k in k_range:
knn = KNeighborsClassifier(n_neighbors = k)
knn.fit(X_train, y_train)
scores.append(knn.score(X_test, y_test))
plt.figure()
plt.xlabel('k')
plt.ylabel('accuracy')
plt.scatter(k_range, scores)
plt.xticks([0,5,10,15,20])

([<matplotlib.axis.XTick at 0x7f5ff2be4550>, <matplotlib.axis.XTick


at 0x7f5ff2ac9950>, <matplotlib.axis.XTick at 0x7f5ff2ac93d0>,
<matplotlib.axis.XTick at 0x7f5ff2a468d0>, <matplotlib.axis.XTick
at 0x7f5ff2a46bd0>], <a list of 5 Text major ticklabel objects>)

Wie man sieht, werden die höchsten Genauigkeitswerte für „k” gleich 1 und „k“ gleich
2 erzielt. Daher sind die Ergebnisse für den Nächster Nachbarn Algorithmus (k gleich 1)
und für den K-nächste Nachbarn Algorithmus (der das beste Ergebnis für k gleich 2
erzielt) gleich. Daher werden diese beiden Algorithmen in denselben Abschnitt
aufgenommen.

Der Algorithmus ist mit einem Wert von k gleich 2 aufgebaut.


n_neighbors = 2

knn = KNeighborsClassifier(n_neighbors)
knn.fit(X_train, y_train)
print('Accuracy of K-NN classifier on training set: {:.2f}'
.format(knn.score(X_train, y_train)))
print('Accuracy of K-NN classifier on test set: {:.2f}'
.format(knn.score(X_test, y_test)))

Accuracy of K-NN classifier on training set: 0.96


Accuracy of K-NN classifier on test set: 1.00
Man sieht, dass die Genauigkeit des Algorithmus sehr hoch ist.

Schließlich wird das Modell angewandt, um zu sehen, wie sich ein Benutzer in einem
Raum mit einer Temperatur von 23,3 °C und einer Luftfeuchtigkeit von 46 % fühlen
würde.
print(knn.predict([[23.3, 46]]))

[0]

Das Ergebnis ist 0, so die Bewertung des Raums ist unbehaglich.

3. Support Vector Machine

Die erforderlichen Bibliotheken werden geladen, die Daten werden geladen und
ausgedruckt.
import pandas as pd
import numpy as np

import matplotlib.pyplot as plt


from matplotlib import style
import seaborn as sns
from mlxtend.plotting import plot_decision_regions

from sklearn.svm import SVC


from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score

plt.rcParams['image.cmap'] = "bwr"
#plt.rcParams['figure.dpi'] = "100"
plt.rcParams['savefig.bbox'] = "tight"
style.use('ggplot') or plt.style.use('ggplot')

import warnings
warnings.filterwarnings('ignore')
datosread = '/Datensatz_Hausaufgabe_scikit-learn.csv'
datos = pd.read_csv(datosread, on_bad_lines='skip', sep=';')
datos.head(20)
print(datos)

x1 x2 y
0 20.0 40 1
1 24.0 30 0
2 20.5 75 0
3 24.0 42 1
4 22.0 60 1
5 18.0 41 0
6 20.4 52 1
7 26.0 52 0
8 22.0 75 0
9 20.1 32 0
10 18.0 62 0
11 21.0 75 0
12 24.0 30 0
13 25.0 27 0
14 24.2 39 1
15 23.2 58 1
16 19.9 63 1
17 25.0 40 1
18 20.0 20 0
19 18.0 51 0
20 25.0 25 0
21 21.3 52 1
22 22.1 43 1
23 18.3 39 0
24 26.2 49 0
25 22.0 40 1
26 20.3 54 1
27 23.0 52 1
28 24.1 51 1
29 26.1 53 0
30 24.1 72 0

Als nächster Schritt wird ein Diagramm mit den Daten erstellt, um sie besser zu
verstehen.
fig, ax = plt.subplots(figsize=(6,4))
ax.scatter(datos.x1, datos.x2, c=datos.y);
ax.set_title("Zusammenhang");
Die Daten werden in Train (80%) und Test (20%) unterteilt.
X = datos.drop(columns = 'y')
y = datos['y']

X_train, X_test, y_train, y_test = train_test_split(


X,
y.values.reshape(-1,1),
train_size = 0.8,
random_state = 1234,
shuffle = True
)
Das Modell wird erstellt.
modelo = SVC(C = 100, kernel = 'linear', random_state=123)
modelo.fit(X_train, y_train)

SVC(C=100, kernel='linear', random_state=123)

Die Grenzen der Klassifizierung werden grafisch dargestellt.


x = np.linspace(np.min(X_train.x1), np.max(X_train.x1), 50)
y = np.linspace(np.min(X_train.x2), np.max(X_train.x2), 50)
Y, X = np.meshgrid(y, x)
grid = np.vstack([X.ravel(), Y.ravel()]).T

pred_grid = modelo.predict(grid)

fig, ax = plt.subplots(figsize=(6,4))
ax.scatter(grid[:,0], grid[:,1], c=pred_grid, alpha = 0.2)
ax.scatter(X_train.x1, X_train.x2, c=y_train, alpha = 1)

ax.scatter(
modelo.support_vectors_[:, 0],
modelo.support_vectors_[:, 1],
s=200, linewidth=1,
facecolors='none', edgecolors='black'
)

ax.contour(
X,
Y,
modelo.decision_function(grid).reshape(X.shape),
colors = 'k',
levels = [-1, 0, 1],
alpha = 0.5,
linestyles = ['--', '-', '--']
)

ax.set_title("Resultados clasificación SVM lineal");

Die Testwerte werden vorhergesagt und die Genauigkeit des Modells wird berechnet.
predicciones = modelo.predict(X_test)
predicciones

array([1, 1, 1, 0, 1, 1, 1])
accuracy = accuracy_score(
y_true = y_test,
y_pred = predicciones,
normalize = True
)
print("")
print(f"El accuracy de test es: {100*accuracy}%")

El accuracy de test es: 42.857142857142854%

Wie man sieht, liegt die Genauigkeit des Modells bei 42.86 %.

Schließlich wird das Modell angewandt, um zu sehen, wie sich ein Benutzer in einem
Raum mit einer Temperatur von 23,3 °C und einer Luftfeuchtigkeit von 46 % fühlen
würde.
predicciones2 = modelo.predict([[23.3, 46]])
predicciones2

array([1])

Das Ergebnis ist 1, so die Bewertung des Raums ist behaglich.

4. Schlussfolgerungen der Aufgabe

Der erste und wichtigste Schritt bei der Durchführung dieser Aufgabe bestand darin,
den Datensatz zu verstehen. Danach muss man verstehen, welche Informationen
notwendig und welche entbehrlich sind, um die Modelle zu erstellen und zu
entscheiden, wie sich ein Benutzer in einem Raum mit einer Temperatur von 23,3ºC
und einer Luftfeuchtigkeit von 46% fühlen würde.

Ein weiterer wichtiger Schritt bestand darin, mit Hilfe des Befehls zu berechnen, für
welche Werte von k die höchste Genauigkeit erzielt wurde, da dies eine Menge Arbeit
ersparte.
Schließlich, wenn man vergleicht die Genauigkeit der beiden Modelle, so zeigt sich,
dass der K-nächste-Nachbarn-Algorithmus eine höhere Genauigkeit (100%) erzielt als
der Support-Vector-Machine-Algorithmus (42.86%).

Daher kann man sagen, dass das Endergebnis ist, dass ein Benutzer einen Raum mit
einer Temperatur von 23,3°C und einer Luftfeuchtigkeit von 46% unbehaglich bewerten
würde.

Das könnte Ihnen auch gefallen