ฟังก์ชั่นค่าใช้จ่ายเป็นอย่างไรจาก Logistic Regression


29

ฉันกำลังเรียนหลักสูตร Machine Learning Stanford ใน Coursera

ในบทที่เกี่ยวกับการถดถอยโลจิสติกฟังก์ชันต้นทุนคือ: ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นมันจะอยู่ที่นี่: ป้อนคำอธิบายรูปภาพที่นี่

ฉันพยายามหาอนุพันธ์ของฟังก์ชันต้นทุน แต่ฉันได้บางอย่างที่แตกต่างออกไปอย่างสิ้นเชิง

อนุพันธ์ได้มาอย่างไร

ขั้นตอนตัวกลางคืออะไร


+1 ตรวจสอบคำตอบของ @ AdamO ในคำถามของฉันที่นี่ stats.stackexchange.com/questions/229014/…
Haitao Du

"แตกต่างไปจากเดิมอย่างสิ้นเชิง" นั้นไม่เพียงพอที่จะตอบคำถามของคุณได้นอกเหนือจากการบอกสิ่งที่คุณรู้แล้ว มันจะมีประโยชน์มากขึ้นถ้าคุณให้สิ่งที่คุณคำนวณกับเราแล้วเราสามารถช่วยให้คุณเข้าใจผิดได้
Matthew Drury

@MatthewDrury ขออภัยแมทฉันได้จัดคำตอบก่อนที่ความคิดเห็นของคุณจะเข้ามา Octavian คุณทำตามขั้นตอนทั้งหมดแล้วหรือยัง? ผมจะแก้ไขให้มันเพิ่มมูลค่าต่อมา ...
อันโต Parellada

2
เมื่อคุณพูดว่า "derivate" หมายความว่า "แตกต่าง" หรือ "ได้รับ"
Glen_b -Reinstate Monica

คำตอบ:


41

ที่ดัดแปลงมาจากบันทึกในหลักสูตรซึ่งผมไม่เห็นใช้ได้ (รวมทั้งที่มานี้) นอกบันทึกการสนับสนุนโดยนักเรียนที่อยู่ในหน้าของหลักสูตรการเรียนรู้ Coursera เครื่องแอนดรูอึ้งของ


ในสิ่งต่อไปนี้ตัวยกหมายถึงการวัดหรือการฝึกอบรมแต่ละ "ตัวอย่าง"(i)

J(θ)θj=θj1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]=linearity1mi=1m[y(i)θjlog(hθ(x(i)))+(1y(i))θjlog(1hθ(x(i)))]=chain rule1mi=1m[y(i)θjhθ(x(i))hθ(x(i))+(1y(i))θj(1hθ(x(i)))1hθ(x(i))]=hθ(x)=σ(θx)1mi=1m[y(i)θjσ(θx(i))hθ(x(i))+(1y(i))θj(1σ(θx(i)))1hθ(x(i))]=σ1mi=1m[y(i)σ(θx(i))(1σ(θx(i)))θj(θx(i))hθ(x(i))(1y(i))σ(θx(i))(1σ(θx(i)))θj(θx(i))1hθ(x(i))]=σ(θx)=hθ(x)1mi=1m[y(i)hθ(x(i))(1hθ(x(i)))θj(θx(i))hθ(x(i))(1y(i))hθ(x(i))(1hθ(x(i)))θj(θx(i))1hθ(x(i))]=θj(θx(i))=xj(i)1mi=1m[y(i)(1hθ(x(i)))xj(i)(1yi)hθ(x(i))xj(i)]=distribute1mi=1m[yiyihθ(x(i))hθ(x(i))+y(i)hθ(x(i))]xj(i)=cancel1mi=1m[y(i)hθ(x(i))]xj(i)=1mi=1m[hθ(x(i))y(i)]xj(i)


อนุพันธ์ของฟังก์ชัน sigmoid คือ

ddxσ(x)=ddx(11+ex)=(1+ex)(1+ex)2=ex(1+ex)2=(11+ex)(ex1+ex)=(11+ex)(1+ex1+ex11+ex)=σ(x)(1+ex1+exσ(x))=σ(x)(1σ(x))


1
+1 สำหรับความพยายามทั้งหมด! อาจใช้สัญกรณ์เมทริกซ์อาจจะง่ายขึ้น?
Haitao Du

ฉันจะบอกว่าในการถดถอยเชิงเส้นวัตถุประสงค์คือและอนุพันธ์คือโดยที่ในการถดถอยโลจิสติกมันคล้ายกันอนุพันธ์คือโดยที่และ ? Axb22ATee=AxbATee=pbp=sigmoid (Ax)
Haitao Du

