Python中的LR算法

前言

逻辑回归(Logistic Regression)是机器学习中最常用的分类算法之一,其主要应用于二分类问题。它使用一个线性回归模型和一个sigmoid函数,将输入映射为0和1之间的概率值,根据概率值进行分类。

在本文中,我们将介绍Python中如何使用逻辑回归算法进行分类。我们将从理论上介绍逻辑回归算法的原理,并使用Python代码实现一个简单的二分类模型。

逻辑回归原理

逻辑回归是通过使用sigmoid函数将线性回归模型的输出转换为0和1之间的概率值。sigmoid函数的数学定义如下:

$$ \sigma(z) = \frac{1}{1 + e^{-z}} $$

其中,$z$表示线性回归模型的输出。sigmoid函数的取值范围在0和1之间,对于大于0.5的概率值,我们将其分类为1;对于小于等于0.5的概率值,我们将其分类为0。

逻辑回归模型的数学表达式为:

$$ h(x) = \sigma(w^Tx + b) $$

其中,$h(x)$表示预测值,$x$表示输入特征向量,$w$表示权重向量,$b$表示偏置项。

代码实现

下面我们将使用Python代码实现一个简单的逻辑回归模型。首先,我们需要导入相关的库:

import numpy as np
import matplotlib.pyplot as plt

接下来,我们定义一个LogisticRegression类,其中包含训练和预测功能:

class LogisticRegression:
    def __init__(self, learning_rate=0.01, num_iterations=1000):
        self.learning_rate = learning_rate
        self.num_iterations = num_iterations
        self.weights = None
        self.bias = None
    
    def sigmoid(self, z):
        return 1 / (1 + np.exp(-z))
    
    def initialize_parameters(self, n_features):
        self.weights = np.zeros(n_features)
        self.bias = 0
    
    def fit(self, X, y):
        n_samples, n_features = X.shape
        self.initialize_parameters(n_features)
        
        for _ in range(self.num_iterations):
            linear_model = np.dot(X, self.weights) + self.bias
            y_predicted = self.sigmoid(linear_model)
            
            dw = (1 / n_samples) * np.dot(X.T, (y_predicted - y))
            db = (1 / n_samples) * np.sum(y_predicted - y)
            
            self.weights -= self.learning_rate * dw
            self.bias -= self.learning_rate * db
    
    def predict(self, X):
        linear_model = np.dot(X, self.weights) + self.bias
        y_predicted = self.sigmoid(linear_model)
        y_predicted_cls = [1 if i > 0.5 else 0 for i in y_predicted]
        return y_predicted_cls

以上代码中的fit方法用于训练模型,predict方法用于预测。我们使用梯度下降算法来更新权重和偏置项。

接下来,我们使用一个简单的示例数据集来测试我们的模型。我们假设这个数据集有两个特征和两个类别。

X = np.array([[1, 2], [2, 1], [2, 3], [3, 4], [4, 3], [3, 5]])
y = np.array([0, 0, 0, 1, 1, 1])

model = LogisticRegression()
model.fit(X, y)

X_test = np.array([[1, 1], [4, 5], [2, 2]])
y_pred = model.predict(X_test)

print(y_pred)

上述代码中,我们首先创建了一个LogisticRegression对象,并使用fit方法进行训练。然后,我们使用predict方法对测试集进行预测,并打印出预测结果。

结果分析

运行上述代码,我们可以得到以下结果:

[0, 1, 0]

这表示我们的模型将第一个样本分类为0,第二个样本分类为1,第三个样本分类为0。通过可视化这些结果,我们可以更好地理解模型的分类效果。

def plot_decision_boundary(model, X