python-281Đọc toàn bộ đề miễn phí

Hồi quy tuyến tính một biến bằng công thức bình phương nhỏ nhất

Hồi quy tuyến tính là mô hình học máy đầu tiên của hầu hết mọi người. Với một đặc trưng

PythonCơ bản15 phút

Tiến độ của tôi ở bài này

Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

machine-learninglinear-regressionnumpyentry-ramp

Kiến thức tiên quyết: python-basics, numpy-axis-reduction.

Nội dung đề bài

Mô tả bài toán

Hồi quy tuyến tính là mô hình học máy đầu tiên của hầu hết mọi người. Với một đặc trưng duy nhất, nghiệm tối ưu có công thức đóng, nên bài này kiểm tra xem bạn có tính đúng độ dốc và tung độ gốc từ dữ liệu nhỏ hay không.

Yêu cầu

Viết hàm fit_linear_regression(x, y) trả về dict {"slope": ..., "intercept": ...} của đường thẳng y = slope * x + intercept khớp dữ liệu theo bình phương nhỏ nhất. Gọi x_bar và y_bar là trung bình của hai cột:

  • slope = sum((xi - xbar) * (yi - ybar)) / sum((xi - xbar)2)
  • intercept = y_bar - slope * x_bar

Quy ước nộp bài

Nộp hàm fit_linear_regression trong solution.py. Hệ thống gọi hàm trực tiếp với hai đối số theo tên và so giá trị trả về với sai số 1e-6; không đọc dữ liệu từ stdin và không in ra stdout.

Input

  • x: danh sách giá trị của đặc trưng, từ 2 đến 20 phần tử.
  • y: danh sách giá trị mục tiêu, cùng độ dài với x, không phải đường thẳng đứng

(phương sai của x khác 0).

Output

Dict {"slope": số thực, "intercept": số thực}, giữ đủ độ chính xác của số thực.

Ràng buộc

  • Dùng công thức theo độ lệch so với trung bình; không dùng sum(x) * sum(y).
  • Không làm tròn kết quả; hệ thống so với sai số 1e-6.
  • Mẫu số luôn khác 0 với dữ liệu kiểm tra, nên không cần chặn chia cho 0.

Ví dụ 1

Input

fit_linear_regression(x=[1, 2, 3], y=[3, 5, 7])

Output

{"slope": 2.0, "intercept": 1.0}

Ví dụ 2

Input

fit_linear_regression(x=[0, 1, 2, 3], y=[1, 1, 3, 5])

Output

{"slope": 1.4, "intercept": 0.4}

Giải thích

Với x = [1, 2, 3] và y = [3, 5, 7]: xbar = 2, ybar = 5, sum((xi - 2) * (yi - 5)) = (-1)(-2) + 0 + (1)(2) = 4, sum((xi - 2)2) = 2, nên slope = 4 / 2 = 2.0 và intercept = 5 - 2 * 2 = 1.0.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.

Nhóm Zalo