机器学习(10) 逻辑回归:多元分类(Multi-class classification)

这篇具有很好参考价值的文章主要介绍了机器学习(10) 逻辑回归:多元分类(Multi-class classification)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 逻辑回归处理多分类的原理

对于数据集中存在多个类别的分类问题,我们可以采用一种叫做 One-vs-rest 的方法,将其转化成二元分类的问题,然后再进行解决。

前面的是对于二元分类问题,应该如何去处理其预测函数、代价函数和梯度下降算法。

但是多元的分类才是生活常见的情况。

例如对于邮件,我们可以分为工作、 朋友、家人、兴趣;

例如对于天气,我们可以分为晴朗、多云、下雨、有雪。

对于这样的多元分类,应该如何处理呢?

逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类

分类情况

其实很简单,把多元分类划分为多个二元分类就可以了:

逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类

这样我们就能将多元分类问题当成二元分类问题进行解决。

对于上面图片中的三种分类,可以列一下预测函数的公式:

  1. 分类1:逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类
  2. 分类2:逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类
  3. 分类3:逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类

我们预测的时候,分别将x代入到三个公式中,计算三者的概率,其中概率最大的,就是我们的预测结果。

例如我们发现 P(y=1 | x; θ) 的概率最大,那么我们就预测这个图形是绿色的三角形。

把公式写得更加通用一点,如下:

y∈{0,1,…,n}

逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类

逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类

……

逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类

最后,如果给出一个新的值 x,用该模型进行预测,就需要分别使用三个分类器进行计算,找到最大的那个 逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类x 就属于那个类别。即:

逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类

剩下的,就是二元分类模型需要做的事情了。

2 示例:【python】使用逻辑回归识别手写数字(从0到9)

样本数据ex3data1.mat

数据以.mat格式储存,mat格式是matlab的数据存储格式,按照矩阵保存,与numpy数据格式兼容,适合于各种数学运算,因此主要使用numpy进行运算。

ex3data1.mat中有5000个训练样例,其中每个训练样例是一个20像素×20像素灰度图像的数字,每个像素由一个浮点数表示,该浮点数表示该位置的灰度强度。每个20×20像素的网格被展开成一个400维的向量。这些每个训练样例都变成数据矩阵X中的一行。这就得到了一个5000×400矩阵X,其中每一行都是手写数字图像的训练样例。

训练集的第二部分是一个包含训练集标签的5000维向量y,“0”的数字标记为“10”,而“1”到“9”的数字按自然顺序标记为“1”到“9”。

Python代码

import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio
 
# 1 读入数据 :sio.loadmat 读取mat后,为dict类型
path = 'D:/dataAnalysis/MachineLearning/ex3data1.mat'
data = sio.loadmat(path)
#print(data)
print('数据的类型:',type(data))
print('数据中的键名:',data.keys())
raw_X = data['X']
raw_Y = data['y']
print('输入特征(5000个手写数字图片,每个图片20x20像素)的形状:',raw_X.shape) # (5000, 400)
print('输出特征(标明每个手写数字图片是和数字)的的形状:',raw_Y.shape) # (5000, 1)

# 2 画出数据集里的数字图片
# 2.1 画出数据集里的1个随机数字图片
def plot_an_image(X):
    pick_one = np.random.randint(5000) # 从数据集中随机选出1个图片
    image = X[pick_one, :]
    print('1个随机数字图片')
    fig, ax = plt.subplots(figsize=(1, 1))#设置图片尺寸
    ax.imshow(image.reshape(20, 20).T, cmap='gray_r')
    plt.xticks([])
    plt.yticks([])
 
plot_an_image(raw_X)
plt.show()
 
# 2.2 画出数据集里的100个随机数字图片  
def plot_100_images(X):
    sample_index = np.random.choice(len(X), 100)#随机选取数据集里100个数据
    images = X[sample_index, :]
    print('100个随机数字图片')
    print(images.shape)
    #定义10*10的子画布
    fig, ax = plt.subplots(ncols=10, nrows=10, figsize=(8, 8), sharex=True, sharey=True)
    #在每个子画布中画出一个数字
    for r in range(10):#行
        for c in range(10):#列
            ax[r, c].imshow(images[10 * r + c].reshape(20, 20).T, cmap='gray_r')
    #去掉坐标轴
    plt.xticks([])
    plt.yticks([])
    plt.show()
 
plot_100_images(raw_X)
plt.show()

# 3 损失函数 ,找出最小的损失函数
# 3.1 定义sigmoid函数
def sigmoid(z):
    return 1 / (1 + np.exp(-z))
 
# 3.2 损失函数计算
def Cost_Function(theta, X, y, lamda):
    A = sigmoid(X @ theta)
    first = y * np.log(A)
    second = (1 - y) * np.log(1 - A)
    reg = np.sum(np.power(theta[1:], 2)) * (lamda / (2 * len(X)))
    return -np.sum(first + second) / len(X) + reg
 
#  3.3 梯度下降
def gradient_reg(theta, X, y, lamda):
    reg = theta[1:] * (lamda / len(X))
    reg = np.insert(reg, 0, values=0, axis=0)#插入第一行0
    first = (X.T @ (sigmoid(X @ theta) - y)) / len(X)
    return first + reg
 
# 4 数据处理
X = np.insert(raw_X, 0, values=1, axis=1) # 在输入特征最前面插一列全1
print(f'在输入特征最前面插一列全1后的形状:',X.shape) # (5000, 401)
y = raw_Y.flatten() # 展开输出特征矩阵
print(f'输出特征矩阵展开为数组后形状:',y.shape) # (5000,)
 
