如何在 Logistic 回归中找到 Logistic / Sigmoidal 函数参数
How to find Logistic / Sigmoidal function parameters in Logistic Regression
我想估计用于医疗数据逻辑回归的 S 形/逻辑的最佳参数(最后提到:斜率和截距)。这是我所做的 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
我有 Apache.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))
我删除了不需要的列,现在只剩下 'x'
中的 ApacheII 分数
#scaling the data (normalizing)
x = preprocessing.scale(x)
y = np.array(data['proportion'])
现在,我已经使用 LabelEncoder() 函数进行编码 'y',因此它可以与 LogisticRegression() 兼容。
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]
我只想找出逻辑回归中常用的sigmoidal函数的参数。如何找到 S 形参数(即截距和斜率)?
这里是sigmoidal函数(如果需要参考):
def sigmoid(x, x0, k):
y = 1 / (1 + np.exp(-k*(x-x0)))
return y
这是 LogisticRegression 解决多项式问题的正常行为。
看there:
In the multiclass case, the training algorithm uses the one-vs-rest
(OvR) scheme
intercept_ is of shape(1,) when the problem is binary.
示例:
>>> 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 个系数和第 i 个截距,您将获得解决第 i 个二元问题的模型,依此类推到列表末尾。
我想估计用于医疗数据逻辑回归的 S 形/逻辑的最佳参数(最后提到:斜率和截距)。这是我所做的 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
我有 Apache.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))
我删除了不需要的列,现在只剩下 'x'
中的 ApacheII 分数#scaling the data (normalizing)
x = preprocessing.scale(x)
y = np.array(data['proportion'])
现在,我已经使用 LabelEncoder() 函数进行编码 'y',因此它可以与 LogisticRegression() 兼容。
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]
我只想找出逻辑回归中常用的sigmoidal函数的参数。如何找到 S 形参数(即截距和斜率)?
这里是sigmoidal函数(如果需要参考):
def sigmoid(x, x0, k):
y = 1 / (1 + np.exp(-k*(x-x0)))
return y
这是 LogisticRegression 解决多项式问题的正常行为。 看there:
In the multiclass case, the training algorithm uses the one-vs-rest (OvR) scheme
intercept_ is of shape(1,) when the problem is binary.
示例:
>>> 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 个系数和第 i 个截距,您将获得解决第 i 个二元问题的模型,依此类推到列表末尾。