Python机器学习之逻辑回归

Python机器学习之逻辑回归

逻辑回归(Logistic Regression)是一种常用的分类算法,它可以用于二分类和多分类问题。在这篇文章中,我们将介绍如何使用Python实现逻辑回归算法,并详细讲解实现原理。

实现原理

逻辑回归是一种基于概率的分类算法,它的目标是根据输入特征预测样本属于哪个类别。逻辑回归的实现原理如下:

  1. 首先定义一个逻辑回归模型,包含权重向量和偏置项。
  2. 然后定义一个损失函数,用于衡量模型预测结果与真实结果之间的差距。
  3. 接着使用梯度下降算法来最小化损失函数,从而得到最优的权重向量和偏置项。
  4. 最后使用训练好的模型来预测新的样本类别。

Python实现

下面是一个使用Python实现逻辑回归算法的示例:

import numpy as np

class LogisticRegression:
    def __init__(self, lr=0.01, num_iter=100000, fit_intercept=True, verbose=False):
        self.lr = lr
        self.num_iter = num_iter
        self.fit_intercept = fit_intercept
        self.verbose = verbose

    def __add_intercept(self, X):
        intercept = np.ones((X.shape[0], 1))
        return np.concatenate((intercept, X), axis=1)

    def __sigmoid(self, z):
        return 1 / (1 + np.exp(-z))

    def __loss(self, h, y):
        return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()

    def fit(self, X, y):
        if self.fit_intercept:
            X = self.__add_intercept(X)

        self.theta = np.zeros(X.shape[1])

        for i in range(self.num_iter):
            z = np.dot(X, self.theta)
            h = self.__sigmoid(z)
            gradient = np.dot(X.T, (h - y)) / y.size
            self.theta -= self.lr * gradient

            if self.verbose and i % 10000 == 0:
                z = np.dot(X, self.theta)
                h = self.__sigmoid(z)
                print(f'loss: {self.__loss(h, y)} \t')

    def predict_prob(self, X):
        if self.fit_intercept:
            X = self.__add_intercept(X)

        return self.__sigmoid(np.dot(X, self.theta))

    def predict(self, X, threshold=0.5):
        return self.predict_prob(X) >= threshold

在这个示例中,我们首先定义了一个名为LogisticRegression的类,用于实现逻辑回归算法。在LogisticRegression类中,我们首先定义了一个__add_intercept函数,用于添加截距项。然后定义了一个__sigmoid函数,用于计算sigmoid函数的值。接着定义了一个__loss函数,用于计算损失函数的值。最后定义了一个fit函数,用于训练模型;一个predict_prob函数,用于预测样本属于正类的概率;一个predict函数,用于预测样本类别。

示例1:使用逻辑回归进行二分类

在这个示例中,我们将使用逻辑回归进行二分类。我们首先生成一个二分类数据集,然后使用逻辑回归模型进行训练,并使用测试集评估模型的性能。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
X = np.random.randn(200, 2)
y = np.array([0 if x[0] + x[1] 0 else 1 for x in X])

model = LogisticRegression(lr=0.1, num_iter=300000)
model.fit(X, y)

plt.scatter(X[:, 0], X[:, 1], c=y)
x1_min, x1_max = X[:, 0].min(), X[:, 0].max(),
x2_min, x2_max = X[:, 1].min(), X[:, 1].max(),
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))
grid = np.c_[xx1.ravel(), xx2.ravel()]
probs = model.predict_prob(grid).reshape(xx1.shape)
plt.contour(xx1, xx2, probs, [0.5], linewidths=1, colors='red')
plt.show()

在这个示例中,我们首先使用numpy模块生成一个二分类数据集。然后使用逻辑回归模型进行训练,并使用测试集评估模型的性能。最后使用matplotlib模块绘制出决策边界。

示例2:使用逻辑回归进行多分类

在这个示例中,我们将使用逻辑回归进行多分类。我们首先加载一个手写数字数据集,然后使用逻辑回归模型进行训练,并使用测试集评估模型的性能。

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.3, random_state=0)

model = LogisticRegression(lr=0.1, num_iter=300000)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
accuracy = np.mean(y_pred == y_test)
print(f"Accuracy: {accuracy}")

fig, axes = plt.subplots(4, 4, figsize=(8, 8))
fig.subplots_adjust(hspace=0.3, wspace=0.3)

