Sto leggendo Python Programming di John Zelle e sono bloccato su uno degli esercizi mostrati nella foto qui sotto.Python Beginner - Come equiparare una linea di regressione da clic e visualizzare graficamente?
È possibile visualizzare il mio codice qui sotto. So che il codice è molto brutto. (Eventuali suggerimenti sono apprezzati)
Ecco il mio codice finora:
from graphics import *
def regression():
# creating the window for the regression line
win = GraphWin("Regression Line - Start Clicking!", 500, 500)
win.setCoords(0.0, 0.0, 10.0, 10.0)
rect = Rectangle(Point(0.5, 0.1), Point(2.5, 2.1))
rect.setFill("red")
rect.draw(win)
Text(rect.getCenter(), "Done").draw(win)
message = Text(Point(5, 0.5), "Click in this screen")
message.draw(win)
points = [] # list of points
n = 0 # count variable
sumX = 0
sumY = 0
while True:
p = win.getMouse()
p.draw(win)
# if user clicks in a red square it exits the loop and calculates the regression line
if (p.getX() >= 0.5 and p.getX() <= 2.5) and (p.getY() >= 0.1 and p.getY() <= 2.1):
break
n += 1 # count of the points
# get the sum of the X and Y points
sumX = sumX + p.getX()
sumY = sumY + p.getY()
# tuple of the X and Y points
dot = (p.getX(), p.getY())
points.append(dot)
avgX = sumX/n
avgY = sumY/n
top = 0
bottom = 0
# my ugly attempt at the regression equation shown in the book
for i in points:
gp = 0
numer = points[gp][0] * points[gp][1]
top = top + numer
denom = points[gp][0] ** 2
bottom = bottom + denom
gp += 1
m = (top - sumX * sumY)/(bottom - sumX ** 2)
y1 = avgY + m * (0.0 - avgX)
y2 = avgY + m * (10.0 - avgX)
regressionline = Line(Point(0, y1), Point(10.0, y2))
regressionline.draw(win)
raw_input("Press <Enter> to quit.")
win.close()
regression()
Quando eseguo il programma della retta di regressione non sembra essere la vera linea di best fit. Credo di interpretare l'equazione di regressione in modo errato nel mio codice. Cosa deve essere cambiato per ottenere la corretta linea di regressione?
Questa è la mia prima domanda SO. Fammi sapere se dovrei chiedere questo in modo diverso o includere più/meno informazioni.Il codice è troppo lungo per essere citato direttamente nella domanda? – TyShi
Se riesci a stabilire quale sezione di codice di cui sei sicuro sia responsabile, potrebbe avere senso includere solo quella sezione; ma questo non è _ribribile_. Ho ruotato l'immagine e l'ho inclusa in linea per renderla più facile da leggere, il che sarebbe stato bello, ma probabilmente impossibile per qualcuno così nuovo. (Benvenuti in SO. :) – sarnold
Sarebbe bello se l'immagine fosse convertita in testo, ma Stack Overflow supporta la matematica nel modo in cui math.se lo fa? –