Neuronale Netze und der goldene Schnitt: zweiter Lauf

Ich habe einmal einen Artikel geschrieben, in dem ich ein einfaches mathematisches Modell der Entwicklung eines neuronalen Netzwerks und seiner Auswahl für die Addition von Zahlen in Zahlensystemen mit Basis 2 und goldenem Schnitt beschrieben habe. Dabei stellte sich heraus, dass der goldene Schnitt besser funktioniert. Meine erste Erfahrung erwies sich als sehr schlecht, da ich einige wichtige Nuancen nicht berücksichtigte, die damit zusammenhängen, dass der Fehler nicht für ein Neuron, sondern für ein bisschen Information berücksichtigt werden sollte. Deshalb beschloss ich, mein Experiment zu verbessern und einige weitere vorzustellen Anpassungen.

  1. Ich entschied mich, 100 Probenpaare von 15 (Trainingsprobe) und 1000 (Testprobe) Vektoren in Zahlensystemen mit gleichmäßig verteilten Basen von 1,2 bis 2 anstelle von zwei bisher bekannten Basen zu überprüfen.
  2. Ich habe auch eine lineare Regression nicht nur vom Abstand von der Basis zum Goldenen Schnitt, sondern auch von der Basis selbst, der Anzahl der Koordinaten im Vektor und dem Durchschnittswert der Koordinate im Antwortvektor, durchgeführt, um die nichtlineare Abhängigkeit des Fehlers von der Basis zu berücksichtigen.
  3. Ich habe auch einige Stichproben nach dem Kolmogorov-Smirnov-Kriterium (ANOVe) auf Normalität überprüft, aber diese Kriterien haben gezeigt, dass die Stichproben höchstwahrscheinlich vom Gaußschen abweichen, sodass ich mich für eine gewichtete lineare Regression anstelle der üblichen entschieden habe. Die ANOVA zeigte zwar etwas weniger F als zuvor (im Bereich von 700-800 statt 800-900), das Ergebnis blieb jedoch mehr als statistisch signifikant, was bedeutet, dass mehr Tests durchgeführt werden sollten. Bei diesen Tests habe ich ein Histogramm der Verteilungsdichte der Regressionsreste und des normalen QQ erstellt - ein Diagramm der Verteilungsfunktion dieser Reste.

Diese beiden Grafiken sind:

Bild

Bild

Wie zu sehen ist, ist, obwohl die Abweichung von der Normalverteilung in der Verteilung der Reste statistisch signifikant ist (und auf der linken Seite ist sogar eine kleine zweite Mode im Histogramm sichtbar), es tatsächlich sehr nahe am Gaußschen, daher ist es möglich (mit Vorsicht und größeren Konfidenzintervallen), sich auf diese lineare Regression zu verlassen .

