KI-Algorithmen: Demos in Javascript

1. Linear Regression
(ML-Algorithm using Batch Gradient Descent)

https://iludis.de/LinearRegression/index.html


2. kNN (k-nearest-neighbour)

https://iludis.de/kNNDemo/index.html


3. SVM (Hard-Margin Support Vector Machine)

https://iludis.de/svmDemo/index.html


4. NeuralNet-Dinosaur: Perceptron with SGD

https://iludis.de/Perceptron/index.html


5. k-Means-Clustering

https://iludis.de/kMeansClustering/index.html

6. no-AI, but helper-App:
generate points for export

https://iludis.de/pointgenerator/index.html

Template für kNN in Spyder

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

Data = pd.read_csv("C:/tmp/zufall.txt", header=0)
print(list(Data.columns))

kNN = pd.DataFrame(
    [[9, 9,"c"],
    [11, 11,"c"],
    [11, 9,"c"],
    [9, 11,"c"]],
    columns=['X','Y','Klasse'])

pPlot = Data[Data.Klasse=='a'].plot(kind='scatter',x='X',y='Y',color='blue', label='Klasse a')
Data[Data.Klasse=='b'].plot(kind='scatter',x='X',y='Y',color='red', label='Klasse b',ax=pPlot)
kNN[kNN.Klasse=='c'].plot(kind='scatter',x='X',y='Y',color='green', label='Klasse c', ax=pPlot)

pPlot.set_xlabel("ein paar x Werte")
pPlot.set_ylabel("ein paar y Werte")
pPlot.set_title("zufällige Punkte")

pPlot=plt.gcf()
pPlot.set_size_inches(6,6)
plt.show()

testX = kNN.iloc[0,0]
testY = kNN.iloc[0,1]
testKlasse = kNN.iloc[0,2]
print("kNN von ", testX, testY, testKlasse)

zufall

RSA-Algorithmus für den Unterricht

Vollständiger Python-Quellcode

import math
import random

# primzahlen erzeugen
obergrenze = 100
primliste = [2] #Initialisierung Primzahlarray
for i in range(3,obergrenze,2):
    teilbar = False
    for j in range(2, math.ceil(math.sqrt(i))+1):
        if(i/j == i//j):
            teilbar = True
            break
    if(not teilbar):
        primliste.append(i)
print("Primzahlen zwischen 0 und",obergrenze,": ",primliste)

# Öffentlichen Modulus und Eulersche Phi-Funktion davon
p = primliste[random.randint(0, len(primliste)-1)] #zufällige Auswahl
primliste.remove(p) #Sicherstellen, dass p und q unterschiedlich
q = primliste[random.randint(0, len(primliste)-1)] #zufällige Auswahl
print("zufällig ausgewähltes p: ", p, "und q: ", q)
phiVonN = (p-1)*(q-1)
print("Phi(N): (",p,"- 1 ) * (",q,"- 1 ) = ", phiVonN, "\n")
N = p*q #öffentlicher Modulus
print ("** öffentlicher Modulus:" ,N)

# mit größtem gemeinsamen Teiler den öffentlichen Schlüssel bestimmen
def ggt(a,b): #Euklidischer Algorithmus
    if b==0:
        return a
    return ggt(b,a%b)

e = 2 #Initialisierung mit Startwert
while ggt(e,phiVonN)!=1: #BrutForce Gleichung lösen
    e = e + 1
print("** öffentlicher schlüssel: ", e)

# privaten Schlüssel bestimmen
d = 2 #Initialisierung mit Startwert
while (d*e)%phiVonN!=1: #Nochmal BruteForce
    d = d + 1
print("** privater schlüssel: ", d)

klarzahl = 42 #irgendeine Zahl...
if klarzahl<(N-1):
    geheimzahl = pow(klarzahl,e,N)
    neueklarzahl = pow(geheimzahl,d,N)
    print("\nklarzahl:", klarzahl,
          "\ngeheimzahl:", geheimzahl,
          "\nentschlüsselt: ", neueklarzahl)
else:
    print("öffentlicher Modulus ", N, "ist kleiner als ", klarzahl, "+1")