Rừng ngẫu nhiên là quá mức


15

Tôi đang cố gắng sử dụng Hồi quy rừng ngẫu nhiên trong scikits-learn. Vấn đề là tôi đang nhận được một lỗi kiểm tra thực sự cao:

train MSE, 4.64, test MSE: 252.25.

Đây là cách dữ liệu của tôi trông: (màu xanh: dữ liệu thực, màu xanh lá cây: dự đoán):

Làm sạch hồi quy rừng

Tôi đang sử dụng 90% cho đào tạo và 10% cho thử nghiệm. Đây là mã tôi đang sử dụng sau khi thử một số kết hợp tham số:

rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) 
test_mse = mean_squared_error(y_test, rf.predict(X_test))
train_mse = mean_squared_error(y_train, rf.predict(X_train))

print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse))
plot(rf.predict(X))
plot(y)

Các chiến lược có thể để cải thiện sự phù hợp của tôi là gì? Có điều gì khác tôi có thể làm để trích xuất mô hình cơ bản không? Đối với tôi, dường như không thể tin được rằng sau rất nhiều lần lặp lại cùng một mô hình, mô hình hành xử rất tệ với dữ liệu mới. Tôi có hy vọng gì để phù hợp với dữ liệu này không?


Bạn có đang đào tạo hàm tuần hoàn này với trục x làm đầu vào và trục y làm nhãn cho x <= 245, sau đó thử nghiệm cho x> 245 không? Hay tôi đang hiểu sai cốt truyện của bạn?
rrenaud

Thực tế, trục x là chỉ số quan sát, tổng cộng có 300 quan sát, do đó, từ 245 trở đi, đó là dữ liệu thử nghiệm không được sử dụng để đào tạo mô hình, vectơ tính năng đầu vào bao gồm các số nguyên, có hình dạng (300,2) và gần giống với một hàm tuyến tính của chỉ số quan sát, vì vậy tôi đã không thêm thông tin về nó để không làm quá câu hỏi.
elyase

1
Trước tiên, bạn có thể muốn xóa chu trình (phần theo mùa) khỏi dữ liệu của mình (và xu hướng).
R. Prost

Bạn đã xem xét phân tích chuỗi thời gian? Nó không rõ ràng với tôi những gì trên trục x của bạn nhưng nó có vẻ định kỳ đối với tôi. Kiểm tra tại đây và cho tôi biết nếu điều này có ích: otexts.org/fpp/7/5
Bram Van Camp

Câu trả lời:


21

Tôi nghĩ rằng bạn đang sử dụng công cụ sai; nếu toàn bộ X của bạn tương đương với chỉ mục, về cơ bản bạn đang có một số hàm được lấy mẫu f:RR và cố gắng ngoại suy nó. Học máy là tất cả về lịch sử nội suy, vì vậy không có gì đáng ngạc nhiên khi nó ghi được thất bại ngoạn mục trong trường hợp này.

Những gì bạn cần là phân tích chuỗi thời gian (tức là trích xuất xu hướng, phân tích phổ và tự phát hoặc HMMing phần còn lại) hoặc vật lý (nghĩa là suy nghĩ nếu có ODE có thể tạo ra đầu ra như vậy và cố gắng điều chỉnh các tham số của nó thông qua số lượng được bảo toàn).


không phải máy học về trích xuất các mô hình tổng quát từ dữ liệu? Khi một bộ có một bộ nhất định trong đó nội suy tốt dữ liệu, chúng ta có thể chọn những bộ có thuộc tính ngoại suy / tổng quát hóa tốt hơn bằng cách sử dụng ví dụ xác thực chéo. Có điều gì đó sai trong sự hiểu biết của tôi?
elyase

Phép ngoại suy khác với khái quát hóa - hãy tưởng tượng bạn là một chủ đề của một thí nghiệm sau: bạn thấy một màn hình và có nút màu đỏ và màu xanh lá cây. Đầu tiên, màn hình hiển thị video về căn phòng bạn đang ở nơi người khác nhấn nút màu xanh lá cây cho mèo, sư tử và hổ hiển thị trên màn hình rồi đỏ cho chó sói và cách này thu thập 5 bánh quy ngon.

1
Bây giờ, màn hình hiển thị một bobcat; bạn thực hiện phép nội suy phù hợp, khái quát hóa lịch sử, nhấn nút màu xanh lá cây và bị điện giật thay vì cookie. Tại sao điều này đã xảy ra? Bởi vì giải pháp là một chu kỳ (gggrrr) và hình ảnh động vật chỉ là một sự lừa dối. Bạn đã làm điều tương tự với khu rừng của bạn - dụ nó vào một bản sao ngu ngốc của bộ huấn luyện của bạn trong khi che giấu thông tin thực sự.

