Softmax归一化的逻辑
时间: 2024-05-31 19:13:11 浏览: 59
Softmax归一化是一种常用的概率分布函数,它可以将一个任意范围内的值域映射到[0,1]区间内,并且保证所有映射后的值之和为1,这样就可以将任何一组数值转换为概率分布。
具体来说,假设有一组待归一化的实数x1,x2,...,xn,那么Softmax归一化的逻辑如下:
1. 对每个数值进行指数运算:e^x1,e^x2,...,e^xn
2. 对指数运算后的结果进行求和:e^x1+e^x2+...+e^xn
3. 将每个指数运算后的结果除以求和结果,得到归一化后的概率值:p1=e^x1/(e^x1+e^x2+...+e^xn), p2=e^x2/(e^x1+e^x2+...+e^xn),...,pn=e^xn/(e^x1+e^x2+...+e^xn)
这样就可以将一组实数转换为一个概率分布,其中每个数值表示对应事件发生的概率。在深度学习中,Softmax归一化常用于多分类任务中,例如将神经网络输出的一组实数转换为各个类别的概率分布。
相关问题
采用 OVR,CrossEntropy Loss 和softmax ,使用numpy 编写逻辑回归算法,对 iris 数据进行多分类,输出决策函数的参数、预测值、分类准确率并可视化
好的,我会尽力回答你的问题。首先,让我解释一下你提到的一些概念:
- OVR(One-vs-Rest):一种多分类问题的解决方法,将每个类别与其他所有类别分别进行二分类,得到每个类别的分类器。
- CrossEntropy Loss:交叉熵损失函数,常用于分类问题的损失函数,可以衡量分类模型的预测结果与真实结果之间的差距。
- softmax:一种常用的归一化函数,可以将一组数值转化为概率分布,常用于多分类问题中。
接下来,我将分步介绍如何使用numpy编写逻辑回归算法对iris数据进行多分类。
1. 导入必要的库
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
```
2. 加载数据集并进行预处理
```python
iris = load_iris()
X = iris.data
y = iris.target
# 将类别进行one-hot编码
n_classes = len(np.unique(y))
y_one_hot = np.eye(n_classes)[y]
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y_one_hot, test_size=0.2, random_state=42)
```
3. 定义逻辑回归模型
```python
class LogisticRegression:
def __init__(self, n_features, n_classes):
# 初始化参数
self.W = np.random.randn(n_features, n_classes) * 0.01
self.b = np.zeros((1, n_classes))
def softmax(self, z):
# 计算softmax函数
exp_z = np.exp(z)
return exp_z / np.sum(exp_z, axis=1, keepdims=True)
def forward(self, X):
# 前向传播
z = np.dot(X, self.W) + self.b
return self.softmax(z)
def cross_entropy_loss(self, y_pred, y_true):
# 计算交叉熵损失函数
return -np.mean(np.sum(y_true * np.log(y_pred), axis=1))
def backward(self, X, y_true, y_pred, learning_rate):
# 反向传播
m = X.shape[0]
dz = y_pred - y_true
dW = np.dot(X.T, dz) / m
db = np.mean(dz, axis=0, keepdims=True)
self.W -= learning_rate * dW
self.b -= learning_rate * db
def train(self, X, y_true, learning_rate, epochs):
# 训练模型
for i in range(epochs):
y_pred = self.forward(X)
loss = self.cross_entropy_loss(y_pred, y_true)
self.backward(X, y_true, y_pred, learning_rate)
if i % 100 == 0:
print('Epoch %d, loss %.4f' % (i, loss))
def predict(self, X):
# 预测类别
y_pred = self.forward(X)
return np.argmax(y_pred, axis=1)
```
4. 训练模型并输出结果
```python
# 初始化模型
lr = LogisticRegression(n_features=X_train.shape[1], n_classes=n_classes)
# 训练模型
lr.train(X_train, y_train, learning_rate=0.01, epochs=1000)
# 预测测试集
y_pred = lr.predict(X_test)
# 计算分类准确率
acc = accuracy_score(np.argmax(y_test, axis=1), y_pred)
print('Accuracy:', acc)
```
5. 可视化决策函数
```python
# 取两个特征进行可视化
X_vis = X[:, :2]
# 生成网格点
h = 0.02
x_min, x_max = X_vis[:, 0].min() - 0.5, X_vis[:, 0].max() + 0.5
y_min, y_max = X_vis[:, 1].min() - 0.5, X_vis[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
X_mesh = np.c_[xx.ravel(), yy.ravel()]
# 预测网格点的类别
Z = lr.predict(X_mesh)
Z = Z.reshape(xx.shape)
# 可视化决策函数
plt.figure(figsize=(10, 8))
plt.contourf(xx, yy, Z, cmap=plt.cm.Set1)
plt.scatter(X_vis[:, 0], X_vis[:, 1], c=y, cmap=plt.cm.Set1)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Logistic Regression Decision Boundary')
plt.show()
```
至此,我们就完成了使用numpy编写逻辑回归算法对iris数据进行多分类的任务,并输出了决策函数的参数、预测值、分类准确率并可视化。
多分类softmax
在多分类任务中,为什么要使用softmax而不是其他归一化方法?
softmax是一种常用的归一化方法,特别适用于多分类任务。在多分类中,softmax函数可以将原始的输入转换为一个概率分布,使得每个类别的概率之和为1。这样就可以方便地将输入映射到不同的类别上。
softmax的设计初衷是希望特征对概率的影响是乘性的,这与多类分类问题的目标函数常常选为cross-entropy相吻合。在神经网络模型中,softmax函数通常与cross-entropy损失函数一起使用,通过最小化cross-entropy loss来优化模型,使得预测结果与真实标签之间的差距最小化。
另外,softmax函数还可以将多个输入映射到一个概率数组中,其中每个元素表示对应类别的概率。这一点在组合多个二分类器时特别有用。如果分类的类别是互斥的,也就是每个样本只能属于一个类别,那么可以直接使用softmax进行归一化。但如果分类的类别不是互斥的,那么可以使用组合分类器,如多个逻辑分类器或SVM分类器等。
综上所述,softmax函数在多分类任务中是一种常用的归一化方法,它可以将原始输入转换为概率分布,方便进行预测和优化模型。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [深度学习笔记(十三)---多分类任务中的softmax以及各激活函数的适用场景](https://blog.csdn.net/qq_41997920/article/details/89175595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文