Entropie Code verstehen

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Joey21
Beiträge: 7
Registriert: Sa Feb 03, 2018 1:55 pm

Entropie Code verstehen

Beitrag von Joey21 » Sa Feb 03, 2018 2:08 pm

Hallo Leute,
ENTROPIE VON SHANNON
bin ziemlich neu in R und auch im Forum, daher mal Servus an alle Mitglieder :D
Ich hab ein Code welches ich zu verstehen , versuche.... Leider nicht mit sehr viel Erfolg.
Ich versuch das Code in R in Python zu übersetzen.

Code: Alles auswählen

#Integrationsgewichte
me.G5 = read.csv('xxxx.csv',sep=';',header=FALSE)[,2:3]
me.x = me.G5[,1]
me.w = me.G5[,2]
int.x = c((me.x/2+.5)*0.1,0.1+(me.x/2+.5)*0.9,1+(me.x/2+.5)*9,10+(me.x/2+.5)*90,100+(me.x/2+.5)*900)
int.w = c(me.w*0.1/2,me.w*.9/2,me.w*9/2,me.w*90/2,me.w*900/2)

# Entropie nach Shannon

### pdf
me.pdf= function(MF,l) {
		pdf = function(x){
				X= matrix(NaN,length(x),length(l))
				for(i in 1:length(l)) X[,i]	= MF[[i]](x)
				exp(l%*%t(X))
			}
		pdf
	}
### l
me.l	= function(MF,mt,sv=NA,tol=1e-10) {
		V	= mt[2:length(mt)]
		if(is.na(sv[1])) l	= rep(0,length(V)) else l = sv[-1]		
		X	= matrix(NaN,length(int.x),length(l))
		for(i in 2:length(MF)) X[,i-1]= MF[[i]](int.x)
		run	= 0;sig	= 1
		while((max(abs(sig))>tol)&(run<40)) {
				m1= as.vector(exp(l%*%t(X))*int.w)
				g= m1%*%t(t(X)-V)
				G= (t(X)-V)%*%(m1*t(t(X)-V))
				sig= solve(G,-t(g))
				l= l + sig
				l= as.vector(l)
				run	= run +1			
			}
		m1= as.vector(exp(l%*%t(X))*int.w)
		l0= -log(sum(m1))
		c(l0,l)	
	}
ANSÄTZE:
für Integrationsgewichte:
1: lies Datei ein und schon bei me.G5 weiss ich nicht so reicht was me. bedeuten soll

pdf:
zu pdf dachte ich immer dass es die Speicherung auf PDF wäre, aber anscheinend doch nicht ,oder ?
X= matrix(NaN,..) -> initialisiere die Matrix ABER WIESO MIT NaN ????
for(i in 1:....) -> mit der Zeile kann ich kaum was anfangen (PEINLICH)

l:
da hört es komplett auf , ich weiß ungefähr dass die while-Schleife einen Gradientenabstieg beinhaltet



Bevor ich überhaupt die Frage stelle , habe ich schon mir einiges angeschaut und auch einzelne Schritte auch grob verstanden , leider fehlt mir das Verständnis vom ganzen um es in Python Umsätzen zu können

Ich hoffe auf konstruktive Hilfe :D

Benutzeravatar
EDi
Beiträge: 692
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Entropie Code verstehen

Beitrag von EDi » Sa Feb 03, 2018 9:19 pm

um es in Python Umsätzen zu können
schau dir mal rpy2 an...
pdf:
zu pdf dachte ich immer dass es die Speicherung auf PDF
PDF steht hier nicht für Portable Document Format...
for(i in 1:....) -> mit der Zeile kann ich kaum was anfangen
Ist eine For-Schleife, gibt es auch in Python...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.

Joey21
Beiträge: 7
Registriert: Sa Feb 03, 2018 1:55 pm

Re: Entropie Code verstehen

Beitrag von Joey21 » Mo Feb 05, 2018 11:23 am

Danke :D

Aber ich verstehe immer noch nicht , bspw was dieses me. bedeuten soll ?!

me.x = me.G5[,1]

