On 6/11/19 11:47 AM, Eric J. Van der Velden wrote:
Hi Nicolas, Andrew,

Thanks!

I found out that it is the regularization term. Sklearn always has that term. When I program logistic regression with that term too, with \lambda=1, I get exactly the same answer as sklearn, when I look at the parameters you gave me.

Question is why sklearn always has that term in logistic regression. If you have enough data, do you need a regularization term?
It's equivalent to setting C to a high value.
We now allow penalty='none' in logisticregression, see https://github.com/scikit-learn/scikit-learn/pull/12860

I opened an issue on improving the docs:
https://github.com/scikit-learn/scikit-learn/issues/14070

feel free to make suggestions there.

There's more discussion here as well:
https://github.com/scikit-learn/scikit-learn/issues/6738



Op di 11 jun. 2019 10:08 schreef Andrew Howe <ahow...@gmail.com <mailto:ahow...@gmail.com>>:

    The coef_ attribute of the LogisticRegression object stores the
    parameters.

    Andrew

    <~~~~~~~~~~~~~~~~~~~~~~~~~~~>
    J. Andrew Howe, PhD
    LinkedIn Profile <http://www.linkedin.com/in/ahowe42>
    ResearchGate Profile
    <http://www.researchgate.net/profile/John_Howe12/>
    Open Researcher and Contributor ID (ORCID)
    <http://orcid.org/0000-0002-3553-1990>
    Github Profile <http://github.com/ahowe42>
    Personal Website <http://www.andrewhowe.com>
    I live to learn, so I can learn to live. - me
    <~~~~~~~~~~~~~~~~~~~~~~~~~~~>


    On Sat, Jun 8, 2019 at 6:58 PM Eric J. Van der Velden
    <ericjvandervel...@gmail.com <mailto:ericjvandervel...@gmail.com>>
    wrote:

        Here I have added what I had programmed.

        With sklearn's LogisticRegression(), how can I see the
        parameters it has found after .fit() where the cost is
        minimal? I use the book of Geron about scikit-learn and
        tensorflow and on page 137 he trains the model of petal
        widths. I did the following:

            iris=datasets.load_iris()
            a1=iris['data'][:,3:]
            y=(iris['target']==2).astype(int)
            log_reg=LogisticRegression()
            log_reg.fit(a1,y)

            log_reg.coef_
            array([[2.61727777]])
            log_reg.intercept_
            array([-4.2209364])


        I did the logistic regression myself with Gradient Descent or
        Newton-Raphson as I learned from my Coursera course and
        respectively from my book of Bishop. I used the Gradient
        Descent method like so:

            from sklearn import datasets
            iris=datasets.load_iris()
            a1=iris['data'][:,3:]
            A1=np.c_[np.ones((150,1)),a1]
        y=(iris['target']==2).astype(int).reshape(-1,1)
            lmda=1

            from scipy.special import expit

            def logreg_gd(w):
              z2=A1.dot(w)
              a2=expit(z2)
              delta2=a2-y
              w=w-(lmda/len(a1))*A1.T.dot(delta2)
              return w
            w=np.array([[0],[0]])
            for i in range(0,100000):
              w=logreg_gd(w)

            In [6219]: w
            Out[6219]:
            array([[-21.12563996],
                   [ 12.94750716]])

        I used Newton-Raphson like so, see Bishop page 207,

            from sklearn import datasets
            iris=datasets.load_iris()
            a1=iris['data'][:,3:]
            A1=np.c_[np.ones(len(a1)),a1]
        y=(iris['target']==2).astype(int).reshape(-1,1)
            def logreg_nr(w):
              z1=A1.dot(w)
              y=expit(z1)
              R=np.diag((y*(1-y))[:,0])
              H=A1.T.dot(R).dot(A1)
              tmp=A1.dot(w)-np.linalg.inv(R).dot(y-t)
        v=np.linalg.inv(H).dot(A1.T).dot(R).dot(tmp)
              return v

            w=np.array([[0],[0]])
            for i in range(0,10):
              w=logreg_nr(w)

            In [5149]: w
            Out[5149]:
            array([[-21.12563996],
                   [ 12.94750716]])

        Notice how much faster Newton-Raphson goes than Gradient
        Descent. But they give the same result.

        How can I see which parameters LogisticRegression() found? And
        should I give LogisticRegression other parameters?

        On Sat, Jun 8, 2019 at 11:34 AM Eric J. Van der Velden
        <ericjvandervel...@gmail.com
        <mailto:ericjvandervel...@gmail.com>> wrote:

            Hello,

            I am learning sklearn from my book of Geron. On page 137
            he learns the model of petal widths.

            When I implements logistic regression myself as I learned
            from my Coursera course or from my book of Bishop I find
            that the following parameters are found where the cost
            function is minimal:

            In [6219]: w
            Out[6219]:
            array([[-21.12563996],
                   [ 12.94750716]])

            I used Gradient Descent and Newton-Raphson, both give the
            same answer.

            My question is: how can I see after fit() which parameters
            LogisticRegression() has found?

            One other question also: when I read the documentation
            page,
            
https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression,
            I see a different cost function as I read in the books.

            Thanks.



        _______________________________________________
        scikit-learn mailing list
        scikit-learn@python.org <mailto:scikit-learn@python.org>
        https://mail.python.org/mailman/listinfo/scikit-learn

    _______________________________________________
    scikit-learn mailing list
    scikit-learn@python.org <mailto:scikit-learn@python.org>
    https://mail.python.org/mailman/listinfo/scikit-learn


_______________________________________________
scikit-learn mailing list
scikit-learn@python.org
https://mail.python.org/mailman/listinfo/scikit-learn

_______________________________________________
scikit-learn mailing list
scikit-learn@python.org
https://mail.python.org/mailman/listinfo/scikit-learn

Reply via email to