难以理解逻辑回归

Having difficulty with understanding logistic regression

我目前正在学习逻辑回归,但遇到了一些困难。

这是我的代码: 我导入库:

import numpy as np
from sklearn.linear_model import LogisticRegression as lr
import matplotlib.pyplot as plt

我设置数据(很简单的一个):

#first column is the number of cigarettes somebody smokes, and the 
second column is the fact that they cancer or not(0 meaning no and 1 
meaning yes).
data = np.array([[0, "0"],
                 [10, "0"],
                 [60, "1"],
                 [90, "1"]])

现在我用单线制作模型:

model = lr().fit(X=data[:,0].reshape(len(data),1),y=data[:,1])

然后我做一些预测:

pred = model.predict([[4],[75],[14],[55]])

现在,这是我的困难:

首先,如何使用 matplotlib 库绘制此模型?

其次,如果我使用:

pred = model.predict_proba([[4],[75],[14],[55]])

我会得到概率,对吗? 但是为什么概率是这样的呢?:

array([[9.98960882e-01, 1.03911777e-03],
       [1.59627706e-04, 9.99840372e-01],
       [9.90711371e-01, 9.28862908e-03],
       [1.28043403e-02, 9.87195660e-01]])

不应该在0和1之间吗?为什么它要么接近 1 要么接近 9? 还有,那个e-01,e-04等等是什么……?我试过预测4个数字,但为什么我得到8个预测?

对不起,如果我问了太多问题。我只是好奇。

您将获得每种情况的两个值,一个对应于“0”的预测概率,一个对应于“1”的预测概率。由于“0”和“1”是互斥的,并且共同穷举,所以这两个值应该加起来为 1,确实如此:

9.98960882e-01 = 0.998960882,1.03911777e-03 = 0.00103911777。这些只是使用十的幂的十进制数的科学表示。如果你把这两个加起来,你会得到 1。

其中一个数字非常高(接近 1)而另一个非常低(仅略高于 0)这一事实意味着您的模型非常确定将案例归入哪个类别。

从 sklearn 模型调用 predict_proba 方法时,您基本上会询问模型:一个输入属于第一个 class、第二个 [=39] 的概率是多少=], ...., 最后一个 class ?

在你的例子中,你有 2 个 classes(“0”和“1”) 让我们走这条线:

pred = model.predict_proba([[4]])

你的输出是

array([[9.98960882e-01, 1.03911777e-03]])

这意味着您的输入 (4) 有概率 9.98960882e-01 属于第一个 class(在您的情况下为“0”),概率 1.03911777e-03 属于第二个class(在您的情况下为“1”)。

e-N代表*10的-N次方所以:

  • 9.98960882e-01 = 0.998960882
  • 1.03911777e-03 = 0.00103911777

如果你想要一个明确的预测,你应该像以前一样使用方法 predict(inputs)。

要绘制它,您应该首先将标签转换为整数并执行 classic 图作为 x= 您想要预测的一些输入和 y=预测.

你应该看看这个: https://matplotlib.org/stable/tutorials/introductory/pyplot.html