Sự khác biệt giữa OLS thống kê và hồi quy tuyến tính scikit


13

Tôi có một câu hỏi về hai phương pháp khác nhau từ các thư viện khác nhau dường như làm cùng một công việc. Tôi đang cố gắng để làm cho mô hình hồi quy tuyến tính.

Đây là mã mà tôi sử dụng thư viện statsmodel với OLS:

X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1)

x_train = sm.add_constant(X_train)
model = sm.OLS(y_train, x_train)
results = model.fit()

print "GFT + Wiki / GT  R-squared", results.rsquared

Điều này in ra GFT + Wiki / GT R-bình phương 0.981434611923

và cái thứ hai là scikit learn library Phương thức mô hình tuyến tính:

model = LinearRegression()
model.fit(X_train, y_train)

predictions = model.predict(X_test)

print 'GFT + Wiki / GT R-squared: %.4f' % model.score(X_test, y_test)

Điều này in ra GFT + Wiki / GT R-bình phương: 0,8543

Vì vậy, câu hỏi của tôi là cả hai phương pháp đều in kết quả R ^ 2 của chúng tôi nhưng một phương pháp được in ra 0,98 và phương pháp còn lại là 0,85.

Từ sự hiểu biết của tôi, OLS làm việc với tập dữ liệu đào tạo. Vì vậy, câu hỏi của tôi,

  • Có cách nào làm việc với tập dữ liệu thử nghiệm với OLS không?
  • Điểm số của bộ dữ liệu traning có cho chúng ta bất kỳ ý nghĩa nào không (Trong OLS chúng tôi không sử dụng bộ dữ liệu thử nghiệm)? Từ kiến ​​thức trước đây của tôi, chúng tôi phải làm việc với dữ liệu thử nghiệm.
  • Sự khác biệt giữa OLS và hồi quy tuyến tính scikit là gì. Cái nào chúng ta sử dụng để tính điểm của mô hình?

Cảm ơn vì bất kì sự giúp đỡ.

Câu trả lời:


14

Đầu tiên về mặt sử dụng. Bạn có thể nhận được dự đoán trong các số liệu thống kê theo cách rất giống như trong scikit-learn, ngoại trừ việc chúng tôi sử dụng ví dụ kết quả được trả về bởifit

predictions = results.predict(X_test)

Dựa vào dự đoán, chúng ta có thể tính toán số liệu thống kê dựa trên lỗi dự đoán

prediction_error = y_test - predictions

Có một danh sách các hàm riêng biệt để tính toán mức độ tốt của thống kê dự đoán với nó, nhưng nó không được tích hợp vào các mô hình, cũng không bao gồm R bình phương. (Tôi chưa bao giờ nghe nói về bình phương R được sử dụng để lấy dữ liệu mẫu.) Tính toán những yêu cầu này cần thêm một chút công việc của người dùng và thống kê không có cùng một bộ thống kê, đặc biệt là không phân loại hoặc mô hình có biến phản ứng nhị phân.

Để hai điểm khác của bạn:

Hồi quy tuyến tính ở dạng cơ bản giống nhau trong thống kê mô hình và trong scikit-learn. Tuy nhiên, việc triển khai khác nhau có thể tạo ra kết quả khác nhau trong các trường hợp cạnh và việc học scikit nói chung có nhiều hỗ trợ hơn cho các mô hình lớn hơn. Ví dụ, thống kê hiện đang sử dụng ma trận thưa thớt ở rất ít phần.

Sự khác biệt quan trọng nhất là trong cơ sở hạ tầng xung quanh và các trường hợp sử dụng được hỗ trợ trực tiếp.

Statsmodels đi theo phần lớn mô hình truyền thống nơi chúng ta muốn biết một mô hình nhất định phù hợp với dữ liệu như thế nào và biến nào "giải thích" hoặc ảnh hưởng đến kết quả, hoặc kích thước của hiệu ứng là gì. Scikit-learn tuân theo truyền thống học máy trong đó nhiệm vụ được hỗ trợ chính là chọn mô hình "tốt nhất" để dự đoán.

Do đó, sự nhấn mạnh trong các tính năng hỗ trợ của thống kê là trong việc phân tích dữ liệu đào tạo bao gồm các bài kiểm tra giả thuyết và các biện pháp phù hợp, trong khi sự nhấn mạnh trong cơ sở hạ tầng hỗ trợ trong scikit-learn là về lựa chọn mô hình cho việc không theo mô hình dự đoán mẫu và do đó xác nhận chéo trên "dữ liệu thử nghiệm".

Điều này chỉ ra sự khác biệt, vẫn còn khá nhiều sự trùng lặp trong cách sử dụng. statsmodels cũng dự đoán và dự báo bổ sung trong bối cảnh chuỗi thời gian. Nhưng, khi chúng tôi muốn thực hiện xác thực chéo để dự đoán trong các mô hình thống kê, hiện tại vẫn thường dễ dàng hơn để sử dụng lại thiết lập xác thực chéo của scikit-learn cùng với các mô hình ước lượng của mô hình thống kê.


Hmm, tôi đang cố gắng sử dụng mô hình ARMA từ statsmodels.tsa, nhưng giao diện dự đoán hoàn toàn khác nhau ở đó. Bạn có biết làm thế nào để nuôi nó kiểm tra dữ liệu?
ephes

1
Đó là một câu hỏi khác nhau, và bạn cần xem tài liệu hoặc ví dụ. Dự đoán trong các mô hình chuỗi thời gian khá khác nhau do cấu trúc thời gian tuần tự và dự đoán được dự báo về các giá trị trong các khoảng thời gian tiếp theo.
Josef

Bạn đúng đó là một câu hỏi khác, tuy nhiên cảm ơn vì lời giải thích. Tôi đã đọc tài liệu và làm cho nó hoạt động bằng cách nào đó. Nhưng tôi vẫn không hiểu tại sao giao diện lại khác. Đặc biệt là tại sao không thể cung cấp các vectơ đặc trưng và nhận dự đoán (dự báo).
ephes

ARMA và SARIMAX cho phép các biến giải thích exogđược đưa vào dự toán và dự báo.
Josef

Câu hỏi này trên Stackowerlow nhấn mạnh sự khác biệt trong các giao diện: stackoverflow.com/questions/41045752/ Lời
David Dale

1

Trong mô hình OLS, bạn đang sử dụng dữ liệu huấn luyện để phù hợp và dự đoán.

Với mô hình tuyến tính, bạn đang sử dụng dữ liệu huấn luyện để phù hợp và kiểm tra dữ liệu để dự đoán, do đó sẽ cho kết quả khác nhau về điểm số R2.

Nếu bạn lấy dữ liệu thử nghiệm trong mô hình OLS, bạn sẽ có cùng kết quả và giá trị thấp hơn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.