GitLab wurde erfolgreich aktualisiert. Durch regelmäßige Updates bleibt das THM GitLab sicher. Danke für Ihre Geduld.

Commit 5b52a596 authored by Jens Plüddemann's avatar Jens Plüddemann

added more lectures

parent 32ed744a
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Pipenv (predictive-analytics)" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="Pipenv (predictive-analytics-new)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
......@@ -2,7 +2,7 @@
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Pipenv (predictive-analytics)" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="Pipenv (predictive-analytics-new)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
......
This diff is collapsed.
,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,i,p1,p2,p3,p
0,0.9954183877246264,1,1.0,2,1.0,3,2.0,3,2.0,2,2.0,1,0,1,2,5,0.3
1,1.0,1,1.0,2,1.3474842728096668,3,2.0,3,2.0,2,2.0,1,1,3,4,10,0.39
2,1.0,1,1.2711627091537157,2,1.0,3,2.0,3,2.0,2,2.0,1,2,3,4,10,0.507
3,1.0,1,1.0,2,1.0,3,2.0,3,1.4976584942064242,2,2.0,1,3,3,4,10,0.6591
4,1.0,1,1.0,2,0.25666684245295623,3,2.0,3,2.0,2,2.0,1,4,3,4,10,0.8568300000000001
5,1.0,1,0.9481269162917861,2,1.0,3,2.0,3,2.0,2,2.0,1,5,3,4,10,1.113879
6,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,1.6120804384814287,1,6,3,4,10,1.4480427000000002
7,1.0,1,1.0606981898128112,2,1.0,3,2.0,3,2.0,2,2.0,1,7,3,4,10,1.8824555100000004
8,1.0,1,1.0,2,1.0,3,1.716642082574551,3,2.0,2,2.0,1,8,3,4,10,2.447192163000001
9,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,1.6410411195738532,1,9,3,4,10,3.1813498119000014
10,1.0,1,1.0,2,1.0,3,2.0,3,1.9888155431417667,2,2.0,1,10,1,2,5,0.3
11,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,2.1899224924064353,1,11,3,4,10,0.39
12,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,1.3843571676492703,1,12,3,4,10,0.507
13,1.0,1,1.0,2,1.0,3,2.0,3,1.9949560783106584,2,2.0,1,13,1,2,5,0.6591
14,1.0,1,1.0,2,1.0,3,2.130278515501068,3,2.0,2,2.0,1,14,3,4,10,0.8568300000000001
15,1.0,1,1.0,2,1.0,3,2.0,3,2.0107820750119836,2,2.0,1,15,3,4,10,1.113879
16,1.0,1,1.0,2,1.3861526769584174,3,2.0,3,2.0,2,2.0,1,16,3,4,10,1.4480427000000002
17,1.0,1,1.0312940591548454,2,1.0,3,2.0,3,2.0,2,2.0,1,17,3,4,10,1.8824555100000004
18,1.0,1,1.0,2,1.0,3,2.0,3,2.2383769381663092,2,2.0,1,18,3,4,10,2.447192163000001
19,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,1.6871573619338225,1,19,3,4,10,3.1813498119000014
20,1.0,1,1.0,2,1.0,3,1.981152777972814,3,2.0,2,2.0,1,20,1,2,5,0.3
21,1.0,1,1.0,2,1.0,3,2.0,3,2.0188935487799435,2,2.0,1,21,1,2,5,0.39
22,1.0,1,1.0,2,1.0,3,2.311913827703925,3,2.0,2,2.0,1,22,3,4,10,0.507
23,1.0,1,1.0,2,0.4713685726432264,3,2.0,3,2.0,2,2.0,1,23,3,4,10,0.6591
24,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,2.002126768483623,1,24,1,2,5,0.8568300000000001
25,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,2.3305578317855296,1,25,3,4,10,1.113879
26,1.0,1,0.7308360669119509,2,1.0,3,2.0,3,2.0,2,2.0,1,26,3,4,10,1.4480427000000002
27,1.0,1,1.0,2,1.0,3,2.0,3,1.4568543147631559,2,2.0,1,27,3,4,10,1.8824555100000004
28,1.0,1,1.0,2,1.0,3,2.050572027848382,3,2.0,2,2.0,1,28,3,4,10,2.447192163000001
29,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,2.402359732200126,1,29,3,4,10,3.1813498119000014
30,1.0,1,1.0,2,0.9965434746459824,3,2.0,3,2.0,2,2.0,1,30,1,2,5,0.3
31,1.0,1,1.0,2,0.6551818722910858,3,2.0,3,2.0,2,2.0,1,31,3,4,10,0.39
32,1.0,1,1.0,2,1.0,3,2.0,3,1.9797257400833361,2,2.0,1,32,1,2,5,0.507
33,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,1.8176205834680017,1,33,3,4,10,0.6591
34,1.0,1,1.0,2,1.0,3,2.0,3,2.0172773354171745,2,2.0,1,34,3,4,10,0.8568300000000001
35,1.2467115277791831,1,1.0,2,1.0,3,2.0,3,2.0,2,2.0,1,35,3,4,10,1.113879
36,1.0,1,1.0,2,1.0,3,1.5452172538416322,3,2.0,2,2.0,1,36,3,4,10,1.4480427000000002
37,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,1.621213620414227,1,37,3,4,10,1.8824555100000004
38,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,2.06746064740485,1,38,3,4,10,2.447192163000001
39,1.0,1,1.0,2,1.0,3,1.7676874350607503,3,2.0,2,2.0,1,39,3,4,10,3.1813498119000014
40,1.3894640924445467,1,1.0,2,1.0,3,2.0,3,2.0,2,2.0,1,40,3,4,10,0.3
41,1.0,1,1.0,2,1.0,3,2.0,3,1.55312233155271,2,2.0,1,41,3,4,10,0.39
42,1.0,1,1.0,2,1.0,3,2.0,3,2.0032333635655872,2,2.0,1,42,1,2,5,0.507
43,0.745611642880452,1,1.0,2,1.0,3,2.0,3,2.0,2,2.0,1,43,3,4,10,0.6591
44,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,1.8926348495228695,1,44,3,4,10,0.8568300000000001
45,1.0,1,1.0,2,1.0,3,2.0,3,2.068638366728446,2,2.0,1,45,3,4,10,1.113879
46,1.0,1,1.0,2,1.0,3,2.0,3,1.8751619517559357,2,2.0,1,46,3,4,10,1.4480427000000002
47,1.0,1,1.276607011259453,2,1.0,3,2.0,3,2.0,2,2.0,1,47,3,4,10,1.8824555100000004
48,1.0,1,1.0,2,1.0,3,2.0,3,2.0,2,1.7301361580667112,1,48,3,4,10,2.447192163000001
49,1.0,1,1.2590450216901141,2,1.0,3,2.0,3,2.0,2,2.0,1,49,3,4,10,3.1813498119000014
import numpy as np
import random
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from keras import layers
from keras import models
from sklearn.linear_model import LinearRegression
from mpl_toolkits import mplot3d
from sklearn.model_selection import train_test_split
class DeepLearning:
......@@ -85,10 +90,9 @@ class DeepLearning:
return x ** 2 + y ** 2
def plot_3d_curve(self):
# Erstelle von -6 bis 6 30 Werte mit gleichem Abstand zueinander
x = np.linspace(-6, 6, 30)
y= np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
# Erstellt eine Koordinatenmatrix aus Vektoren
X, Y = np.meshgrid(x, y)
......@@ -97,10 +101,10 @@ class DeepLearning:
Z = self.f(X, Y)
# Erstelle eine Figur
fig= plt.figure()
fig = plt.figure()
# Erstelle die 3D Achsen
ax= plt.axes(projection='3d')
ax = plt.axes(projection='3d')
# Füge der 3d Achse die Werte hinzu, cmap beschreibt die Colormap, die benutzt werden soll
ax.contour3D(X, Y, Z, 50, cmap='binary')
......@@ -113,10 +117,283 @@ class DeepLearning:
plt.show()
def generate_rectangle_test_data(self):
# Setze Parameter
p_start = 0.3
p = p_start
damping = 1.3
epsilon = 0.01
epsilon_err = 0.3
n = 500
d = [1, 1, 1, 2, 1, 3, 2, 3, 2, 2, 2, 1]
# initialisiere eine leere Liste für das Ergebnis
result = []
# für jede Zahl von 0 bis 500
for i in range(n):
# erstelle eine Kopie des
d2 = d.copy()
# Wenn der Rest von i / 10 = 0 ist ,dann setze p auf 0.3
if i % 10 == 0:
p = p_start
# Selektiere einen zufälligen Wert aus der Liste
bend = random.choice([0, 2, 4, 6, 8, 10])
# Wenn ein zufälliger Wert zwischen 0 und 1 kleiner gleich p ist
if random.random() <= p:
# setze nv auf den Wert von d2 an der Stelle bend +
# einen zufälligen Wert aus einer Normalverteilung (epsilon_err)
# (erster Parameter ist Mittelwert, zweiter ist Standardabweichung)
nv = d2[bend] + random.gauss(0, epsilon_err)
# setze den Wert von d2 an der Stelle bend auf nv
d2[bend] = nv
# erstelle eine neue Liste mit einigen festen Werten und i und p
# Quick and Dirty.... muss nicht schlecht sein
more = [i, 3, 4, 10, p, 0, 1]
# setze die Liste d2 neu zusammen aus d2 und der more Liste (konkatenieren)
d2 = d2 + more
# Wenn die Zufallszahl größer als p ist
else:
# einen zufälligen Wert aus einer Normalverteilung (epsilon)
# (erster Parameter ist Mittelwert, zweiter ist Standardabweichung)
nv = d2[bend] + random.gauss(0, epsilon)
# setze den Wert von d2 an der Stelle bend auf nv
d2[bend] = nv
# erstelle eine neue Liste mit einigen festen Werten und i und p
# Quick and Dirty... muss nicht schlecht sein
more = [i, 1, 2, 5, p, 1, 0]
# setze die Liste d2 neu zusammen aus d2 und der more Liste (konkatenieren)
d2 = d2 + more
# füge d2 der Ergebnisliste hinzu
result.append(d2)
# setze p auf p * damping
p *= damping
# erstelle ein neues Dataframe aus dem Ergebnis
df = pd.DataFrame(result)
# benenne die Spalten im Dataframe
df.columns = ['x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4', 'x5', 'y5', 'x6', 'y6', 'i', 'p1', 'p2', 'p3',
'p', 'good', 'bad']
# speichere die erstellten Daten in eine csv Datei
df.to_csv('../../res/testdataset.csv')
# erstellen eines Plots mit 5 Zeilen und 10 Spalten
fig, axs = plt.subplots(nrows=5, ncols=10, figsize=(9, 6))
i = 0
# für jeden Wert im Ergebnis und einer eindimensionalen Liste der Werte des Plots
for v, ax in zip(result, axs.flat):
# erstellen von x und y Werten für jedes Rechteck
x = [v[0], v[2], v[4], v[6], v[8], v[10]]
y = [v[1], v[3], v[5], v[7], v[9], v[11]]
# fülle den Plot zwischen den den x und y Werten
ax.fill(x, y)
# erhöhe i um 1
i += 1
# Zeige den Plot
plt.show()
return df
def rectangles_x(self, file="../../res/data.csv"):
np.random.seed(0)
data = pd.DataFrame(
columns=['x1', 'y1', 'x1_rotated', 'y1_rotated', 'x2', 'y2', 'x2_rotated', 'y2_rotated', 'x3', 'y3',
'x3_rotated', 'y3_rotated', 'x4', 'y4', 'x4_rotated', 'y4_rotated'])
data = pd.read_csv(file, encoding='utf8', header=0, sep=';')
# erstelle die x_train Trainingsdatenrohlinge aus den jeweiligen Spaltennamen
x_train = data[['x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4']]
x_train = x_train.astype('int64').to_numpy()
# erstelle y_train Trainingsdatenrohlinge aus den jeweiligen Spaltennamen
y_train = data[
['x1_rotated', 'y1_rotated', 'x2_rotated', 'y2_rotated', 'x3_rotated', 'y3_rotated', 'x4_rotated',
'y4_rotated']]
y_train = y_train.astype('int64').to_numpy()
# erstelle Trainings und Testdaten
train_features, test_features, train_target, test_target = train_test_split(x_train, y_train, test_size=0.1,
random_state=0)
# erstellen des neuronalen Netzwerks
network = models.Sequential()
# füge die Daten dem Netz hinzu mit der Aktivierungsfunktion ReLu
network.add(layers.Dense(units=50, activation='relu', input_shape=(train_features.shape[1],)))
# füge eine Ebene ohne Aktivierungsfunktion hinzu
network.add(layers.Dense(units=8))
# Berechne das Netzwerk
network.compile(loss='mse', optimizer='RMSprop', metrics=['mse'])
# Trainiere das Netzwerk
history = network.fit(train_features, train_target, epochs=5, verbose=1, batch_size=100,
validation_data=(test_features, test_target))
# Prediction
print(
'Correct rotation of the square with the points (x&y): 1&9, 3&9, 3&11, 1&11: [[ -9 1 -9 3 -11 3 -11 1]]')
print('Prediction for the square with the corner points: 1&9, 3&9, 3&11, 1&11: ',
network.predict(np.array([[1, 9, 3, 9, 3, 11, 1, 11]]), verbose=0))
# erhalten des Ergebnisses der Vorhersage des Netzwerks
result = network.predict(np.array([[1, 9, 3, 9, 3, 12, 1, 12]]), verbose=0)
# erstelle 2 Listen
x1, y1 = [], []
# für jeden Wert von 0 bis zur länge der ersten Liste des Ergebnisses
for i in range(len(result[0])):
# Wenn der Rest von i / 2 = 0 ist
if i % 2 == 0:
# füge x1 den i-ten Wert von der ersten Liste des Ergebnisses hinzu
x1.append(result[0][i])
# Wenn der Rest von i / 2 nicht gleich 0 ist
else:
# füge y1 den i-ten Wert von der ersten Liste des Ergebnisses hinzu
y1.append(result[0][i])
# definiere x und y
x = [1, 3, 3, 1]
y = [9, 9, 12, 12]
# erstelle Plots
fig, ax = plt.subplots()
# Fülle die Fläche zwischen den x und y Werten
ax.fill(x, y)
# Fülle die Fläche zwischen den x1 und y1 Werten
ax.fill(x1, y1)
# Zeige das Plot
plt.show()
def _make2ColArray(self, x):
res = []
for row in x:
res.append([row[0], row[1]])
res.append([row[2], row[3]])
res.append([row[4], row[5]])
res.append([row[6], row[7]])
return res
def _predictAndPlot(self, p_predict, network):
q_predict = []
q_predict.append(network.predict(np.array(p_predict), verbose=0))
for item in p_predict:
plt.plot(item[0], item[1], 'bo')
for x in q_predict:
for item in x:
plt.plot(item[0], item[1], 'ro')
plt.show()
def _createModel(self, numberOfNeurons, numberOfEpochs=5, file="../../res/data.csv"):
np.random.seed(0)
### Input Data
# data = pd.DataFrame(columns=['x1','y1','x1_rotated','y1_rotated','x2','y2','x2_rotated','y2_rotated','x3','y3','x3_rotated','y3_rotated','x4','y4','x4_rotated','y4_rotated'])
data = pd.read_csv(file, encoding='utf8', header=0, sep=';')
x_train_hlp = data[['x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4']].values
x_train = self._make2ColArray(x_train_hlp)
print(x_train[0])
### Target Data
y_train_hlp = data[
['x1_rotated', 'y1_rotated', 'x2_rotated', 'y2_rotated', 'x3_rotated', 'y3_rotated', 'x4_rotated',
'y4_rotated']].values
y_train = self._make2ColArray(y_train_hlp)
print(y_train[0])
# Split data
train_features, test_features, train_target, test_target = train_test_split(x_train, y_train, test_size=0.1,
random_state=0)
# Convert to numpy arrays
train_features = np.array(train_features)
test_features = np.array(test_features)
train_target = np.array(train_target)
test_target = np.array(test_target)
# Print
print('train_data_shape: ', np.shape(train_features))
print('train_features example: ', train_features[0])
print('train_target example: ', train_target[0])
print('test_data_shape: ', np.shape(test_features))
# Define neural network
network = models.Sequential()
# Add fully connected layer with a ReLU activation function
network.add(layers.Dense(units=numberOfNeurons, activation='relu', input_shape=(np.shape(train_features)[1],)))
# Add fully connected layer with no activation function
network.add(layers.Dense(units=2))
# Show architecture of model
network.summary()
# Compile neural network
network.compile(loss='mse', optimizer='RMSprop',
metrics=['mse']) # Mean squared error # Optimization algorithm # Mean squared error
# Train neural network
network.fit(train_features, train_target, epochs=numberOfEpochs, verbose=1, batch_size=100,
validation_data=(test_features, test_target))
loss = network.evaluate(test_features, test_target)[0]
return network, loss
def rectangles_2(self):
# erstelle das Netzwerk
network = self._createModel(8)[0]
# erstelle eine Liste an Listen mit Werten zum Vorhersagen
p_predict = [[1, 9], [1, 11], [4, 9], [4, 11]]
# erstelle die Vorhersage und plotte das Ergebnis
self._predictAndPlot(p_predict, network)
if __name__ == '__main__':
data = DeepLearning()
# data.linear_regression()
# data.linear_regression_ml()
# data.linear_regression_sci_kit()
data.plot_3d_curve()
# data.plot_3d_curve()
# data.generate_rectangle_test_data()
# data.rectangles_x()
data.rectangles_2()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment