logistic回归python代码

以下是一个简单的 logistic 回归的 Python 代码示例:

import numpy as np
import matplotlib.pyplot as plt

# 定义 sigmoid 函数
def sigmoid(z):
    return 1 / (1 + np.exp(-z))

# 定义损失函数
def cost_function(X, y, theta):
    m = len(y)
    h = sigmoid(X @ theta)
    J = (-1/m) * (y.T @ np.log(h) + (1-y).T @ np.log(1-h))
    grad = (1/m) * X.T @ (h - y)
    return J, grad

# 定义梯度下降函数
def gradient_descent(X, y, theta, alpha, num_iters):
    m = len(y)
    J_history = []
    for i in range(num_iters):
        J, grad = cost_function(X, y, theta)
        theta = theta - alpha * grad
        J_history.append(J)
    return theta, J_history

# 加载数据
data = np.loadtxt('data.txt', delimiter=',')
X = data[:, :-1]
y = data[:, -1]

# 特征缩放
X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)

# 添加偏置项
X = np.hstack((np.ones((len(y), 1)), X))

# 初始化参数
theta = np.zeros(X.shape[1])

# 设置学习率和迭代次数
alpha = 0.01
num_iters = 1000

# 运行梯度下降算法
theta, J_history = gradient_descent(X, y, theta, alpha, num_iters)

# 绘制损失函数的变化曲线
plt.plot(J_history)
plt.xlabel('Iterations')
plt.ylabel('Cost')
plt.show()

# 预测新数据
x_new = np.array([1, 5, 3])
x_new = (x_new - np.mean(X[:, 1:], axis=0)) / np.std(X[:, 1:], axis=0)
prob = sigmoid(x_new @ theta)
print('Probability of positive class:', prob)

在这个示例中,我们首先定义了 sigmoid 函数和损失函数。然后,我们使用梯度下降算法来最小化损失函数,并得到最优参数。最后,我们使用训练模型来预测新数据的类别。

接下来我会继续解释这个代码的每一部分。

首先,我们导入了必要的库,包括 NumPy 和 Matplotlib。然后,我们定义了 sigmoid 函数,它将输入的值转换为 0 到 1 之间的概率值。接着,我们定义了损失函数,它计算给定参数下的模型预测与实际标签之间的误差,并返回损失值和梯度。这里使用的是交叉熵损失函数。

接下来,我们定义了梯度下降函数,它使用给定的学习率和迭代次数来更新参数,以最小化损失函数。在每次迭代中,我们计算当前参数下的损失值和梯度,并使用梯度下降公式更新参数。

然后,我们加载数据,并对特征进行缩放和添加偏置项。这里使用的是均值归一化和标准差归一化。

接着,我们初始化参数,并设置学习率和迭代次数。然后,我们运行梯度下降算法,得到最优参数,并绘制损失函数的变化曲线。

最后,我们使用训练模型来预测新数据的类别。这里我们使用了一个包含三个特征的示例数据,并对其进行了特征缩放。然后,我们使用训练模型来计算该示例数据属于正类的概率。

希望这个解释能够帮助你更好地理解 logistic 回归的 Python 代码。