概念
Softmax回归(Softmax Regression)是一种用于多分类任务的机器学习算法,特别是在神经网络中常用于输出层来进行分类。它是Logistic回归在多分类问题上的推广。
原理
Softmax回归的主要思想是将原始的线性分数(得分)转化为类别概率分布,使得模型可以对多个类别进行分类。在Softmax回归中,每个类别都有一个权重向量和偏置项,将输入特征与权重相乘并添加偏置,然后通过Softmax函数将分数转化为概率。
Softmax函数可以将一个K维的向量(K个类别的分数)映射成一个K维的概率分布。假设有K个类别,对于给定的输入向量x,Softmax函数的计算公式如下:
其中,
P
(
y
=
i
∣
x
)
P(y=i | x)
P(y=i∣x) 表示在给定输入x的情况下,样本属于第i个类别的概率,
z
i
z_i
zi 是输入x在第i个类别上的得分。Softmax函数的分母是对所有类别的得分进行指数运算后的和。
Softmax回归的训练过程通常使用交叉熵损失函数(Cross-Entropy Loss),用于衡量模型预测的概率分布与真实标签的差距。
代码实现
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD
from sklearn.preprocessing import OneHotEncoder
# 生成随机数据
np.random.seed(0)
X = np.random.rand(100, 10)
y = np.random.randint(3, size=(100, 1))
# 对标签进行独热编码
encoder = OneHotEncoder(sparse=False)
y_onehot = encoder.fit_transform(y)
# 构建Softmax回归模型
model = Sequential()
model.add(Dense(3, input_dim=10, activation='softmax'))
# 编译模型
model.compile(optimizer=SGD(lr=0.01), loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X, y_onehot, epochs=50, batch_size=32)