以下是使用 Softmax 进行多分类回归的 Python 代码示例:

import numpy as np

def softmax(X):
    exps = np.exp(X - np.max(X, axis=1, keepdims=True))
    return exps / np.sum(exps, axis=1, keepdims=True)

def cross_entropy(pred, y):
    m = y.shape[0]
    log_likelihood = -np.log(pred[range(m), y])
    loss = np.sum(log_likelihood) / m
    return loss

def one_hot_encoding(y, num_classes):
    m = y.shape[0]
    one_hot = np.zeros((m, num_classes))
    one_hot[range(m), y] = 1
    return one_hot

# 生成示例数据
np.random.seed(0)
num_samples = 100
num_features = 10
num_classes = 3
X = np.random.randn(num_samples, num_features)
y = np.random.randint(num_classes, size=num_samples)

# 数据预处理
X_mean = np.mean(X, axis=0)
X_std = np.std(X, axis=0)
X = (X - X_mean) / X_std
y_encoded = one_hot_encoding(y, num_classes)

# 初始化参数
learning_rate = 0.01
num_iterations = 1000
W = np.random.randn(num_features, num_classes)
b = np.zeros((1, num_classes))

# 梯度下降训练
for i in range(num_iterations):
    # 前向传播
    scores = np.dot(X, W) + b
    probabilities = softmax(scores)

    # 计算损失函数
    loss = cross_entropy(probabilities, y)

    # 反向传播
    grad_scores = probabilities
    grad_scores[range(num_samples), y] -= 1
    grad_scores /= num_samples

    grad_W = np.dot(X.T, grad_scores)
    grad_b = np.sum(grad_scores, axis=0, keepdims=True)

    # 参数更新
    W -= learning_rate * grad_W
    b -= learning_rate * grad_b

    if (i + 1) % 100 == 0:
        print(f'Iteration {i+1}, Loss: {loss:.4f}')

# 测试
test_scores = np.dot(X, W) + b
test_probabilities = softmax(test_scores)
predictions = np.argmax(test_probabilities, axis=1)
accuracy = np.mean(predictions == y)
print(f'Test Accuracy: {accuracy:.4f}')

在这个示例中,我们首先定义了 softmax 函数,用于将模型的输出转化为概率分布。然后定义了交叉熵损失函数和独热编码函数。

然后,我们生成了示例数据,并对输入数据进行了标准化处理,并对目标变量进行了独热编码。

接下来,我们初始化模型的参数,并使用梯度下降进行训练。在每一次迭代中,我们进行前向传播,计算损失函数,然后进行反向传播,更新参数。每 100 次迭代,我们打印当前的损失值。

最后,我们使用训练好的模型进行测试,并计算准确率。

请注意,这只是一个简单的示例,实际应用中可能需要进行更多的数据预处理和调参。

Python 使用 Softmax 进行多分类回归

原文地址: https://www.cveoy.top/t/topic/bhsZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录