for i, ax in enumerate(axes.flat):
    ax.imshow(X_test[i].reshape(8, 8), cmap='binary', interpolation='nearest')
    ax.text(0.05, 0.05, str(y_pred[i]), transform=ax.transAxes, color='green' if y_pred[i] == y_test[i] else 'red')
    ax.set_xticks([])
    ax.set_yticks([])

plt.show()

在这个示例中,我们首先使用sklearn.datasets模块加载一个手写数字数据集。然后使用逻辑回归模型进行训练,并使用测试集评估模型的性能。最后使用matplotlib模块绘制出预测结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python机器学习之逻辑回归 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python画图常用命令大全(详解)

    Python画图常用命令大全(详解)是一篇介绍Python绘图常用命令的文章,下面我将对文章进行详细的讲解。 1. matplotlib库 matplotlib是Python中最流行的画图库之一,该库提供了丰富的绘图函数和绘图参数,可以绘制出各类图像,如线图、散点图、直方图等。 常用的matplotlib库中的函数包括: plot函数 该函数可以绘制出曲线图…

    python 2023年5月13日
    00
  • python语法教程之def()函数定义及用法

    Python语法教程之def()函数定义及用法 1. 函数的定义与调用 在Python中,我们可以使用def关键字定义一个函数,例如下面的代码段定义了一个简单的函数say_hello: def say_hello(): print(‘Hello, World!’) 在函数定义好之后,我们可以通过以下方式调用该函数: # 调用函数say_hello() say…

    python 2023年5月18日
    00
  • Python使用sklearn实现的各种回归算法示例

    Python使用sklearn实现的各种回归算法示例 简介 本文将介绍如何使用Python中的sklearn库来实现各种回归算法,并提供示例说明。回归算法常用于预测连续的数值型数据,并且在实际应用中有广泛的用途,如房价预测、股票价格预测等。 环境配置 在开始之前,需要安装Python和sklearn库。可以通过以下命令安装: pip install skle…

    python 2023年6月3日
    00
  • Python ftfy 包的使用案例解析

    Python ftfy 包的使用案例解析 1. 什么是 ftfy 包? Python ftfy ( Fix Text For You )包是一个处理 Unicode 文本的 Python 库。它可以自动修复文本中的各种 Unicode 错误,并将其转换为更可读的形式,使文本更易于理解、处理和存储。 2. ftfy 库的安装 要安装 ftfy 库,可以使用 p…

    python 2023年5月20日
    00
  • python except异常处理之后不退出,解决异常继续执行的实现

    Python异常处理:异常不退出,继续执行的实现方法 在Python中,异常处理是一种非常重要的编程技术。可以通过try-catch语句来捕获并处理异常。 在一些情况下,我们需要处理异常但不希望程序产生中断并退出,而是希望异常处理完成后程序可以继续执行。本文将详细讲解如何实现这一功能。 实现方式 Python中实现异常不退出、继续执行的方法有两种: 将异常处…

    python 2023年5月13日
    00
  • 用python分割TXT文件成4K的TXT文件

    下面是用Python分割TXT文件的攻略: 1. 安装Python环境 首先,需要在电脑上安装Python环境。Python是一种高级编程语言,易于学习、使用和阅读。在Python的官方网站上可以下载到适合自己系统的Python安装包,并进行安装。 2. 准备需要分割的文本文件 在Python中,可以使用内置的open()函数来打开文本文件。打开文本文件之后…

    python 2023年6月5日
    00
  • pip安装python库时报Failed building wheel for xxx错误的解决方法

    当使用pip安装Python库时,有时会遇到Failed building wheel for xxx的错误提示。这个错误通常是由于缺少相关的编译工具或者依赖库引起的。本攻略将提供pip安装Python库时报Failed building wheel for xxx错误的解决方法,包括常见错误类型和解决方法,并提供两个示例。 常见错误类型 以下是pip安装P…

    python 2023年5月13日
    00
  • java 计算中位数的实现方法

    Java计算中位数的实现方法 中位数是一个集合中的中间值。把所有数值按照大小排序,把这个序列的数学中间值称为中位数。对于有偶数个数的序列,不存在中间值,此时中位数为中间两个数的平均数。 在Java编程中,计算中位数可以使用以下两种方法: 方法一:暴力计算法 该方法是最直观的计算中位数的方法,但是时间复杂度较高,对于大量数据处理效率并不高。步骤如下: 对集合进…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部