Tôi đang đọc Lập trình Python của John Zelle và tôi bị kẹt trên một bài tập được hiển thị trong hình bên dưới.Người mới bắt đầu bằng Python - Làm cách nào để đánh giá đường hồi qui từ các nhấp chuột và hiển thị đồ họa?
Bạn có thể xem mã của mình bên dưới. Tôi biết mã rất xấu. (Bất cứ lời khuyên được đánh giá cao)
Dưới đây là mã của tôi cho đến nay:
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()
Khi tôi chạy chương trình đường hồi quy không bao giờ dường như là dòng thực sự của phù hợp nhất. Tôi tin rằng tôi đang giải thích phương trình hồi quy không chính xác trong mã của tôi. Những gì cần phải được thay đổi để có được đường hồi quy chính xác?
Đây là lần đầu tiên SO câu hỏi của tôi. Hãy cho tôi biết nếu tôi nên hỏi điều này một cách khác nhau hoặc bao gồm thông tin nhiều hơn/ít hơn.Mã có quá dài để trích dẫn trực tiếp trong câu hỏi không? – TyShi
Nếu bạn có thể xác định phần nào của mã mà bạn tự tin chịu trách nhiệm, có thể có ý nghĩa khi chỉ bao gồm phần đó; nhưng điều này không phải là _horrible_. Tôi đã xoay hình ảnh và đưa nó vào nội tuyến để giúp bạn dễ đọc hơn - điều này sẽ rất hay, nhưng có lẽ không thể cho một người mới. (Chào mừng bạn đến SO. :) – sarnold
Sẽ tốt nếu hình ảnh được chuyển thành văn bản, nhưng Stack Overflow có hỗ trợ toán học theo cách math.se không? –