# 5 一对多分类
#   利用for循环对每种数字习得一个带正则的逻辑回归分类器,
#   然后将10个分类器的参数组成一个参数矩阵theta_all返回
# 利用内置函数求最优化
from scipy.optimize import minimize
 
# K为标签个数
def one_vs_all(X, y, lamda, K):
    n = X.shape[1]#X的列数401
    theta_all = np.zeros((K, n))#(10,401)
   #第0列到第9列分别对应类别1到10
    for i in range(1, K + 1):#遍历到k 1-k 对应1-10
        theta_i = np.zeros(n, )#传入minimize的必须是一维(401,)
        res = minimize(fun=Cost_Function,
                       x0=theta_i,
                       args=(X, y == i, lamda),
                       method='TNC',
                       jac=gradient_reg
                       )
        theta_all[i - 1, :] = res.x #将字典中x(theta)的值赋给theta
        #[i-1,:]与索引对应(0,9)
    return theta_all
 
lamda = 1
K = 10
theta_final = one_vs_all(X, y, lamda, K)
print('最后的参数: ',theta_final)
 
# 6 预测
#   得到一个5000乘10的预测概率矩阵,找到每一行的概率最大的值位置,
#   得到预测的类别,再和期望值y比较得到精度。
def predict(X, theta_final):
    # (5000,401) (10,401) => (5000,10)
    h = sigmoid(X @ theta_final.T)#假设函数,输出h为1的概率
    h_argmax = np.argmax(h, axis=1)#按行返回概率最大的数字索引
    return h_argmax+1 #索引+1对应数字
 
y_pred = predict(X, theta_final)
acc = np.mean(y_pred == y)
# 0.9446
print('预测准确度:',acc)

执行结果如下:

逻辑回归模型如何实现多分类,机器学习,逻辑回归,分类

 文章来源地址https://www.toymoban.com/news/detail-786385.html

到了这里,关于机器学习(10) 逻辑回归:多元分类(Multi-class classification)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习19:多类别神经网络-Multi-Class Neural Networks

    在【 机器学习12:分类 Classification 】一文中,笔者介绍了二元分类模型,它可以在两个可能的选择之一之间进行选择,例如: 电子邮件是垃圾邮件还是非垃圾邮件。 肿瘤是恶性的或良性的。 在本文中,我们将研究 多类 分类,它可以从多种可能性中进行选择。例如: 这只狗

    2024年02月12日
    浏览(41)
  • 【机器学习】鸢尾花分类-逻辑回归示例

    功能: 这段代码演示了如何使用逻辑回归对鸢尾花数据集进行训练,并将训练好的模型保存到文件中。然后,它允许用户输入新的鸢尾花特征数据,使用保存的模型进行预测,并输出预测结果。 步骤概述: 加载数据和预处理: 使用 Scikit-Learn 中的 datasets 模块加载鸢尾花数据

    2024年02月10日
    浏览(40)
  • 机器学习算法(一): 基于逻辑回归的分类预测

    逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有\\\"回归\\\"两个字,但逻辑回归其实是一个 分类 模型,并且广泛应用于各个领域之中。虽然现在深度学习相对于这些传统方法更为火热,但实则这些传统方法由于其独特的优势依然广泛应用于各个领域中。 而对于

    2024年01月15日
    浏览(47)
  • 逻辑回归揭秘: 从分类原理到机器学习实践

    逻辑回归 (Logistic Regression) 尽管名字中带有 “回归” 两个字, 但主要是用来解决分类问题, 尤其是二分类问题. 逻辑回归的核心思想是: 通过将线性回归的输出传递给一个激活函数 (Activation Function) 比如 Sigmoid 函数) 将连续值转化为 0 到 1 之间的概率值, 在根据阈值 (Threshold) 对概

    2024年02月02日
    浏览(46)
  • 【Python机器学习】实验04 多分类实践(基于逻辑回归)

    Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Se

    2024年02月11日
    浏览(45)
  • 【机器学习300问】16、逻辑回归模型实现分类的原理?

            在上一篇文章中,我初步介绍了什么是逻辑回归模型,从它能解决什么问题开始介绍,并讲到了它长什么样子的。如果有需要的小伙伴可以回顾一下,链接我放在下面啦:                              【机器学习300问】15、什么是逻辑回归模型?     

    2024年01月25日
    浏览(55)
  • 【白话机器学习的数学】读书笔记(3)学习分类(感知机、逻辑回归)

    1.分类的目的 找到一条线把白点和黑点分开。这条直线是使 权重向量成为法线向量 的直线。(解释见下图) 直线的表达式为: ω ⋅ x = ∑ i = 1 n ω i ⋅ x i = 0 omega·x = sum_{i=1}^nomega_i · x_i = 0 ω ⋅ x = i = 1 ∑ n ​ ω i ​ ⋅ x i ​ = 0 ω omega ω 是权重向量 权重向量就是我们想要知

    2024年01月18日
    浏览(53)
  • 【Python机器学习】实验04(1) 多分类(基于逻辑回归)实践

    Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Se

    2024年02月14日
    浏览(45)
  • 【AI底层逻辑】——篇章5(上):机器学习算法之回归&分类

    目录 引入 一、何为机器学习 1、定规则和学规则 2、算法的定义

    2024年02月16日
    浏览(51)
  • 机器学习基础之《回归与聚类算法(4)—逻辑回归与二分类(分类算法)》

    一、什么是逻辑回归 1、逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛 2、叫回归,但是它是一个分类算法 二、逻辑回归的应用场

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包