Ví dụ tốt nhưng đừng nhìn nó theo cách bạn làm. Trong ví dụ của bạn, chúng tôi có dữ liệu sau: mục tiêu ( ghoặc r) và 2 tính năng ( index(tạm thời) và animal). Từ dữ liệu này, tôi có thể phù hợp với nhiều mô hình có thể tăng trọng lượng nhiều hơn hoặc ít hơn cho tính năng 1 hoặc 2 (hoặc bằng cả hai). Xác thực chéo (giả sử đủ dữ liệu) sẽ đến một mô hình có tính năng 2 (động vật) có tầm quan trọng thấp hơn. Tôi có thể thấy rằng mô hình của tôi đang ghi đè dữ liệu, nhưng tôi vẫn nghĩ rằng tôi có thể trích xuất một mô hình theo mô hình này (vì hành vi không thay đổi) với không gian mô hình đủ lớn.
elyase

1
Không; ngay cả khi bạn yêu cầu thêm dữ liệu, nhà thực nghiệm vẫn có thể mở rộng sự lừa dối của động vật và làm xáo trộn thêm mô hình để giữ nó không rõ ràng. Tức là, ngoại suy đơn giản là không thể thực hiện được với việc học vì theo định nghĩa, nó yêu cầu thông tin không có trong đào tạo - theo cách này bạn phải áp dụng một số giả định hoặc thu thập dữ liệu bổ sung để vấn đề sẽ trở thành nội suy.

9

Vấn đề lớn nhất là cây hồi quy (và thuật toán dựa trên chúng giống như các khu rừng ngẫu nhiên) dự đoán các hàm hằng số từng phần, đưa ra một giá trị không đổi cho các đầu vào nằm dưới mỗi lá. Điều này có nghĩa là khi ngoại suy bên ngoài miền đào tạo của họ, họ chỉ dự đoán giá trị tương tự như đối với điểm gần nhất mà họ có dữ liệu đào tạo. @mbq đúng là có các công cụ chuyên dụng cho chuỗi thời gian học có lẽ sẽ tốt hơn các kỹ thuật học máy nói chung. Tuy nhiên, các khu rừng ngẫu nhiên đặc biệt xấu trong ví dụ này và có các kỹ thuật ML chung khác có thể sẽ hoạt động tốt hơn nhiều so với những gì bạn đang thấy. Các SVM với các hạt nhân phi tuyến là một lựa chọn xuất hiện trong tâm trí. Vì chức năng của bạn có cấu trúc định kỳ, điều này cũng gợi ý làm việc miền tần số,


AFAIK SVM có cùng một vấn đề về rừng ngẫu nhiên. Họ không dự đoán tốt bên ngoài không gian nơi họ đã được đào tạo. Có lẽ mạng lưới thần kinh sẽ là một giải pháp tốt hơn
Donbeo

Nếu dữ liệu nằm trên một đường cong và hạt nhân đúng loại phù hợp với đường cong đó, thì một SVM sẽ có thể ngoại suy dọc theo đường cong đó. ed nếu dữ liệu có xu hướng tuyến tính, thì một SVM tuyến tính sẽ phù hợp với dòng sẽ ngoại suy dọc theo dòng đó. Hạt nhân phức tạp hơn có thể phù hợp và ngoại suy các hành vi phức tạp hơn. Nó phụ thuộc vào việc có đúng loại nhân. Điều đó không làm cho các SVM trở thành công cụ phù hợp để ngoại suy và dự đoán TS, nhưng nó làm cho chúng tốt hơn các khu rừng ngẫu nhiên.
Daniel Mahler

3

Đây là một ví dụ trong sách giáo khoa cho dữ liệu quá khớp, mô hình làm rất tốt dữ liệu được đào tạo nhưng thu gọn trên bất kỳ dữ liệu thử nghiệm mới nào. Đây là một trong những chiến lược để giải quyết vấn đề này: Thực hiện xác thực chéo mười lần dữ liệu huấn luyện để tối ưu hóa các tham số.

Bước 1. Tạo chức năng thu nhỏ MSE bằng cách sử dụng tối ưu hóa NM. Một ví dụ có thể được nhìn thấy ở đây: http://glowingpython.blogspot.de/2011/05/curve-fitting-USE-fmin.html

