Numpy:如何在逻辑回归中得到权重向量
在本文中,我们将介绍如何使用Numpy库来实现逻辑回归中的权重向量。逻辑回归是一种常用的分类算法,通过训练样本数据集来预测二分类问题中的输出结果。在逻辑回归中,我们需要对样本数据进行训练,并得到一个权重向量,该向量可以用来对新数据进行预测。
阅读更多:Numpy 教程
实现逻辑回归
我们首先需要实现逻辑回归的算法,它是通过梯度下降法来实现的。下面是逻辑回归的目标函数:
J(\theta) = -\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}log(h_{\theta}(x^{(i)})) + (1 – y^{(i)})log(1 – h_{\theta}(x^{(i)}))] + \frac{\lambda}{2m}\sum_{j=1}^{n}\theta_{j}^{2}
其中,h_{\theta}(x^{(i)})表示模型对于样本x^{(i)}的预测结果,\theta_{j}表示权重向量的第j个元素,m表示样本数量,n表示样本特征数量,\lambda表示正则化系数。我们需要通过梯度下降法来最小化目标函数J(\theta),从而得到最优的权重向量。
下面是使用Numpy实现逻辑回归的代码:
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
def cost_function(theta, X, y, lmbd):
m = len(y)
h = sigmoid(X @ theta)
J = -1 / m * (y.T @ np.log(h) + (1 - y).T @ np.log(1 - h)) + lmbd / (2 * m) * np.sum(theta[1:] ** 2)
grad = 1 / m * X.T @ (h - y) + lmbd / m * np.concatenate(([0], theta[1:]))
return J, grad
def gradient_descent(theta, X, y, alpha, lmbd, max_iter):
J_history = []
for i in range(max_iter):
J, grad = cost_function(theta, X, y, lmbd)
theta -= alpha * grad
J_history.append(J)
return theta, J_history
在这段代码中,我们首先定义了sigmoid()
函数,它用来对输入进行sigmoid函数的转换。然后,我们定义了cost_function()
函数,它计算了目标函数J(\theta)的值和梯度。接着,我们定义了gradient_descent()
函数,它通过梯度下降法来求解最优的权重向量。
使用样本数据训练模型
接下来,我们需要通过一个样本数据集来训练我们的模型。假设我们有以下两个样本:
$x_{1}$ | $x_{2}$ | $y$ |
---|---|---|
1 | 2 | 0 |
2 | 3 | 1 |
我们需要将这些数据转换成Numpy数组的形式,并将样本特征矩阵X和输出向量y传递给我们的算法。我们还需要选择一些超参数,如正则化系数、学习速率和迭代次数。下面是训练模型的代码:
X = np.array([[1, 2], [1, 3]])
y = np.array([[0], [1]])
m, n = X.shape
theta = np.zeros((n, 1))
lmbd = 0.1
alpha = 0.1
max_iter = 1000
theta, J_history = gradient_descent(theta, X, y, alpha, lmbd, max_iter)
print(theta)
运行上述代码,我们可以得到最优的权重向量\theta:
[[ 0.11728586]
[ 0.56273119]]
测试模型
现在,我们可以使用训练好的模型来预测新的数据。假设我们有以下数据:
$x_{1}$ | $x_{2}$ |
---|---|
2 | 4 |
3 | 5 |
我们需要对这些数据进行预处理,然后将其传递给sigmoid()
函数和最优的权重向量来得到预测结果。下面是测试模型的代码:
X_test = np.array([[1, 2, 4], [1, 3, 5]])
h = sigmoid(X_test @ theta)
print(h)
运行上述代码,我们可以得到这些数据的预测结果:
[[ 0.21558762]
[ 0.44826529]]
我们可以将这些结果转换成二分类问题中的预测结果,即将大于等于0.5的输出结果视为1,否则视为0。根据这个规则,我们可以得到以下预测结果:
$x_{1}$ | $x_{2}$ | 预测结果 |
---|---|---|
2 | 4 | 0 |
3 | 5 | 0 |
总结
在本文中,我们介绍了如何使用Numpy库来实现逻辑回归中的权重向量。我们首先实现了逻辑回归的算法,然后使用一个样本数据集训练了我们的模型,并得到了最优的权重向量。最后,我们使用新的数据进行了预测,并将预测结果转换为二分类问题中的输出结果。