ฟังก์ชั่นค่าใช้จ่ายเป็นอย่างไรจาก 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=∂∂θj−1m∑i=1m[y(i)log⁡(hθ(x(i)))+(1−y(i))log⁡(1−hθ(x(i)))]=linearity−1m∑i=1m[y(i)∂∂θjlog⁡(hθ(x(i)))+(1−y(i))∂∂θjlog⁡(1−hθ(x(i)))]=chain rule−1m∑i=1m[y(i)∂∂θjhθ(x(i))hθ(x(i))+(1−y(i))∂∂θj(1−hθ(x(i)))1−hθ(x(i))]=hθ(x)=σ(θ⊤x)−1m∑i=1m[y(i)∂∂θjσ(θ⊤x(i))hθ(x(i))+(1−y(i))∂∂θj(1−σ(θ⊤x(i)))1−hθ(x(i))]=σ′−1m∑i=1m[y(i)σ(θ⊤x(i))(1−σ(θ⊤x(i)))∂∂θj(θ⊤x(i))hθ(x(i))−(1−y(i))σ(θ⊤x(i))(1−σ(θ⊤x(i)))∂∂θj(θ⊤x(i))1−hθ(x(i))]=σ(θ⊤x)=hθ(x)−1m∑i=1m[y(i)hθ(x(i))(1−hθ(x(i)))∂∂θj(θ⊤x(i))hθ(x(i))−(1−y(i))hθ(x(i))(1−hθ(x(i)))∂∂θj(θ⊤x(i))1−hθ(x(i))]=∂∂θj(θ⊤x(i))=xj(i)−1m∑i=1m[y(i)(1−hθ(x(i)))xj(i)−(1−yi)hθ(x(i))xj(i)]=distribute−1m∑i=1m[yi−yihθ(x(i))−hθ(x(i))+y(i)hθ(x(i))]xj(i)=cancel−1m∑i=1m[y(i)−hθ(x(i))]xj(i)=1m∑i=1m[hθ(x(i))−y(i)]xj(i)


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

ddxσ(x)=ddx(11+e−x)=−(1+e−x)′(1+e−x)2=e−x(1+e−x)2=(11+e−x)(e−x1+e−x)=(11+e−x)(1+e−x1+e−x−11+e−x)=σ(x)(1+e−x1+e−x−σ(x))=σ(x)(1−σ(x))


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

ฉันจะบอกว่าในการถดถอยเชิงเส้นวัตถุประสงค์คือและอนุพันธ์คือโดยที่ในการถดถอยโลจิสติกมันคล้ายกันอนุพันธ์คือโดยที่และ ? ‖Ax−b‖22ATee=Ax−bATee=p−bp=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+e−z)z(θ)=xθ

G=y⋅log⁡(h)+(1−y)⋅log⁡(1−h)

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

dG∂h=yh−1−y1−h=y−hh(1−h)
สำหรับ sigmoidถือซึ่งเป็นเพียงตัวหารของคำสั่งก่อนหน้าdhdz=h(1−h)

สุดท้ายxdzdθ=x

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

dGdθ=(y−h)x

0

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

∂J(θ)∂θ=1m⋅XT(σ(Xθ)−y)

ที่ไหน

X∈Rm×n=Training example matrixσ(z)=11+e−z=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.