me.pdf = function(MF,l) {

bigben
Beiträge: 720
Registriert: Mi Okt 12, 2016 9:09 am

Re: Entropie Code verstehen

Beitrag von bigben » Mo Feb 05, 2018 4:06 pm

Hallo joey,

me.x, me.G5 und me.pdf sind drei verschiedene Variablennamen. Es ist nicht ein Obekt me von dem drei verschiedene Methoden aufgerufen werden, sondern es sind drei verschiedene Variablen. Wenn Du von einer in die andere Sprache übersetzen willst, musst Du beide Sprachen lernen. R ist nicht Python mit geschweiften Klammern.

Zum Thema PDF: Auch die Statistik hat ihre eigene Fachsprache. Lies mal https://en.wikipedia.org/wiki/Probabili ... y_function

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

bigben
Beiträge: 720
Registriert: Mi Okt 12, 2016 9:09 am

Re: Entropie Code verstehen

Beitrag von bigben » Mo Feb 05, 2018 4:12 pm

EDi hat geschrieben:
Sa Feb 03, 2018 9:19 pm
for(i in 1:....) -> mit der Zeile kann ich kaum was anfangen
Ist eine For-Schleife, gibt es auch in Python...

Code: Alles auswählen

for(i in 2:length(MF))
müsste wohl so etwas sein wie

Code: Alles auswählen

for i in range(2, 1+MF.length()):
oder so ähnlich (mein Python ist deutlich eingerostet).

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Joey21
Beiträge: 7
Registriert: Sa Feb 03, 2018 1:55 pm

Re: Entropie Code verstehen

Beitrag von Joey21 » Mo Feb 05, 2018 6:38 pm

Hey Bernhard,
lieben danke für die freundliche Hilfe :)
Hast mir echt viel weiter geholfen .

Jetzt ergibt auch einiges mehr Sinn 8-)

Zum Beispiel

Code: Alles auswählen

me.x = me.G5[,1] 

ist die erste Spalte von der Datei , welches wir auch bspw in der pdf Funktion

Code: Alles auswählen

X= matrix(NaN,length(x),length(l)) 
hier verwenden , wenn ich nicht so daneben liege.

Und die Zeile

Code: Alles auswählen

int.x = c((me.x/2+.5)*0.1,0.1+(me.x/2+.5)*0.9,1+(me.x/2+.5)*9,10+(me.x/2+.5)*90,100+(me.x/2+.5)*900)
wäre ein intervall von 0 bis 1000
welches hier zum Einsatz kommt

Code: Alles auswählen

for(i in 2:length(MF)) X[,i-1]= MF[[i]](int.x)
Dann würde die Zeile

Code: Alles auswählen

for(i in 1:length(l)) X[,i]	= MF[[i]](x)
in Python so aussehen

Code: Alles auswählen

for i in range(1, l.length()):
		X[:1] = MF[i](x)
Dann gibt es die Zeilen , die ich schwer nachvollziehen kann obwohl ich jetzt einiges Tutorials mir angeschaut habe:

-

Code: Alles auswählen

V= mt[2:length(mt)] 
??????

-

Code: Alles auswählen

if(is.na(sv[1])) l= rep(0,length(V)) else l = sv[-1]
Die Zeile würde ich ungefähr so deuten ....

Code: Alles auswählen

if(is.na(sv[1])):
		l= gibt die länge V Wiederholungen des Elements 0 zurück 
		else :
		l = sv[-1]
-

Code: Alles auswählen

c(l0,l)

Bei der letzten Zeile ist eigentlich nicht schwer, bedeutet eigentlich nichts anderes als, dass man l0 und l zu einem zusammenfügt , aber was wäre dann der Rückgabewert ? :/

bigben
Beiträge: 720
Registriert: Mi Okt 12, 2016 9:09 am

Re: Entropie Code verstehen

Beitrag von bigben » Mo Feb 05, 2018 8:04 pm

Joey21 hat geschrieben:
Mo Feb 05, 2018 6:38 pm
Zum Beispiel

Code: Alles auswählen

me.x = me.G5[,1] 

ist die erste Spalte von der Datei ,
Nein, ist es nicht. Es ist die erste Spalte von me.G5, was wiederum aus der 2. und 3. Spalte der Datei besteht. Es ist also die 2. Spalte der Datei.
Dann würde die Zeile

Code: Alles auswählen

for(i in 1:length(l)) X[,i]	= MF[[i]](x)
in Python so aussehen

Code: Alles auswählen

for i in range(1, l.length()):
		X[:1] = MF[i](x)
Nein, denn 1:length(l) kommt zu einem anderen Ergebnis als range(1, l.length()). Du kannst ja entweder meinen Post von oben nochmal genauer lesen, oder Du machst in der Python-REPL mal

Code: Alles auswählen

for i in range(1,10):
    print(i)
und in der R Console mal

Code: Alles auswählen

print(1:10)
Dann merkst Du, dass die Sprachen nicht nur unterschiedliche Syntax haben, sondern auch eine unterschiedliche Denkweise haben.
Dann gibt es die Zeilen , die ich schwer nachvollziehen kann obwohl ich jetzt einiges Tutorials mir angeschaut habe:
Du hast sie Dir entweder sehr oberflächlich angeschaut oder sie waren sehr kurz, wenn Du die Funktion c dabei nicht kennen gelernt hast, nach der Du kurz danach fragst.

