ฟังก์ชั่นการสูญเสีย Scikit Binomial Deviance


11

นี่คือฟังก์ชั่นการสูญเสียส่วนเบี่ยงเบนทวินามของ GradientBoosting

   def __call__(self, y, pred, sample_weight=None):
        """Compute the deviance (= 2 * negative log-likelihood). """
        # logaddexp(0, v) == log(1.0 + exp(v))
        pred = pred.ravel()
        if sample_weight is None:
            return -2.0 * np.mean((y * pred) - np.logaddexp(0.0, pred))
        else:
            return (-2.0 / sample_weight.sum() *
                    np.sum(sample_weight * ((y * pred) - np.logaddexp(0.0, pred))))

ฟังก์ชั่นการสูญเสียนี้ไม่คล้ายกันระหว่างคลาสที่มี 0 และคลาสที่มี 1 ทุกคนสามารถอธิบายได้ว่าวิธีนี้ถือว่าโอเคไหม

ตัวอย่างเช่นไม่มี weigth ตัวอย่างฟังก์ชันการสูญเสียสำหรับคลาส 1 คือ

-2(pred - log(1 + exp(pred))

vs สำหรับคลาส 0

-2(-log(1+exp(pred))

เนื้อเรื่องสำหรับสองสิ่งนี้ไม่เหมือนกันในแง่ของต้นทุน มีใครช่วยฉันเข้าใจไหม

คำตอบ:


17

จำเป็นต้องมีข้อสังเกตสองประการเพื่อทำความเข้าใจการใช้งานนี้

อย่างแรกคือpredมันไม่ใช่ความน่าจะเป็นเป็นอัตราต่อรอง

Psklearnpred-2

Yเข้าสู่ระบบ(พี)+(1-Y)เข้าสู่ระบบ(1-พี)=เข้าสู่ระบบ(1-พี)+Yเข้าสู่ระบบ(พี1-พี)

พี=อีP1+อีP1-พี=11+อีP1

เข้าสู่ระบบ(1-พี)=เข้าสู่ระบบ(11+อีP)=-เข้าสู่ระบบ(1+อีP)

และ

เข้าสู่ระบบ(พี1-พี)=เข้าสู่ระบบ(อีP)=P

ดังนั้นความเบี่ยงเบนทวินามเท่ากับ

YP-เข้าสู่ระบบ(1+อีP)

ซึ่งเป็นสมการที่sklearnใช้


ขอบคุณ. หากฉันแทนที่predด้วยอัตราต่อรองฟังก์ชั่นการสูญเสียเป็นชุดสำหรับทั้งชั้นเรียน
Kumaran

คำถามเดียวกันนี้เกิดขึ้นสำหรับฉันเมื่อเร็ว ๆ นี้ ฉันดูที่gradientboostedmodels.googlecode.com/git/gbm/inst/doc/gbm.pdfหน้า 10 ที่แสดงการไล่ระดับสีของ deviance แต่ดูเหมือนว่าการไล่ระดับสีที่พวกเขาแสดงนั้นมีไว้สำหรับไฟล์บันทึกไม่ใช่สัญญาณบันทึกลบ ถูกต้องหรือไม่ - ตรงกับคำอธิบายของคุณที่นี่หรือไม่
B_Miner

1
@B_Miner การเชื่อมโยงใช้งานไม่ได้
GeneX

ขอบคุณมาก
@Matthew
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.