matplotlib Logistic回归中的线性决策边界

ffx8fchx  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(112)

在下面的代码中,哪一行代码负责额外的线性决策边界,15%,30%等?

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

iris = datasets.load_iris()
print(list(iris.keys()))

X = iris['data'][:,3:] #petal width
y = (iris['target']==2).astype(np.int32) #1 if virginica, else 0

X = iris["data"][:, (2, 3)]  # petal length, petal width
y = (iris["target"] == 2).astype(np.int32)

log_reg = LogisticRegression(solver="lbfgs", C=10**10, random_state=42)
log_reg.fit(X, y)

x0, x1 = np.meshgrid(
        np.linspace(2.9, 7, 500).reshape(-1, 1),
        np.linspace(0.8, 2.7, 200).reshape(-1, 1),
    )

X_new = np.c_[x0.ravel(), x1.ravel()]

y_proba = log_reg.predict_proba(X_new)

plt.figure(figsize=(10, 4))
plt.plot(X[y==0, 0], X[y==0, 1], "bs")
plt.plot(X[y==1, 0], X[y==1, 1], "g^")

zz = y_proba[:, 1].reshape(x0.shape)
contour = plt.contour(x0, x1, zz, cmap=plt.cm.brg)

left_right = np.array([2.9, 7])
boundary = -(log_reg.coef_[0][0] * left_right + log_reg.intercept_[0]) / log_reg.coef_[0][1]

plt.clabel(contour, inline=1, fontsize=12)
plt.plot(left_right, boundary, "k--", linewidth=3)
plt.text(3.5, 1.5, "Not Iris virginica", fontsize=14, color="b", ha="center")
plt.text(6.5, 2.3, "Iris virginica", fontsize=14, color="g", ha="center")
plt.xlabel("Petal length", fontsize=14)
plt.ylabel("Petal width", fontsize=14)
plt.axis([2.9, 7, 0.8, 2.7])

plt.show()

字符串
我正在用一本没有文档的代码编写ML教科书,这是我无法弄清楚起源的一个功能。

jaql4c8m

jaql4c8m1#

是从这行来的

contour = plt.contour(x0, x1, zz, cmap=plt.cm.brg)

字符串
您可以通过从代码中注解掉该行来对此进行复查。
然后,使用上面的contour对象绘制标签(30%,60%,...):

plt.clabel(contour, inline=1, fontsize=12)


通过查看contour对象确认:
'axes':<Axes:xlabel='Petal length',ylabel='Petal width'>,'levels':array([0.,0.15,0.3,0.45,0.6,0.75,0.9,1.05]),…
基本上,这个想法如下。首先,使用Numpy meshgrid创建x0x1,然后绘制具有概率(即zz)的轮廓。
有关meshgrid的进一步阅读,您可以参考此链接:https://www.sharpsightlabs.com/blog/numpy-meshgrid/

相关问题