Code: Alles auswählen

V= mt[2:length(mt)] 
V ist mt, nur dass das erste Element von mt weggelassen wird.

Code: Alles auswählen

if(is.na(sv[1])):
		l= gibt die länge V Wiederholungen des Elements 0 zurück 
		else :
		l = sv[-1]
Deine Erklärung für l könnte Stimmen, ich weiß aber nicht, ob ich sie auf Deutsch richtig verstehe. Das is.na muss mal halt im Kontext entscheiden, ob man das mit isnull() oder == numpy.nan darstellen will hängt davon ab, ob man sich auf pandas oder numpy stützen möchte. Im Übrigen denke ich, dass Du Dir für diese Einrückung einen Syntax Error einfängst.

Code: Alles auswählen

c(l0,l)

Bei der letzten Zeile ist eigentlich nicht schwer, bedeutet eigentlich nichts anderes als, dass man l0 und l zu einem zusammenfügt , aber was wäre dann der Rückgabewert ? :/
Da werden wahrscheinlich die Vektoren l0 und l zu einem gemeinsamen Vektor zusammengefügt.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

jogo
Beiträge: 1018
Registriert: Fr Okt 07, 2016 8:25 am

Re: Entropie Code verstehen

Beitrag von jogo » Di Feb 06, 2018 8:50 am

Hallo Joey,

nur als Randbemerkung:
es gibt ein Paket ineq, in dem Funktionen zur Berechnung verschiedener Konzentrationmaße enthalten sind - darunter auch die Entropie nach Shannon.
https://cran.r-project.org/web/packages/ineq/index.html

Deinen Quelltext habe ich mir allerdings nicht intensiv angeschaut - dafür war er einfach zu lang und schaute ziemlich verquast aus.
Deshalb kann ich nicht beurteilen, was Du eigentlich mit Deinem Quelltext berechnen willst, und ob dabei die Funktionen aus dem Paket ineq nützlich sind.
Aus meinen 37 Jahren Programmiererfahrung hat sich bei mir die Einstellung geprägt, dass es oft besser ist, komplett neu zu programmieren als von einer Programmiersprache in eine andere zu übersetzen.

Gruß, Jörg

Joey21
Beiträge: 7
Registriert: Sa Feb 03, 2018 1:55 pm

Re: Entropie Code verstehen

Beitrag von Joey21 » Di Feb 06, 2018 11:04 am

Okay, werde ich mir gleich mal anschauen.
Vielen lieben Dank Jörg und Bernhard

Bei der nächsten Übersetzung , werde ich definitiv komplett was neues Programmieren .
Der Aufwand sonst wäre wieder viel zu groß :cry:

Also ich saß jetzt mal paar Stunden daran und denke mal dass die erste Funktion klappen müsste, obwohl ich für die zweifache Klammer noch nicht sicher bin ob es in Python einfach mit einer Klammer machbar wäre :/

Was mir aber extreme Kopfschmerzen bereitet und ich echt nicht weiter komme ist die if Angelegenheit
if(is.na(sv[1])) l= rep(0,length(V)) else l = sv[-1]
Das raubt mir den Schlaf :D

jogo
Beiträge: 1018
Registriert: Fr Okt 07, 2016 8:25 am

Re: Entropie Code verstehen

Beitrag von jogo » Di Feb 06, 2018 11:37 am

Joey21 hat geschrieben:
Di Feb 06, 2018 11:04 am
Was mir aber extreme Kopfschmerzen bereitet und ich echt nicht weiter komme ist die if Angelegenheit
if(is.na(sv[1])) l= rep(0,length(V)) else l = sv[-1]
Das raubt mir den Schlaf :D
Ich versuche das mal die Zeile in eine Beschreibung des Algorithmus zu übersetzen:
Es soll ein Vektor l konstruiert werden.
Wenn das erste Element in sv NA ist, dann soll l ein Vektor mit lauter Nullen sein - Länge genauso wie der Vektor V.
(hier hätte man auch l <- numeric(length(V))) schreiben können.
Jetzt noch der andere Fall (das erste Element in sv ist nicht NA): dann soll l gesetzt werden als der Vektor sv ohne das erste Element. (hier hätte man auch l <- tail(sv, -1) schreiben können).
Für eine schnelle Übersicht über die grundlegenden Funktionen schau bitte hier: viewtopic.php?f=20&t=27&p=2622#p107

Gruß, Jörg

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste