机器算法之逻辑回归(Logistic Regression)详解

一、什么是逻辑回归?

逻辑回归并不是传统意义上的回归分析,而是一种用于处理二分类问题的线性模型。它通过计算样本属于某一类别的概率来进行分类,尽管名字中有"回归"二字,但它实际上是一种分类算法。简单来说,逻辑回归回答的是"这件事发生的可能性有多大"。

二、逻辑回归的基本原理

在讲原理之前,我们先来了解一下逻辑回归的数学基础。逻辑回归的核心是一个Logistic函数(或称为Sigmoid函数),它的公式如下:

[ g(z) = \frac{1}{1 + e^{-z}} ]

其中,( z = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_n x_n ),( \beta )是回归系数,( x )是独立变量。

这个函数的特点是,当输入值趋向负无穷时,输出为0;当输入值趋向正无穷时,输出为1;当输入值为0时,输出为0.5。这种形状使得逻辑回归非常适合用于概率估计。

三、Python代码实现逻辑回归

接下来,让我们通过Python代码来实现一个简单的逻辑回归。我们将使用scikit-learn库,这是一个强大的机器学习库。

在导入必要的库之前,我们得检查自己python环境是否OK?

如果还没有安装的话,可以看我之前的文章:环境安装

1.导入必要的库

python 复制代码
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
import matplotlib.pyplot as plt

2.加载数据集

这里我们以著名的鸢尾花(Iris)数据集为例,它包含了150个样本和4个特征。

python 复制代码
from sklearn.datasets import load_iris
data = load_iris()
X = data.data
y = data.target

3.拆分数据集为训练集和测试集

python 复制代码
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

4.创建逻辑回归模型并进行训练

python 复制代码
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

5.进行预测并评估模型

python 复制代码
y_pred = model.predict(X_test)
print("准确率:", accuracy_score(y_test, y_pred))
print("精确率:", precision_score(y_test, y_pred, average='macro'))
print("召回率:", recall_score(y_test, y_pred, average='macro'))
print("F1分数:", f1_score(y_test, y_pred, average='macro'))

6.可视化决策边界

为了更直观地了解逻辑回归的决策过程,我们可以绘制决策边界。以下是二维数据的可视化示例:

python 复制代码
def plot_decision_boundary(model, X, y):
    h = .02  # step size in the mesh
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    plt.contourf(xx, yy, Z, alpha=0.8)
    plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
    plt.show()

plot_decision_boundary(model, X_test, y_test)

好了本节内容分享大概就是这些了!

以上代码将帮助我们理解逻辑回归 是如何通过决策边界区分不同类别的。

相关推荐
菜鸟一枚在这38 分钟前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
gyeolhada1 小时前
2025蓝桥杯JAVA编程题练习Day5
java·数据结构·算法·蓝桥杯
阿巴~阿巴~1 小时前
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
开发语言·数据结构·c++·算法·宽度优先
IT古董1 小时前
【漫话机器学习系列】100.L2 范数(L2 Norm,欧几里得范数)
人工智能·机器学习
给bug两拳1 小时前
Day9 25/2/22 SAT
算法
B站计算机毕业设计超人1 小时前
计算机毕业设计Python+DeepSeek-R1高考推荐系统 高考分数线预测 大数据毕设(源码+LW文档+PPT+讲解)
大数据·python·机器学习·网络爬虫·课程设计·数据可视化·推荐算法
_Itachi__2 小时前
LeetCode 热题 100 73. 矩阵置零
算法·leetcode·矩阵
夏莉莉iy2 小时前
[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction
人工智能·笔记·深度学习·机器学习·语言模型·自然语言处理·transformer
夏末秋也凉2 小时前
力扣-贪心-376 摆动序列
算法·leetcode