Thông tin đạt được trong R


8

Tôi đã tìm thấy các gói được sử dụng để tính toán "Thông tin thu được" để chọn các thuộc tính chính trong Cây quyết định C4.5 và tôi đã thử sử dụng chúng để tính toán "Thu thập thông tin".

Nhưng kết quả tính toán của từng gói khác nhau như mã dưới đây.

> IG.CORElearn <- attrEval(In_Occu ~ In_Temp+In_Humi+In_CO2+In_Illu+In_LP+Out_Temp+Out_Humi, dataUSE1, estimator = "InfGain")
> IG.RWeka     <- InfoGainAttributeEval(In_Occu ~ In_Temp+In_Humi+In_CO2+In_Illu+In_LP+Out_Temp+Out_Humi, dataUSE1)
> IG.FSelector <- information.gain(In_Occu ~ In_Temp+In_Humi+In_CO2+In_Illu+In_LP+Out_Temp+Out_Humi,dataUSE1)

> IG.CORElearn
   In_Temp    In_Humi     In_CO2    In_Illu      In_LP   Out_Temp   Out_Humi 
0.04472928 0.02705100 0.09305418 0.35064927 0.44299167 0.01832216 0.05551973 
> IG.RWeka
   In_Temp    In_Humi     In_CO2    In_Illu      In_LP   Out_Temp   Out_Humi 
0.11964771 0.04340197 0.12266724 0.38963327 0.44299167 0.03831816 0.07705798 
> IG.FSelector
         attr_importance
In_Temp       0.08293347
In_Humi       0.02919697
In_CO2        0.08411316
In_Illu       0.27007321
In_LP         0.30705843
Out_Temp      0.02656012
Out_Humi      0.05341252

Tại sao kết quả tính toán của từng gói lại khác nhau? Và cái nào đúng?

Câu trả lời:


2

Đây không phải là một câu trả lời hoàn chỉnh cho câu hỏi của bạn, nhưng tôi có thể giải thích ít nhất một phần của vấn đề. Vì bạn không cung cấp dữ liệu của mình, tôi không thể sao chép kết quả của bạn. Tuy nhiên, thật dễ dàng để chứng minh vấn đề tương tự với các dữ liệu khác. Tôi sẽ sử dụng bộ dữ liệu mống mắt nổi tiếng được cung cấp cùng với R và Weka và rất dễ truy cập.

Vấn đề tương tự là rõ ràng với dữ liệu mống mắt.

library(CORElearn)
library(RWeka)
library(FSelector)
IG.CORElearn <- attrEval(Species ~ ., data=iris,  estimator = "InfGain")
IG.RWeka     <- InfoGainAttributeEval(Species ~ ., data=iris,)
IG.FSelector <- information.gain(Species ~ ., data=iris,)

IG.CORElearn
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
   0.5572327    0.2831260    0.9182958    0.9182958 

IG.RWeka 
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
   0.6982615    0.3855963    1.4180030    1.3784027 

IG.FSelector
             attr_importance
Sepal.Length       0.4521286
Sepal.Width        0.2672750
Petal.Length       0.9402853
Petal.Width        0.9554360

Như với ví dụ của bạn, cả ba gói đều cho kết quả hoàn toàn khác nhau.

Một vấn đề: Đơn vị (Cơ sở của logarit)

Nếu bạn xem tài liệu cho information.gaintrong FSelector, bạn sẽ thấy mô tả tham số này:

đơn vị
Đơn vị tính toán entropy (được chuyển sang entropy). Mặc định là "nhật ký".

Theo dấu vết đó, chúng ta xem mô tả của hàm entropy và xem:

đơn vị đơn
vị đo entropy. Mặc định là "nats" (đơn vị tự nhiên). Để tính toán entropy trong "bit" set unit = "log2".

Nếu chúng ta ghi đè mặc định và tính toán IG bằng đơn vị = "log2", chúng ta sẽ nhận được

IG.FSelector2 <- information.gain(Species ~ ., data=iris, unit="log2")
IG.FSelector2 
             attr_importance
Sepal.Length       0.6522837
Sepal.Width        0.3855963
Petal.Length       1.3565450
Petal.Width        1.3784027

Lưu ý rằng bây giờ các giá trị cho Thông tin đạt được đồng ý với Rweka cho Sepal.Width và Petal.Width. Một phần của sự khác biệt chỉ đơn giản là sử dụng một cơ sở khác cho logarit. Rweka sử dụng cơ sở 2 (entropy được đo bằng bit). Theo mặc định, FSelector sử dụng cơ sở e , nhưng cho phép bạn thay đổi cơ sở và nhận được một số kết quả tương tự. Nó xuất hiện từ tài liệu mà cả Rweka và CORElearn đều không cho phép bạn chọn cơ sở cho logarit.

Nhưng điều gần như kỳ lạ là một khi chúng ta có được Rweka và FSelector trong cùng một đơn vị, họ đồng ý về hai biến, nhưng không phải là hai biến số khác. Vẫn còn một cái gì đó khác đang diễn ra.


0

Thêm vào [câu trả lời của G5W] [ https://datascience.stackexchange.com/a/16249/29575] rằng FSelector (và có thể cả các triển khai khác) cũng thực hiện phân tách các tính năng trước khi tính điểm.

Đối với FSelector, điều này được thực hiện trong tệp selector.info.gain.R. Bạn có thể kiểm tra sự rời rạc với FSelector:::discretize.all. Bước này loại bỏ thông tin đến mức thứ tự các tính năng bị thay đổi.

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.