Nun darüber, wie ich Samples zum Testen neuronaler Netze über diese generiert habe.
Hier ist der Code zum Generieren der Beispiele:
#define _CRT_RAND_S //     rand_s() #include "main.h" //   (    ) int main(void) { FILE *output,*test; int i; while (fopen("test.txt","w")==NULL) i=0; output=fopen("test.txt","w"); //       unsigned int p; p=0;//       rand_s(); rand_s(&p); double a; a=0; a = 1.6+((double) ((double) ((double)p/UINT_MAX)-0.5)*0.8);//    int n; n=0;//     . bool *t;//         . while (malloc(sizeof(bool)*1000)==NULL) n=0; t = (bool *) malloc(sizeof(bool)*1000); rand_s(&p); double s; s=0; s = (double)p/UINT_MAX;//    0  1. calculus(a,s,t,1000);// s  a-  . double mu; int q; mu=0; q=0; for (i=0;i<1000;i++) { if ((*(t+i))==true) mu =(double) mu+1; }//     , . . ,     . mu=(double) mu/1000; printf("%10.9lf\n",mu); n = (int) ((double) 14)/(log(mu)*mu/(log((double) 1/2))+log((double) 1-mu)*(1-mu)/log((double) 1/2)); //   ,     14    a-  . printf("%i\n",n); free(t); while (malloc(sizeof(bool)*n)==NULL) i=0; t = (bool *) malloc(n*sizeof(bool));//     ,      . double x,y,z; x=0; y=0; z=0; int j; j=0; int m; m=0; m=2*n; fprintf(output,"%i 1000\n",m);//         -. fprintf(output,"%lf\n",a); //    for (i=0;i<1000;i++) {//     ,  ,     ,   -  . rand_s(&p); x = (double) p/UINT_MAX; rand_s(&p); y = (double) p/UINT_MAX; z=x+y; calculus(a,x,t,n); for (j=0;j<n;j++) { if ((*(t+j))==true) fprintf(output,"1 "); else fprintf(output,"0 "); } calculus(a,y,t,n); for (j=0;j<n;j++) { if ((*(t+j))==true) fprintf(output,"1 "); else fprintf(output,"0 "); } fprintf(output,"\n"); calculus(a,z,t,n); for (j=0;j<n;j++) { if ((*(t+j))==true) fprintf(output,"1 "); else fprintf(output,"0 "); } for (j=0;j<n;j++) { fprintf(output,"0 "); } fprintf(output,"\n"); } //    ,     ,    15  . while (fopen("input.txt","w")==NULL) i=0; test = fopen("input.txt","w"); fprintf(test,"%i 15\n",m); fprintf(test,"%lf\n",a); for (i=0;i<15;i++) { rand_s(&p); x = (double) p/UINT_MAX; rand_s(&p); y = (double) p/UINT_MAX; z=x+y; calculus(a,x,t,n); for (j=0;j<n;j++) { if ((*(t+j))==true) fprintf(test,"1 "); else fprintf(test,"0 "); } calculus(a,y,t,n); for (j=0;j<n;j++) { if ((*(t+j))==true) fprintf(test,"1 "); else fprintf(test,"0 "); } fprintf(test,"\n"); calculus(a,z,t,n); for (j=0;j<n;j++) { if ((*(t+j))==true) fprintf(test,"1 "); else fprintf(test,"0 "); } for (j=0;j<n;j++){ fprintf(test,"0 "); } fprintf(test,"\n"); } free(t); fclose(output); fclose(test); }; 



Und hier ist der Header-Datei-Code:
 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void); void calculus(double a, double x, bool *t, int n);//     x   a   t  n . void calculus(double a, double x, bool *t, int n) { int i,m,l; double b,y; b=0; m=0; l=0; b=1; int k; k=0; i=0; y=0; y=x; //  t   . for (i=0;i<n;i++) { (*(t+i))=false; } k=((int) (log((double)2))/(log(a)))+1;//    ,   . while ((l<=k-1)&&(m<nk-1)) //  x  a ( ),      { m=0; if (y>1) { b=1; l=0; while ((b*a<y)&&(l<=k-1)) { b=b*a; l++; } if (b<y) { y=yb; (*(t+kl))=true; } } else { b=1; m=0; while ((b>y)&&(m<nk-1)) { b=b/a; m++; } if ((b<y)||(m<nk-1)) { y=yb; (*(t+k+m))=true; } } } return; } 



