难以理解逻辑回归
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
我目前正在学习逻辑回归,但遇到了一些困难。
这是我的代码: 我导入库:
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