逻辑回归

逻辑回归是一种用于估算实例属于特定类别概率的机器学习算法。它使用逻辑函数进行预测,并通过训练和成本函数调整模型。损失函数对误分类进行惩罚,梯度下降用于寻找最优解。在鸢尾花数据集上应用逻辑回归,可以观察到模型如何通过正则化处理过拟合。笔记基于《机器学习实战 合集》视频讲解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逻辑回归

逻辑回归就是被广泛用于估算一个实例属于某个特定类别的概率。如果估算概率超过50%就是属于该类,反之则不是。

估算概率

逻辑回归模型概率估算:
在这里插入图片描述

逻辑函数:

在这里插入图片描述

预测模型:

在这里插入图片描述

t = np.linspace(-10, 10, 100)
sig = 1 / (1 + np.exp(-t))
plt.figure(figsize=(9, 3))
plt.plot([-10, 10], [0, 0], "k-")
plt.plot([-10, 10], [0.5, 0.5], "k:")
plt.plot([-10, 10], [1, 1], "k:")
plt.plot([0, 0], [-1.1, 1.1], "k-")
plt.plot(t, sig, "b-", linewidth=2, label=r"$\sigma(t) = \frac{1}{1 + e^{-t}}$")
plt.xlabel("t")
plt.legend(loc="upper left", fontsize=20)
plt.axis([-10, 10, -0.1, 1.1])
plt.show()

在这里插入图片描述

训练和成本函数

单个训练实例的损失函数:

我们可以看到,当p接近于0的时候,-log§会变得非常大,所以如果模型估算一个正实例的概率接近于0,那么损失函数就会非常高,反过来,当p接近于1的时候,-log§接近于0,所以对一个负类实例估算出的概率接近于0,损失函数也会很低。
逻辑回归成本函数:

在这里插入图片描述

坏消息是,这个函数没有已知的闭式方程(也就是不尊在一个标准方差的等价方程)。好消息,这是个凸函数,通过梯度下降算法保证能够找出全局最小值。
Logistic损失函数的偏导数:
在这里插入图片描述

决策边界

我们下面用鸢尾花数据来说明逻辑回归,该数据集是非常著名的数据,共有150朵花的三个类别的萼片和花瓣的长度和宽度数据。

from sklearn import datasets
iris = datasets.load_iris()
list(iris.keys())
['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename']
# 做二分类,只取出花瓣宽度数据做分类
X = iris["data"][:, 3:]  # petal width
y = (iris["target"] == 2).astype(np.int)  # 1 if Iris-Virginica, else 0
rom sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(solver="liblinear", random_state=42)
log_reg.fit(X, y)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='warn', n_jobs=None, penalty='l2',
                   random_state=42, solver='liblinear', tol=0.0001, verbose=0,
                   warm_start=False)
# 打表 0-3 1000个值
X_new = np.linspace(0, 3, 1000).reshape(-1, 1)
# 进行预测
y_proba = log_reg.predict_proba(X_new)
# 取出大于0.5的临界值
decision_boundary = X_new[y_proba[:, 1] >= 0.5][0]#设置决策边界

plt.figure(figsize=(8, 3))
# 鸢尾花数据
plt.plot(X[y==0], y[y==0], "bs")
plt.plot(X[y==1], y[y==1], "g^")
#打印决策面
plt.plot([decision_boundary, decision_boundary], [-1, 2], "k:", linewidth=2)
# 打印两条曲线
plt.plot(X_new, y_proba[:, 1], "g-", linewidth=2, label="Iris-Virginica")
plt.plot(X_new, y_proba[:, 0], "b--", linewidth=2, label="Not Iris-Virginica")
# 打印决策面
plt.text(decision_boundary-0.2, 0.15, "决策边界", fontsize=14, color="k", ha="center")
plt.arrow(decision_boundary, 0.08, -0.3, 0, head_width=0.05, head_length=0.1, fc='b', ec='b')
plt.arrow(decision_boundary, 0.92, 0.3, 0, head_width=0.05, head_length=0.1, fc='g', ec='g')
plt.title('估算概率和决策边界', fontsize=14)
plt.xlabel("花瓣宽度 (cm)", fontsize=14)
plt.ylabel("概率", fontsize=14,rotation=0)
plt.legend(loc="center left", fontsize=14)
plt.axis([0, 3, -0.02, 1.02])
plt.show()

在这里插入图片描述

from sklearn.linear_model import LogisticRegression
# 取出花瓣长度和宽度做二分类
X = iris["data"][:, (2, 3)]  # petal length, petal width
y = (iris["target"] == 2).astype(np.int)
# liblinear 用于做二分类,计算出线性边界
log_reg = LogisticRegression(solver="liblinear", 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.title('线性决策边界', fontsize=14)
plt.xlabel("花瓣长度", fontsize=14)
plt.ylabel("花瓣宽度", fontsize=14)
plt.axis([2.9, 7, 0.8, 2.7])
plt.show()

在这里插入图片描述
与其他线性模型一样,逻辑回归模型可以用l1和l2惩罚函数来正则化,sklearn默认添加的是l2函数。不过在LogisticRegression不是alpha,而是C,C越高,模型正则化程度越高。
该笔记根据视频《机器学习实战 合集》所记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值