Ich habe auch beschlossen, den vollständigen Code des neuronalen Netzes zu posten:
 #include "main.h" //    ,   ,       main(void). int main(void) { FILE *input, *output, *test; int i,j,k,k1,k2,l,q,n,m,r; double *x,*y,*z,*a,s,s1,h,h1,d,mu,buffer; d=0; mu=0; r=0; unsigned int p; n=0; while (fopen("input.txt","r")==NULL) i=0; while (fopen("output.txt","w")==NULL) i=0; input = fopen("input.txt","r"); output = fopen("output.txt","w"); fscanf(input,"%i %i",&n,&m);//      . buffer=0; fscanf(input,"%lf",&buffer);//        . while (malloc(sizeof(double)*n*m)==NULL) i=0; x = (double *) malloc(sizeof(double)*n*m);//     while (malloc(sizeof(double)*n*m)==NULL) i=0; z = (double *) malloc(sizeof(double)*n*m);//       . while (malloc(sizeof(double)*n*m)==NULL) i=0; y = (double *) malloc(sizeof(double)*n*m);//    . for (k=0;k<m;k++) { for (i=0;i<n;i++) { fscanf(input,"%lf ",x+n*k+i);// . } for (i=0;i<n;i++) { fscanf(input,"%lf ",y+n*k+i);// . } for (i=0;i<n;i++) { (*(z+n*k+i))=0;//       . } } while (malloc(sizeof(double)*n*n)==NULL) i=0; a = (double *) malloc(sizeof(double)*n*n); //    . for (i=0;i<n*n;i++) { (*(a+i))=0; } k1 = 0; k2 = 0; s=1; s1=0; s1=s+1; d=0; h=0; q=0; mu=1; while (((d-mu)*(d-mu)>0.01)||(q<10))// ,           ,     ,     -  . { s=0; for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } for (i=0;i<n;i++) { for (j=0;j<n;j++) { (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j));//     . } } for (i=0;i<n;i++) { s=s+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i)));//         } } r=0; s1=s+1; while ((s<s1)&&(r<100))//,                     . { r++; s1=0; for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } } //      rand_s(&p); k1 = (int) (p/((int) (UINT_MAX/n))); rand_s(&p); k2 = (int) (p/((int) (UINT_MAX/n))); rand_s(&p); //   h=((double) p/UINT_MAX)-0.5; h1=1; rand_s(&p); l=((int) ((double) p/UINT_MAX)*20); // ,           . for (i=0;i<l;i++) { h1=h1/10; } h=h*h1; //      . for (k=0;k<m;k++) { for (i=0;i<n;i++) { for (j=0;j<n;j++) { if ((i==k1)&&(j==k2)) (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j))+h*(*(x+k*n+j)); else (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } //        . for (i=0;i<n;i++) { s1=s1+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i))); } } } if (r<100) (*(a+k1*n+k2))=(*(a+k1*n+k2))+h; s1=0; d=0; for (k1=0;k1<n;k1++) { for (k2=0;k2<n;k2++) { for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } } for (k=0;k<m;k++) { for (i=0;i<n;i++) { for (j=0;j<n;j++) { if ((i==k1)&&(j==k2)) (*(z+k*n+i))=(*(z+k*n+i))+((*(a+i*n+j))+0.1)*(*(x+k*n+j)); else (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } } s1=0; for (k=0;k<m;k++) { for (i=0;i<n;i++) { s1=s1+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i))); } } d=d+(s1-s)*(s1-s)/(n*m); } } mu=mu*((double) q/(q+1))+((double) d/(q+1)); q=q+1; printf("%lf \n",mu); } for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } } //       . for (k=0;k<m;k++) { for (i=0;i<n;i++) { for (j=0;j<n;j++) { (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } } free(x); free(y); free(z); while (fopen("test.txt","r")==NULL) i=0; test = fopen("test.txt","r"); fscanf(test,"%i %i",&n,&m); fscanf(test,"%lf",&buffer); while (malloc(n*m*sizeof(double))==NULL) i=0; x = (double *) malloc(n*m*sizeof(double)); while (malloc(n*m*sizeof(double))==NULL) i=0; y = (double *) malloc(n*m*sizeof(double)); while (malloc(n*m*sizeof(double))==NULL) i=0; z = (double *) malloc(n*m*sizeof(double)); for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } } for (k=0;k<m;k++) { for (i=0;i<n;i++) { fscanf(test,"%lf ",x+k*n+i); } for (i=0;i<n;i++) { fscanf(test,"%lf ",y+k*n+i); } } //      (  ). mu=0; for (k=0;k<m;k++) { for (i=0;i<n;i++) { mu=mu+(*(y+k*n+i)); } } mu=mu/((double) k*n); fprintf(output,"%lf\n\n",mu); for (k=0;k<m;k++) { for (i=0;i<n;i++) { for (j=0;j<n;j++) { (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } } //     . for (k=0;k<m;k++) { s=0; for (i=0;i<n;i++) { s=s+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i))); } s=(double) s/n; s=sqrt(s); s=(double) ((double) s*n)/14; fprintf(output,"%20.18lf \n",s); } free(a); free(x); free(y); free(z); fclose(input); fclose(output); return 0; }; 


