Numpy:如何在逻辑回归中得到权重向量

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库来实现逻辑回归中的权重向量。我们首先实现了逻辑回归的算法,然后使用一个样本数据集训练了我们的模型,并得到了最优的权重向量。最后,我们使用新的数据进行了预测,并将预测结果转换为二分类问题中的输出结果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程