Как получается функция затрат из логистической регрессии


29

Я прохожу курс машинного обучения в Стэнфорде на Coursera.

В главе о логистической регрессии функция затрат выглядит следующим образом: введите описание изображения здесь

Затем он получен здесь: введите описание изображения здесь

Я попытался получить производную функции стоимости, но я получил что-то совершенно другое.

Как получается производная?

Какие промежуточные шаги?


+1, проверьте ответ @ AdamO на мой вопрос здесь. stats.stackexchange.com/questions/229014/…
Du

«Совершенно другое» на самом деле не достаточно, чтобы ответить на ваш вопрос, кроме того, чтобы рассказать вам, что вы уже знаете (правильный градиент). Было бы гораздо полезнее, если бы вы сообщили нам, к чему привели ваши расчеты, тогда мы можем помочь вам подтвердить, где вы допустили ошибку.
Мэтью Друри

@ MatthewDrury Извините, Мэтт, я подготовил ответ прямо перед тем, как ваш комментарий поступил. Октавиан, вы выполнили все шаги? Я буду редактировать, чтобы придать ему дополнительную ценность позже ...
Антони Пареллада

2
когда вы говорите «производный», вы имеете в виду «дифференцированный» или «производный»?
Glen_b

Ответы:


41

Адаптировано из заметок в курсе, которые я не вижу доступными (включая этот вывод) за пределами заметок, предоставленных студентами на странице курса Эндрю Нг «Курс машинного обучения» .


В последующем верхний индекс обозначает отдельные измерения или обучающие «примеры».(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)


Производная сигмоидальной функции

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 for all the efforts!, may be using matrix notation could be easier?
Haitao Du

can I say in linear regression, objective is Axb2 and derivative is 2ATe, where e=Axb, in logistic regression, it is similar, the derivative is ATe where e=pb, and p=sigmoid (Ax) ?
Haitao Du

2
Вот почему я ценю ваши усилия. Вы тратите время на язык OP!
Haitao Du

1
My understanding is that there are convexity issues that make the squared error minimization undesirable for non-linear activation functions. In matrix notation, it would be J(θ)θ=1mX(σ(Xθ)y).
Antoni Parellada

1
@MohammedNoureldin I just took the partial derivative in the numerators on the prior line, applying the chain rule.
Antoni Parellada

8

To avoid impression of excessive complexity of the matter, let us just see the structure of solution.

With simplification and some abuse of notation, let G(θ) be a term in sum of J(θ), and h=1/(1+ez) is a function of z(θ)=xθ:

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

We may use chain rule: dGdθ=dGdhdhdzdzdθ and solve it one by one (x and y are constants).

dGh=yh1y1h=yhh(1h)
For sigmoid dhdz=h(1h) holds, which is just a denominator of the previous statement.

Finally, dzdθ=x.

Combining results all together gives sought-for expression:

dGdθ=(yh)x
Hope that helps.

0

The credit for this answer goes to Antoni Parellada from the comments, which I think deserves a more prominent place on this page (as it helped me out when many other answers did not). Also, this is not a full derivation but more of a clear statement of J(θ)θ. (For full derivation, see the other answers).

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

where

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

Also, a Python implementation for those wanting to calculate the gradient of J with respect to θ.

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

For those of us who are not so strong at calculus, but would like to play around with adjusting the cost function and need to find a way to calculate derivatives... a short cut to re-learning calculus is this online tool to automatically provide the derivation, with step by step explanations of the rule.

https://www.derivative-calculator.net

Example of deriving cost function of sigmoid activation in logistic regression

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.