Lassen Sie uns als Nächstes darüber sprechen, wie ich eine gewichtete lineare Regression durchgeführt habe. Dazu habe ich einfach die Standardabweichungen der Ergebnisse des neuronalen Netzes berechnet und die Einheit in diese unterteilt.
Hier ist der Quellcode des Programms, mit dem ich das gemacht habe:
 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { int i; FILE *input,*output; while (fopen("input.txt","r")==NULL) i=0; input = fopen("input.txt","r");//         . double mu,sigma,*x; mu=0; sigma=0; while (malloc(1000*sizeof(double))==NULL) i=0; x = (double *) malloc(sizeof(double)*1000); fscanf(input,"%lf",&mu); mu=0; for (i=0;i<1000;i++) { fscanf(input,"%lf",x+i); } for (i=0;i<1000;i++) { mu = mu+(*(x+i)); } mu = mu/1000; while (fopen("WLS.txt","w") == NULL) i=0; output = fopen("WLS.txt","w"); for (i=0;i<1000;i++) { sigma = sigma + (mu - (*(x+i)))*(mu - (*(x+i))); } sigma = sigma/1000; sigma = sqrt(sigma); sigma = 1/sigma; fprintf(output,"%10.9lf\n",sigma); fclose(input); fclose(output); free(x); return 0; }; 


Als nächstes fügte ich die resultierenden Gewichte der Tabelle hinzu, in der ich alle als Ergebnis des Programms erhaltenen Daten sowie die Werte der Variablen zur Berechnung der Regression reduzierte und sie dann in JASP berechnete. Hier sind die Ergebnisse:

Ergebnisse

Lineare Regression

Modellzusammenfassung







Modell
R

Angepasster R²
Rmse
1
0,175
0,031
0,031
0,396


Anova







Modell

Summe der Quadrate
df
Mittleres Quadrat
F
p
1
Regression
494,334
4
123.584
789,273
<0,001
Rest
15657.122
99995
0,157

Total
16151.457
99999



Koeffizienten







Modell

Nicht standardisiert
Standardfehler
Standardisiert
t
p
0,5%
99,5%
1
(Abfangen)
-0,104
0,059
-1,751
0,080
-0,256
0,049
Der Abstand zwischen der Basis und dem goldenen Schnitt
-0,113
0,010
-0,080
-11,731
<0,001
-0,138
-0,088
Die Anzahl der Messungen im Vektor
0,008
2.328e -4
0,529
32.568
<0,001
0,007
0,008
Der Durchschnittswert der Vektorkoordinate in der Antwort
-0,951
0,181
-0,332
-5,255
<0,001
-1,417
-0,485
Basisnummernsystem
0,489
0,048
0,687
10,252
<0,001
0,366
0,611



Als nächstes habe ich ein Histogramm der Verteilungsdichte standardisierter Regressionsreste:
Bild
Sowie das normale Quantil-Quantil-Diagramm standardisierter Regressionsreste:
Bild
Dann habe ich die Durchschnittswerte der Regressionskoeffizienten, die in ihrem Verlauf erhalten wurden, auf die Variablen angewendet und meine statistische Analyse durchgeführt, um das wahrscheinlichste Minimum der Fehlerfunktion aus der Basis des Zahlensystems (wie sehr es mit diesen Variablen zusammenhängt) unter Verwendung von Fermats Lemma, Bayes-Theorem und Lagrange-Theorem zu finden wie folgt:
Tatsache ist, dass die Verteilung der Basen des Zahlensystems in der Stichprobe offensichtlich gleichmäßig war. Wenn also eine bestimmte Basis im Intervall (1,2; 2) das Minimum des mittleren quadratischen Fehlers ist, wird sie nach Fermats Lemma eine Nullableitung haben, dann die Wahrscheinlichkeitsdichte der Werte Die Funktion ist unendlich.
Nun zu meiner Anwendung des Bayes-Theorems. Ich habe die Konfidenzintervalle der Beta-Verteilung berechnet (dies ist die Wahrscheinlichkeitsverteilung von "Erfolg" im Experiment unter der Bedingung von n "Erfolgen" und m "Fehlern" mit Wahrscheinlichkeitsdichte p(x)= frac(n+m+1)!n!m!xn(1x)m) die Werte der Verteilungsfunktion (dies ist die Wahrscheinlichkeit, dass die Zufallsvariable nicht größer als das Argument ist) der berechneten Fehler, basierend auf der Tatsache, dass wenn die Zufallsvariable nicht größer als das Argument ist, es "Erfolg" ist und wenn es mehr ist, dann "Misserfolg". Dann wenden wir unter Verwendung des Bayes'schen Theorems die Beta-Verteilung der Verteilungsfunktion der berechneten Fehler an und berechnen die Konfidenzintervalle [Verteilungsfunktion] von 99% für jeden berechneten Fehler.
Wir kommen zum Satz von Lagrange. Das Lagrange-Theorem besagt, dass, wenn die Funktion f (x) im Intervall [a; b] kontinuierlich differenzierbar ist, mindestens an einem Punkt dieses Intervalls eine Ableitung gleich ist  fracf(b)f(a)ba. Wie wende ich diesen Satz an: Tatsache ist, dass die Wahrscheinlichkeitsdichte eine Ableitung der Verteilungsfunktion ist, also nehme ich den Maximalwert unter denjenigen, die es genau in einigen Intervallen vom minimalen Fehler bis zu den verbleibenden Fehlern dauert. Dann berechne ich die Konfidenzintervalle solcher Werte in 98% (unter Verwendung der Bonferroni-Korrektur) unter Verwendung der folgenden Formel:

[ fracF1(xi)F2(x1)xix1; fracF2(xi)F1(x1)xix1]


Dabei ist F1 das linke Ende des Konfidenzintervalls für die Verteilungsfunktion und F2 das rechte, x_i, x_1 sind die berechneten Fehler als Argument für die Verteilungsfunktion. Als nächstes sucht das Programm nach einem Intervall mit dem größten linken Ende und dem größten rechten Ende (so dass der Wert im Intervall maximal ist) und sucht dann nach dem Maximum und Minimum in den Basen, die den berechneten Fehlern in diesem Intervall entsprechen. Dieses Maximum und Minimum sind die Argumente der Fehlerfunktion von unten, zwischen denen das Minimum der Funktion selbst mit einer Wahrscheinlichkeit von 98% liegt.
Hier ist der Code des Programms, mit dem ich diese statistische Analyse mit Erläuterungen durchgeführt habe:
 #include "main.h" //  . int main(void) { FILE *input,*output; int i,n,k,dFmax; double *x,*y,*F1,*F2,*F,*dF,*dF1,*dF2,t1,t2,xmin,xmax,ymin,ymax; t1=0; t2=0; while ((input=fopen("input.txt","r"))==NULL) i=0; while ((output=fopen("output.txt","w"))==NULL) i=0; n=0; while (fscanf(input,"%i",&n)==NULL) i=0; while ((x = (double *) malloc(sizeof(double)*n))==NULL) //    . i=0; while ((y = (double *) malloc(sizeof(double)*n))==NULL) //  ,   . i=0; while ((F = (double *) malloc(sizeof(double)*n))==NULL) //   -   . i=0; while ((F1 = (double *) malloc(sizeof(double)*n))==NULL) //      -. i=0; while ((F2 = (double *) malloc(sizeof(double)*n))==NULL)//      -. i=0; for (i=0;i<n;i++) { while (fscanf(input,"%lf %lf",y+i,x+i)==NULL) k=0; } for (i=0;i<n;i++) { Bayesian_99CI(i,ni,*(F1+i),*(F2+i),*(F+i)); //     ,     (     ) printf("%lf %lf %lf\n",*(F+i),*(F1+i),*(F2+i)); } while ((dF = (double *) malloc(sizeof(double)*n))==NULL) i=0; while ((dF1 = (double *) malloc(sizeof(double)*n))==NULL) i=0; while ((dF2 = (double *) malloc(sizeof(double)*n))==NULL) i=0; for (i=0;i<n-1;i++) //  " -"     . { for (k=i+1;k<n;k++) { if ((*(y+k))<(*(y+i))) { t1=(*(x+i)); t2=(*(y+i)); (*(x+i))=(*(x+k)); (*(y+i))=(*(y+k)); (*(x+k))=t1; (*(y+k))=t2; } } } dFmax=1; //     98%   ,       1-  (i+1)-        : for (i=1;i<n;i++) { (*(dF2+i))=((*(F2+i))-(*(F1)))/((*(y+i))-(*(y))); (*(dF1+i))=((*(F1+i))-(*(F2)))/((*(y+i))-(*(y))); } for (i=1;i<n;i++) { if (((*(dF1+i))>(*(dF1+dFmax)))&&((*(dF2+i))>(*(dF2+dFmax)))) dFmax=i; } xmin=0; xmax=0; ymin=0; ymax=0; xmin=(*x); xmax=(*x); ymin=(*y); ymax=(*y); //  ,       ,    ,      : for (i=0;i<=dFmax;i++) { if ((*(x+i))>xmax) xmax=(*(x+i)); if ((*(x+i))<xmin) xmin=(*(x+i)); if ((*(y+i))>ymax) ymax=(*(y+i)); if ((*(y+i))<ymin) ymin=(*(y+i)); }     : fprintf(output,"x (- [%lf; %lf]\ny (- [%lf; %lf]",xmin,xmax,ymin,ymax); scanf("%i\n",&i); free(x); free(y); free(F); free(F1); free(F2); free(dF); free(dF1); free(dF2); fclose(input); fclose(output); return 0; }; 



Und hier ist der Header-Datei-Code:
 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void); double Bayesian(int n, int m, double x);//   -  n ""  m "",     "    "  "   " ,     : double Bayesian(int n, int m, double x) { double c; c=(double) 1; int i; i=0; for (i=1;i<=m;i++) { c = c*((double) (n+i)/i); } for (i=0;i<n;i++) { c = c*x; } for (i=0;i<m;i++) { c = c*(1-x); } c=(double) c*(n+m+1); return c; } double Bayesian_int(int n, int m, double x);//   - (      ): double Bayesian_int(int n, int m, double x) { double c; int i; c=(double) 0; i=0; for (i=0;i<=m;i++) { c = c+Bayesian(n+i+1,mi,x); } c = (double) c/(n+m+2); return c; } //        : void Bayesian_99CI(int n, int m, double &x1, double &x2, double &mu); void Bayesian_99CI(int n, int m, double &x1, double &x2, double &mu) { double y,y1,y2; y=(double) n/(n+m); int i; for (i=0;i<1000;i++) { y = y - (Bayesian_int(n,m,y)-0.5)/Bayesian(n,m,y); } mu = y; y=(double) n/(n+m); for (i=0;i<1000;i++) { y = y - (Bayesian_int(n,m,y)-0.995)/Bayesian(n,m,y); } x2=y; y=(double) n/(n+m); for (i=0;i<1000;i++) { y = y - (Bayesian_int(n,m,y)-0.005)/Bayesian(n,m,y); } x1=y; } 


