2013-10-04 16 views
6

Ich bin ein Anfänger sowohl mit Python als auch mit all seinen Bibliotheken. Aber ich habe es geschafft, ein kleines Programm zu machen, das wie beabsichtigt funktioniert. Es dauert eine Zeichenfolge, zählt das Vorkommen der verschiedenen Buchstaben und zeichnet sie in einem Diagramm und wendet dann eine Gleichung und ihre Kurve an. Jetzt möchte ich den r-Quadrat-Wert der Anpassung erhalten.Den r-Quadrat-Wert mit curve_fit erhalten

Die allgemeine Idee ist es, verschiedene Arten von Text aus Artikeln auf verschiedenen Ebenen zu vergleichen und zu sehen, wie stark das Gesamtmuster ist.

Ist nur ein excersise und ich bin neu, also eine einfach zu verstehende Antwort wäre genial.

Der Code ist:

import numpy as np 
import math 
import matplotlib.pyplot as plt 
from matplotlib.pylab import figure, show 
from scipy.optimize import curve_fit 

s="""det, og deres undersøgelse af hvor meget det bliver brugt viser, at der kun er seks plugins, som benyttes af mere end 5 % af Chrome-brugere. 
Problemet med teknologien er, at den ivivuilv rduyd iytf ouyf ouy yg oyuf yd iyt erzypu zhrpyh dfgopaehr poargi ah pargoh ertao gehorg aeophgrpaoghraprbpaenbtibaeriber en af hovedårsagerne til sikkerhedshuller, ustabilitet og deciderede nedbrud af browseren. 
Der vil ikke bve lukket for API'et ivivuilv rduyd iytf ouyf ouy yg oyuf yd iyt erzypu zhrpyh dfgopaehr poargi ah pargoh ertao gehorg aeophgrpaoghraprbpaenbtibaeriber en af hovedårsagerne til sikkerhedshuller, ustabilitet og deciderede nedbrud af browseren. 
Der vil ikke blive lukket for API'et på én gang, men det vil blive udfaset i løbet af et års tid. De mest populære plugins får lov at fungere i udfasningsperioden; Det drejer sig om: Silverlight (anvendt af 15 % af Chrome-brugere sidste måned), Unity (9,1 %), Google Earth (9,1 %), Java (8,9%), Google Talk (8,7 %) og Facebook Video (6,0 %). 
Det er muligt at hvidliste andre plugins, men i slutningen af 2014 forventer udviklerne helt at lukke for brugen af dem.""" 
fordel=[] 
alf=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','æ','ø','å'] 
i=1 
p=0 
fig = figure() 
ax1 = fig.add_subplot(1,2,0) 
for i in range(len(alf)): 
    fordel.append(s.count(alf[i])) 
    i=i+1 
fordel=sorted(fordel,key=int,reverse=True) 
yFit=fordel 
xFit=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28] 
def func(x, a, b): 
    return a * (b ** x) 
popt, pcov = curve_fit(func, xFit, yFit) 
t = np.arange(0.0, 30.0, 0.1) 
a=popt[0] 
b=popt[1] 
s = (a*b**t) 
ax1.plot(t,s) 
print(popt) 
yMax=math.ceil(fordel[0]+5) 
ax1.axis([0,30,0,yMax]) 
for i in range(0,int(len(alf))*2,2): 
    fordel.insert(i,p) 
    p=p+1 
for i in range(0,int(len(fordel)/2)): 
    ax1.scatter(fordel[0],fordel[1]) 
    fordel.pop(0) 
    fordel.pop(0) 
plt.show() 
show() 

Antwort

15

Computing r_squared:

Der r_squared Wert gefunden werden kann, die bedeuten (mean) unter Verwendung der Gesamtsumme der Quadrate (ss_tot), und die Restsumme der Quadrate (ss_res). Jede ist definiert als:

mean

SStot

SSres

rsquared

wo f_i ist der Funktionswert bei Punkt x_i. Genommen von Wikipedia.

Von scipy.optimize.curve_fit():

  • Sie die Parameter erhalten können (popt) von curve_fit() mit

    popt, pcov = curve_fit(f, xdata, ydata)

  • Sie können die Restsumme der Quadrate erhalten (ss_tot) mit

    • residuals = ydata- f(xdata, popt)
    • ss_res = numpy.sum(residuals**2)
  • Sie können die Gesamtsumme der Quadrate erhalten (ss_tot) mit

    ss_tot = numpy.sum((ydata-numpy.mean(ydata))**2)

  • Und schließlich die r_squared -Wertes mit,

    r_squared = 1 - (ss_res/ss_tot)

+0

OFC! Glänzende Antwort. Aus irgendeinem Grund habe ich nicht darüber nachgedacht, es selbst zu berechnen, obwohl es ziemlich geradlinig scheint. Vielen Dank. – Mathias

Verwandte Themen