Entropie Code verstehen

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

Moderatoren: EDi, jogo

Joey21

Entropie Code verstehen

Beitrag von Joey21 »

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: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Entropie Code verstehen

Beitrag von EDi »

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

Re: Entropie Code verstehen

Beitrag von Joey21 »

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: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Entropie Code verstehen

Beitrag von bigben »

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: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Entropie Code verstehen

Beitrag von bigben »

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

Re: Entropie Code verstehen

Beitrag von Joey21 »

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: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Entropie Code verstehen

Beitrag von bigben »

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: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Entropie Code verstehen

Beitrag von jogo »

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

Re: Entropie Code verstehen

Beitrag von Joey21 »

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: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Entropie Code verstehen

Beitrag von jogo »

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