Bước 2. Trong chức năng tối thiểu hóa này, mục tiêu là giảm MSE. Để thực hiện việc này, hãy tạo một phân chia dữ liệu gấp mười lần trong đó một mô hình mới được học trên 9 lần và được thử nghiệm ở lần thứ 10. Quá trình này được lặp lại mười lần, để có được MSE trên mỗi lần. MSE tổng hợp được trả về như là kết quả của mục tiêu.

Bước 3. Fmin trong python sẽ thực hiện các bước lặp cho bạn. Kiểm tra xem các tham số siêu nào là cần thiết để được tinh chỉnh (n_estimators, max_features, v.v.) và chuyển chúng đến fmin.

Kết quả sẽ là các tham số siêu tốt nhất sẽ làm giảm khả năng phù hợp quá mức.


Vâng, nó dường như là quá mức (điều mà Regression Forest ngẫu nhiên thường không có, do đó là câu hỏi). Bây giờ tôi đã quan sát thấy rằng việc thay đổi các tham số có ít ảnh hưởng với RF Regressors. Bây giờ xác nhận chéo yêu cầu một mô hình cơ bản đủ linh hoạt để được tối ưu hóa. Những loại mô hình / thuật toán ML nào bạn đề xuất cho loại dữ liệu này.
elyase

3

Một số gợi ý:

  1. Điều chỉnh các tham số của bạn bằng cách sử dụng phương pháp cửa sổ cuộn (mô hình của bạn phải được tối ưu hóa để dự đoán các giá trị tiếp theo trong chuỗi thời gian, không dự đoán các giá trị trong số các giá trị được cung cấp)
  2. Hãy thử các mô hình khác (ngay cả những mô hình đơn giản hơn, với lựa chọn tính năng phù hợp và chiến lược kỹ thuật tính năng, có thể chứng minh phù hợp hơn với vấn đề của bạn)
  3. Cố gắng tìm hiểu các biến đổi tối ưu của biến mục tiêu (cũng điều chỉnh điều này, có xu hướng tuyến tính / hàm mũ âm, bạn có thể ước tính nó)
  4. Phân tích quang phổ có lẽ
  5. Có vẻ như cực đại / cực tiểu cách đều nhau. Tìm hiểu nơi chúng được cung cấp các tính năng của bạn (không có đầu vào toán tử, tạo thuật toán khám phá nó để loại bỏ sai lệch) và thêm tính năng này làm tính năng. Ngoài ra kỹ sư một tính năng nearest maximum. Dunno, nó có thể hoạt động, hoặc có lẽ không, bạn chỉ có thể biết nếu bạn kiểm tra nó :)

Nhưng, như Daniel đã nói trong câu trả lời của mình, rừng ngẫu nhiên sẽ không giải quyết được loại vấn đề này do thiết kế vì nó không thể dự đoán các giá trị ngoài phạm vi quan sát được trong mẫu tàu. Điều chỉnh các thông số, vv sẽ không dẫn đến đâu.
Tim

1
Gợi ý số 2 @Tim. Và Rừng ngẫu nhiên sẽ không hoạt động một cách ngây thơ trên dữ liệu này, nhưng trích xuất tính năng thông minh có thể làm cho nó hoạt động.
Firebug


0

Sau khi đọc bài viết trên, tôi muốn đưa ra một câu trả lời khác.

Đối với các mô hình dựa trên cây, như rừng ngẫu nhiên, chúng không thể ngoại suy giá trị ngoài tập huấn luyện. Vì vậy, tôi không nghĩ rằng đó là một vấn đề quá phù hợp, nhưng là một chiến lược mô hình sai.

Vậy, chúng ta có thể làm gì để dự đoán chuỗi thời gian với mô hình cây?

Cách khả thi là kết hợp nó với hồi quy tuyến tính: đầu tiên, loại bỏ chuỗi thời gian (hoặc xu hướng mô hình hóa với hồi quy tuyến tính), sau đó mô hình hóa phần dư với cây (phần dư được giới hạn, để mô hình cây có thể xử lý nó).

Bên cạnh đó, có một mô hình cây kết hợp với hồi quy tuyến tính có thể ngoại suy, được gọi là lập thể, nó thực hiện hồi quy tuyến tính trên lá.


0

Nếu bạn chỉ đơn giản muốn dự đoán trong giới hạn của biểu đồ, thì chỉ cần ngẫu nhiên hóa các quan sát trước khi phân tách tập dữ liệu sẽ giải quyết vấn đề. Sau đó, nó trở thành một vấn đề nội suy từ phép ngoại suy như được hiển thị.

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.