Kết quả LightGBM khác nhau tùy theo thứ tự của dữ liệu


8

Tôi có hai bộ dữ liệu A và B hoàn toàn giống nhau về số lượng cột, tên cột và các giá trị. Sự khác biệt duy nhất là thứ tự của các cột. Sau đó, tôi huấn luyện mô hình LightGBM trên mỗi hai bộ dữ liệu với các bước sau

  1. Chia mỗi tập dữ liệu vào đào tạo và thử nghiệm (sử dụng cùng tỷ lệ và hạt giống ngẫu nhiên cho cả A và B)
  2. Để mặc định siêu âm như mặc định
  3. Đặt trạng thái ngẫu nhiên làm số cố định (để tái tạo)
  4. Điều chỉnh learning_rate bằng cách sử dụng Tìm kiếm lưới
  5. Huấn luyện một mô hình LightGBM trên tập huấn luyện và kiểm tra nó trên tập thử nghiệm
  6. Tỷ lệ học tập với hiệu suất tốt nhất trên bộ kiểm tra sẽ được chọn

Các mô hình đầu ra trên hai bộ dữ liệu rất khác nhau, điều này khiến tôi nghĩ rằng thứ tự các cột có ảnh hưởng đến hiệu suất đào tạo mô hình bằng LightGBM.

Bạn có biết tại sao lại như vậy không?

Câu trả lời:


6

Một lời giải thích có thể là đây:

Khi thứ tự của các cột khác nhau, có một chút khác biệt trong thủ tục.

Những gì LightGBM, XGBoost, CatBoost, trong số những việc khác làm là chọn các cột khác nhau từ các tính năng trong bộ dữ liệu của bạn trong mỗi bước trong khóa đào tạo.

Các lựa chọn của các cột này được thực hiện ngẫu nhiên: Giả sử tập dữ liệu của bạn có 20 cột. Nút gốc chọn các tính năng thứ 1, thứ 3 và thứ 18 , trên cả hai bộ dữ liệu, các tính năng thứ 1, thứ 3 và thứ 18 khác nhau trong cả hai bộ dữ liệu có thể. Điều này được thực hiện nhiều lần và trong mỗi bước có sự ngẫu nhiên ảnh hưởng đến kết quả cuối cùng của bạn.


Làm thế nào chúng ta có thể kiểm soát tính ngẫu nhiên đó khi thuật toán chọn một tập hợp các tính năng để xây dựng cây quyết định? Đó cũng là suy nghĩ duy nhất của tôi để trả lời tình huống này. Hơn nữa, tôi đoán rằng nếu chúng ta luôn chọn tất cả các tính năng trên mỗi cây, thuật toán sẽ sử dụng Gini (hoặc một cái gì đó tương tự) để tính toán tầm quan trọng của tính năng ở mỗi bước, điều này sẽ không tạo ra sự ngẫu nhiên.
Duy Bùi

lightgbmcho phép người dùng đặt các hạt ngẫu nhiên được sử dụng để lấy mẫu hàng và cột.
bradS

1
@bradS: Tôi không đặt hạt giống là siêu tham số trong LightGBM nhưng tôi đã kiểm tra lại và hạt giống phải được đặt làm số cố định theo mặc định. Điều đó có nghĩa là nó sẽ có kết quả tương tự, đó không phải là trường hợp ở đây. lightgbm.readthedocs.io/en/latest/Parameter.html
Duy Bùi

3

Mặc dù thứ tự của dữ liệu là không quan trọng trong lý thuyết, nó rất quan trọng trong thực tế. Xem xét bạn đã thực hiện các bước để đảm bảo độ tái lập, thứ tự dữ liệu khác nhau sẽ thay đổi logic phân tách kiểm tra tàu của bạn (trừ khi bạn biết chắc chắn rằng các bộ tàu và bộ kiểm tra trong cả hai trường hợp đều giống hệt nhau). Mặc dù bạn không chỉ định cách bạn phân chia dữ liệu nhưng rất có thể một loại điểm dữ liệu nhất định làm cho máy mạnh hơn để vượt trội hơn và do đó cung cấp hiệu suất mô hình tốt hơn. Trong trường hợp dữ liệu xe lửa và kiểm tra giống nhau trong cả hai trường hợp, bạn có thể phải xem liệu có biện pháp hạt giống / độ tái lập (trong bất kỳ phần nào trong mã của bạn) mà bạn chưa thực hiện.


Xin lỗi, tôi quên đề cập đến điều đó. Sẽ cập nhật truy vấn của tôi. Đào tạo và kiểm tra là hoàn toàn giống nhau bởi vì tôi chia chúng bằng cách sử dụng cùng một hạt giống ngẫu nhiên.
Duy Bùi

@DuyBui một vài gợi ý để thử: 1) nếu bạn đang sử dụng Gpu đặt gpu_use_dp thành true Từ: github.com/Microsoft/LightGBM/pull/560#issuecomment-304561654 2) đặt num_threads thành một số cố định Từ: github.com/ Microsoft / LightGBM / vấn đề / 632 ;
gbdata
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.