2013-10-04 8 views
6

Sono un principiante sia con Python che con tutte le sue librerie. Ma sono riuscito a realizzare un piccolo programma che funziona come previsto. Prende una stringa, conta l'occorrenza delle diverse lettere e le traccia in un grafico e quindi applica un'equazione e la sua curva. ' Ora vorrei ottenere il valore r-quadrato della misura.Ottenere il valore r-quadrato usando il curva_fit

L'idea generale è quella di confrontare diversi tipi di testo da articoli su diversi livelli e vedere quanto è forte il modello generale.

È solo un excersise e io sono nuovo, quindi una risposta facile da capire sarebbe fantastica.

Il codice è:

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() 

risposta

15

Computing r_squared:

Il valore r_squared può essere trovato utilizzando il significa (mean), la somma totale dei quadrati (ss_tot), e la somma residua dei quadrati (ss_res). Ciascuno è definito come:

mean

SStot

SSres

rsquared

dove f_i è il valore della funzione nel punto x_i. Tratto da Wikipedia.

Da scipy.optimize.curve_fit():

  • è possibile ottenere i parametri (popt) da curve_fit() con

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

  • È possibile ottenere il somma residua dei quadrati (ss_tot) con

    • residuals = ydata- f(xdata, popt)
    • ss_res = numpy.sum(residuals**2)
  • è possibile ottenere il somma dei quadrati totale (ss_tot) con

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

  • E, infine, il r_squared -value con,

    r_squared = 1 - (ss_res/ss_tot)

+0

OFC! Risposta brillante Per qualche ragione non ho considerato di calcolarlo da solo, anche se sembra piuttosto semplice. Grazie. – Mathias

Problemi correlati