请用numpy写出softmax回归的代价函数代码
时间: 2023-05-23 21:01:31 浏览: 216
softmax回归代码
以下是使用numpy实现的softmax回归代价函数代码:
```python
import numpy as np
def softmax_cost(theta, X, y, num_classes, input_size, reg_lambda):
"""计算softmax回归代价函数
参数:
theta: (num_classes - 1) * input_size 的一维向量
X: 样本矩阵,m * input_size 的二维矩阵,每行是一个样本的特征向量
y: 标签向量,m * 1 的二维向量,每行是一个样本的类别标签
num_classes: 类别数
input_size: 特征向量维数
reg_lambda: 正则化系数
返回:
cost: 代价函数值
grad: 梯度向量,(num_classes - 1) * input_size 的一维向量
"""
m = X.shape[0]
theta = theta.reshape(num_classes - 1, input_size)
y_matrix = np.eye(num_classes)[y.reshape(-1)]
theta = np.vstack((theta, np.zeros((1, input_size))))
bias = np.ones((m, 1))
X = np.hstack((bias, X))
z = np.dot(X, theta.T)
softmax = np.exp(z) / np.sum(np.exp(z), axis=1, keepdims=True)
cost = -np.sum(y_matrix * np.log(softmax)) / m + reg_lambda / 2 * np.sum(theta[:-1,:] ** 2)
grad = np.dot((softmax - y_matrix).T, X) / m + np.vstack((np.zeros((1, input_size)), reg_lambda * theta[:-1,:]))
grad = grad.ravel()
return cost, grad
```
请注意,这个代码量较大,如果你想了解更多有关 softmax 回归的细节可以阅读这篇博文:[Softmax Regression回归之博客园](https://www.cnblogs.com/ML-y/p/13295762.html) 上面讲到了比较详细的例子。
阅读全文