代码之家  ›  专栏  ›  技术社区  ›  NAMAN SHUKLA

如何在Logistic回归中找到Logistic/sigmoid函数参数

  •  4
  • NAMAN SHUKLA  · 技术社区  · 7 年前

    我想估计医学数据逻辑回归中使用的乙状结肠/逻辑的最佳参数(在最后提到:斜率和截距)。以下是我在python中所做的工作:

    import numpy as np
    from sklearn import preprocessing, svm, neighbors
    from sklearn.linear_model import LinearRegression, LogisticRegression
    from sklearn.model_selection import train_test_split
    from sklearn import preprocessing, svm, utils
    from scipy.io import loadmat
    import pandas as pd
    

    我有阿帕奇。mat文件包含4列:Apache评分(0-72)、患者数量、死亡人数、比例(死亡人数与患者数量的比率)

    datamat = loadmat('Apache.mat')
    data = pd.DataFrame(np.hstack((datamat['apacheII'], datamat['NoPatients'], 
    datamat['NoDeaths'], datamat['proportion'])))
    
    data.columns = ['apacheII', 'NoPatients', 'NoDeaths', 'proportion']
    

    在这里,我创建了要使用的数据框架。

    x = np.array(data.drop(['NoPatients', 'NoDeaths', 'proportion'],1))
    

    我删除了不想要的栏目,现在只剩下ApacheII在“x”中的分数了

    #scaling the data (normalizing)
    x = preprocessing.scale(x)
    
    y = np.array(data['proportion'])
    

    现在,我使用LabelEncoder()函数对“y”进行编码,这样它就可以与logistic回归()兼容。

    lab_enc = preprocessing.LabelEncoder()
    encoded = np.array(lab_enc.fit_transform(y))
    
    clf = LogisticRegression()
    clf.fit(x, encoded)
    print(clf.coef_)
    print(clf.intercept_)
    

    输出如下:

    [[-0.49124107]
    [-0.23528893]
    [-0.19035795]
    [-0.30312848]
    [-0.25783808]
     [-0.37161079]
     [-0.12332468]
     [-0.16797195]
     [-0.05660718]
     [-0.21279785]
     [-0.22142453]
     [-0.10105617]
     [-0.14562868]
     [ 0.00991192]
     [-0.012247  ]
     [ 0.03206243]
     [ 0.07635461]
     [ 0.20951544]
     [ 0.12067417]
     [-0.03441851]
     [ 0.16504852]
     [ 0.09850035]
     [ 0.23179558]
     [ 0.05420914]
     [ 1.47513463]]
    [-1.79691975 -2.35677113 -2.35090141 -2.3679202  -2.36017388 -2.38191049
     -2.34441678 -2.34843121 -2.34070389 -2.35368047 -1.57944984 -2.3428732
     -2.3462668  -2.33974088 -2.33975687 -2.34002906 -2.34151792 -2.35329447
     -2.34422478 -2.34007746 -2.34814388 -2.34271603 -2.35632459 -2.34062229
     -1.72511457]
    

    我只想找出逻辑回归中常用的sigmoid函数的参数。如何找到S形参数(即截距和斜率)?

    这是S形函数(如果需要参考):

    def sigmoid(x, x0, k):
         y = 1 / (1 + np.exp(-k*(x-x0)))
         return y
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   Community CDub    5 年前

    这是解决多项式问题的Logistic回归的正常行为。 看 there :

    在多类情况下,训练算法使用one vs rest (OvR)方案

    当问题为二进制时,intercept_的形状为(1,)。

    示例:

    >>> clf = LogisticRegression()
    >>> clf.fit([[1,2], [1,3], [0, 1]], [[0],[1],[0]])
    >>> clf.coef_
    array([[ 0.02917282,  0.12584457]])
    >>> clf.intercept_
    array([-0.40218649])
    >>> clf.fit([[1,2], [1,3], [0, 1]], [[0],[1],[2]])
    >>> clf.coef_
    array([[ 0.25096507, -0.24586515],
           [ 0.02917282,  0.12584457],
           [-0.41626058, -0.43503612]])
    >>> clf.intercept_
    array([-0.15108918, -0.40218649,  0.1536541 ])
    

    事实上,有一些模型旨在解决不同的二进制问题。你们可以合并第i个coef和第i个intercept,你们将得到求解第i个二进制问题的模型,等等,直到列表的末尾。