Hier ist das Ergebnis der Arbeit dieses Programms, als ich ihr die Grundlagen des Zahlensystems und die Ergebnisse der Regression gab:

 x (- [1.501815; 1.663988] y (- [0.815782; 0.816937] 

("(-" ist in diesem Fall nur eine Notation des Zeichens "Gehört" zur Mengenlehre, und eckige Klammern geben das Intervall an.)

So hat sich für mich herausgestellt, dass die beste Basis des Zahlensystems hinsichtlich der geringsten Fehleranzahl bei der Informationsübertragung im Bereich von 1,501815 bis 1,663988 liegt, das heißt, der goldene Schnitt fällt vollständig hinein. Richtig, ich habe bei der Berechnung des Minimums eine und bei der Berechnung der Informationsmenge in verschiedenen Zahlensystemen eine weitere Annahme getroffen: Erstens habe ich angenommen, dass die Fehlerfunktion von der Basis kontinuierlich differenzierbar ist, und zweitens, dass die Wahrscheinlichkeit, dass die gleichmäßig verteilte Zahl von 1 ist, 2 bis 2 haben die Nummer eins in einer bestimmten Ziffer, sie ist nach einer Nachkommastelle ungefähr gleich.

Wenn ich etwas völlig falsch oder einfach falsch gemacht habe, bin ich offen für Kritik und Vorschläge. Ich hoffe dieser Versuch war erfolgreicher.
UPD Ich habe den Artikel zweimal bearbeitet, um einige Stellen im „rein wissenschaftlichen“ Teil zu verdeutlichen, und auch den Code formatiert.
UPD2. Nach Rücksprache mit einer Person, die mit Bioinformatik vertraut ist (Absolvent des Postgraduiertenstudiums an der FBB MSU am IPPI RAS), wurde beschlossen, das Wort „Gehirn“ durch „neuronales Netzwerk“ zu ersetzen, da sie sich stark unterscheiden.

Source: https://habr.com/ru/post/de480886/


All Articles