0
点赞
收藏
分享

微信扫一扫

手写逻辑回归python代码

手写逻辑回归Python代码:深入理解机器学习

在机器学习的世界中,逻辑回归是一种经典的分类算法,用于解决二分类问题。尽管它的名字中有“回归”二字,但逻辑回归其实是一种分类算法。本文将通过手写逻辑回归的代码,深入探究这一算法的原理,同时结合相关图形直观呈现逻辑回归的过程和结构。

什么是逻辑回归?

逻辑回归的核心思想是通过一个线性方程来估计一个事件发生的概率。与线性回归不同的是,逻辑回归利用了sigmoid函数(也称为逻辑函数),将线性回归的输出映射到0到1的区间。逻辑回归模型的形式为:

$$ P(y=1|x) = \sigma(w^T x + b) $$

其中,( \sigma(z) = \frac{1}{1 + e^{-z}} )。

在逻辑回归中,我们通过最大化似然函数来找到最优的参数( w )和( b )。

旅行图

在实现逻辑回归之前,我们需要清楚整个过程的旅行路线。以下是逻辑回归的实现步骤:

journey
title 逻辑回归实现旅程
section 数据预处理
收集数据: 5: 李雷
清洗数据: 4: 韩梅梅
特征选择: 3: 小明
section 模型构建
初始化参数: 4: 李雷
定义激活函数: 5: 韩梅梅
定义损失函数: 4: 小明
section 模型训练
梯度下降: 5: 李雷
section 模型评估
测试模型: 4: 韩梅梅
验证准确率: 3: 小明

以上图表展示了从数据预处理到模型评估的完整过程。

手写逻辑回归代码

在我们实现逻辑回归之前,需要注意的是,逻辑回归的实现主要包括以下几个步骤:数据准备、参数初始化、定义激活函数和损失函数、模型训练、模型预测及评估。

1. 数据准备

首先,我们需要准备数据。这里我们将使用NumPy库来处理数据。

import numpy as np

# 模拟数据
np.random.seed(0)
num_samples = 100
X = np.random.rand(num_samples, 2) # 100个样本,2个特征
Y = (X[:, 0] + X[:, 1] > 1).astype(int) # 二分类标签

2. 初始化参数

我们需要初始化模型中的权重和偏置项。

# 初始化参数
def initialize_parameters(n):
w = np.zeros((n, 1)) # 权重
b = 0 # 偏置
return w, b

w, b = initialize_parameters(X.shape[1])

3. 定义激活函数和损失函数

我们使用sigmoid作为激活函数,同时定义交叉熵作为损失函数。

# 定义sigmoid函数
def sigmoid(z):
return 1 / (1 + np.exp(-z))

# 定义损失函数
def compute_loss(y, y_hat):
m = y.shape[0]
return -1/m * np.sum(y * np.log(y_hat) + (1 - y) * np.log(1 - y_hat))

4. 模型训练(我们的重点)

最重要的部分是使用梯度下降法来最小化损失函数,从而更新权重和偏置。

# 逻辑回归训练
def train(X, Y, epochs=10000, learning_rate=0.01):
global w, b
m = X.shape[0] # 样本数

for _ in range(epochs):
# 前向传播
z = np.dot(X, w) + b
y_hat = sigmoid(z)

# 计算损失
loss = compute_loss(Y, y_hat)

# 反向传播
dw = (1/m) * np.dot(X.T, (y_hat - Y.reshape(-1, 1)))
db = (1/m) * np.sum(y_hat - Y.reshape(-1, 1))

# 更新参数
w -= learning_rate * dw
b -= learning_rate * db

return w, b

w, b = train(X, Y)

5. 模型预测与评估

完成训练后,我们使用最终模型进行预测,并计算准确率。

# 预测
def predict(X):
z = np.dot(X, w) + b
y_hat = sigmoid(z)
return (y_hat >= 0.5).astype(int)

# 计算准确率
def accuracy(y_true, y_pred):
return np.mean(y_true == y_pred)

Y_pred = predict(X)
print(f'准确率: {accuracy(Y, Y_pred)}')

关系图

在我们的逻辑回归实现中,涉及了多个重要元素,这里用关系图直观展示它们之间的关系。

erDiagram
用户 {
int id
string name
}
数据 {
int id
string feature
int label
}
模型 {
int id
string type
}
用户 }o--o{ 数据 : 拥有
数据 }o--o{ 模型 : 用于

上述关系图展示了用户与数据和模型之间的关系。用户可以拥有多个数据样本,而多个模型也可能使用同一数据集进行学习。

结论

逻辑回归是一种强大的分类工具,能够以相对简单的方式处理二分类问题。在本文中,我们通过手写Python代码实现了逻辑回归,加深了对其工作的理解。同时,通过旅行图和关系图,我们更直观地展示了逻辑回归的整个过程和结构。

逻辑回归的准确性和简单性使它成为数据科学家和工程师的一项重要技能。尽管我们探讨的是基础实现,但在实际应用中,逻辑回归还可以与其他技术(如正则化、特征工程等)结合,以提升模型的性能。希望本文能为你打开一扇了解逻辑回归的窗,让你在机器学习的旅途中走得更远。

举报

相关推荐

0 条评论