2
นั่นคือเหตุผลที่ฉันชื่นชมความพยายามของคุณ คุณใช้เวลากับพวกเราภาษาของ OP !!
Haitao Du

1
ความเข้าใจของฉันคือว่ามีปัญหานูนออกมาซึ่งทำให้การลดข้อผิดพลาดกำลังสองน้อยที่สุดเป็นสิ่งที่ไม่พึงประสงค์สำหรับฟังก์ชั่นการเปิดใช้งานที่ไม่เป็นเชิงเส้น ในสัญกรณ์เมทริกซ์มันจะเป็นขวา) J(θ)θ=1mX(σ(Xθ)y)
Antoni Parellada

1
@ MohammedNoureldin ฉันเพิ่งเอาอนุพันธ์บางส่วนในตัวเศษในบรรทัดก่อนหน้าโดยใช้กฎลูกโซ่
Antoni Parellada

8

เพื่อหลีกเลี่ยงความประทับใจในความซับซ้อนที่มากเกินไปของเรื่องให้เราเห็นโครงสร้างของการแก้ปัญหา

ด้วยความเรียบง่ายและการใช้สัญกรณ์อย่างไม่เหมาะสมทำให้เป็นคำศัพท์ที่เป็นผลรวมของและเป็นฟังก์ชันของ : G(θ)J(θ)h=1/(1+ez)z(θ)=xθ

G=ylog(h)+(1y)log(1h)

เราอาจใช้กฎลูกโซ่: และแก้ปัญหาโดย หนึ่ง (และเป็นค่าคงที่)dGdθ=dGdhdhdzdzdθxy

dGh=yh1y1h=yhh(1h)
สำหรับ sigmoidถือซึ่งเป็นเพียงตัวหารของคำสั่งก่อนหน้าdhdz=h(1h)

สุดท้ายxdzdθ=x

การรวมผลลัพธ์ทั้งหมดเข้าด้วยกันจะให้นิพจน์ที่ต้องการ: หวังที่ช่วย

dGdθ=(yh)x

0

เครดิตสำหรับคำตอบนี้ไปที่ Antoni Parellada จากความคิดเห็นซึ่งฉันคิดว่าสมควรได้รับสถานที่ที่โดดเด่นมากขึ้นในหน้านี้ (เพราะมันช่วยฉันออกเมื่อไม่มีคำตอบอื่น ๆ อีกมากมาย) นอกจากนี้ไม่ได้เป็นที่มาเต็ม แต่มากขึ้นของคำสั่งที่ชัดเจนของtheta} (สำหรับที่มาแบบเต็มดูคำตอบอื่น ๆ )J(θ)θ

J(θ)θ=1mXT(σ(Xθ)y)

ที่ไหน

XRm×n=Training example matrixσ(z)=11+ez=sigmoid function=logistic functionθRn=weight row vectory=class/category/label corresponding to rows in X

นอกจากนี้การดำเนินงานที่งูใหญ่สำหรับผู้ที่ต้องการการคำนวณการไล่ระดับสีของด้วยความเคารพ\Jθ

import numpy
def sig(z):
return 1/(1+np.e**-(z))


def compute_grad(X, y, w):
    """
    Compute gradient of cross entropy function with sigmoidal probabilities

    Args: 
        X (numpy.ndarray): examples. Individuals in rows, features in columns
        y (numpy.ndarray): labels. Vector corresponding to rows in X
        w (numpy.ndarray): weight vector

    Returns: 
        numpy.ndarray 

    """
    m = X.shape[0]
    Z = w.dot(X.T)
    A = sig(Z)
    return  (-1/ m) * (X.T * (A - y)).sum(axis=1) 

0

สำหรับพวกเราที่ไม่แข็งแกร่งมากที่แคลคูลัส แต่ต้องการที่จะเล่นกับการปรับฟังก์ชั่นค่าใช้จ่ายและต้องการหาวิธีในการคำนวณอนุพันธ์ ... ทางลัดเพื่อเรียนรู้แคลคูลัสอีกครั้งเป็นเครื่องมือออนไลน์ที่ให้โดยอัตโนมัติ ความเป็นมาพร้อมคำอธิบายทีละขั้นตอนของกฎ

https://www.derivative-calculator.net

ตัวอย่างฟังก์ชันการรับต้นทุนของการเปิดใช้งาน sigmoid ในการถดถอยโลจิสติก

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