【机器学习】机器学习中用到的高等数学知识-6. 组合数学 (Combinatorics)

embedded/2024/11/22 14:15:28/
  • 组合计数:用于计算特征选择和模型复杂度。

组合数学 (Combinatorics)

组合数学是研究有限或可数对象的组合、排列及计数规律的数学分支,在计算特征选择、模型复杂度和优化算法中有着广泛应用。以下详细介绍组合计数的概念、公式、推导过程以及实际应用。


1. 组合计数的基本概念

排列 (Permutation)

排列是指从 n 个不同元素中,按照一定顺序选出 r 个元素的排列方式。

公式:

P(n, r) = \frac{n!}{(n-r)!}

推导:

  • 从 n 个元素中选第一个有 n 种选择。
  • 第二个有 n−1 种选择,依此类推,总共有 n \cdot (n-1) \cdot \ldots \cdot (n-r+1) 种选择,等价于公式 \frac{n!}{(n-r)!}​。
组合 (Combination)

组合是指从 n 个不同元素中,不考虑顺序,选出 r 个元素的方式。

公式:

C(n, r) = \binom{n}{r} = \frac{n!}{r! \cdot (n-r)!}

推导:

  • 从 n 个元素中选出 r 个元素的排列数为 P(n, r)。
  • 但每个组合包含 r! 种不同排列,所以组合数为:

C(n, r) = \frac{P(n, r)}{r!} = \frac{n!}{r! \cdot (n-r)!}


2. 实际应用

(1) 特征选择

机器学习中,假设有 n 个特征,从中选择 r 个用于模型训练。可以通过组合计算出可能的特征组合数:

C(n, r) = \frac{n!}{r!(n-r)!}

(2) 模型复杂度

当训练神经网络时,若有 n 层,每层有 k 个神经元,则全连接层的可能连接数为:

C(k, 2) \times \text{number of layers}

(3) 数据采样

在统计中,若有 n 个样本,从中随机选择 r 个进行实验或交叉验证,组合计数直接给出可能的采样方式数。


3. Python实现

以下代码演示了排列和组合的计算,并绘制相关的直方图进行可视化。

import math
import matplotlib.pyplot as plt
import numpy as np# 计算排列数
def permutation(n, r):return math.factorial(n) // math.factorial(n - r)# 计算组合数
def combination(n, r):return math.factorial(n) // (math.factorial(r) * math.factorial(n - r))# 示例参数
n_values = range(1, 11)  # n 从 1 到 10
r = 3  # 固定 r 为 3# 计算排列和组合
perms = [permutation(n, r) for n in n_values if n >= r]
combs = [combination(n, r) for n in n_values if n >= r]# 绘制图形
plt.figure(figsize=(10, 6))
plt.bar(n_values[:len(perms)], perms, alpha=0.7, label="Permutation P(n, r)", color="blue")
plt.bar(n_values[:len(combs)], combs, alpha=0.7, label="Combination C(n, r)", color="orange")
plt.xlabel("n (number of elements)")
plt.ylabel("Count")
plt.title("Permutation and Combination Counts")
plt.legend()
plt.grid()
plt.show()


4. 推导和验证

排列验证

以 n=5, r=3 为例,排列公式:

P(5, 3) = \frac{5!}{(5-3)!} = \frac{120}{2} = 60

逐一列举验证:(5⋅4⋅3) 排列数为 60。

组合验证

以 n=5, r=3 为例,组合公式:

C(5, 3) = \frac{5!}{3! \cdot (5-3)!} = \frac{120}{6 \cdot 2} = 10

列举无重复选择的方式,验证结果为 10。


5. 总结

组合计数是机器学习、统计分析和优化算法的重要工具:

  • 排列用于关注顺序的任务(如排序问题)。
  • 组合用于忽略顺序的选择问题(如特征选择)。
  • Python的实现和可视化帮助更直观地理解这些概念,并应用到实际问题中。

http://www.ppmy.cn/embedded/139296.html

相关文章

D3基础:常用的10种插值方法

D3.js 提供了多种插值方法,用于在动画和数据驱动的可视化中平滑地过渡值。以下是一些常见的插值方法及其示例: 1. 数值插值 (d3.interpolateNumber) 数值插值用于在两个数值之间进行平滑过渡。 const interpolate d3.interpolateNumber(0, 100); cons…

基于卷积神经网络的皮肤病识别系统(pytorch框架,python源码,GUI界面,前端界面)

更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示: 皮肤病识别系统 vgg16 resnet50 卷积神经网络 GUI界面 前端界面(pytorch框架 python源码)_哔哩哔哩_bilibili (一)简介 基于卷积神经网络的皮肤病识…

短视频矩阵系统是什么?有什么功能?

短视频矩阵系统是什么?短视频矩阵系统是一个为视频创作者和运营者提供全面服务的综合平台,它涵盖了多账号管理、人工智能驱动的剪辑制作、定时自动发布功能、智能评论回复、跨平台流量引导及营销成果分析等多项功能。该系统利用先进的技术手段优化、管理…

oracle19c开机自启动

配置 cat > /etc/init.d/oracle19c <<EOF #!/bin/bash # Oracle startup and shutdown scriptexport ORACLE_HOME/opt/oracle/product/19c/dbhome_1 export ORACLE_SIDORCLCDB export LISTENER_NAMELISTENER # General exports and vars export PATH$ORACLE_HOME/bin…

Debezium-BinaryLogClient

文章目录 概要核心流程技术名词解释技术细节小结 概要 BinaryLogClient类&#xff0c;用于连接和监听 MySQL 服务器的二进制日志&#xff08;binlog&#xff09; 核心流程 技术名词解释 ### GTID (Global Transaction Identifier) 理解 #### 定义 GTID&#xff08;Global Tra…

k8s篇之流量转发走向

在 Kubernetes(K8s)中,流量转发通常通过以下几种方式进行管理: 1.Service 这是K8s中定义的一种抽象,用来暴露一组Pod的逻辑集合和访问它们的策略。当创建一个Service时,k8s会自动创建一个虚拟IP地址(ClusterIP),这个地址可以被集群内的其他服务访问。 ClusterIP:默…

JAVA题目笔记(十七)TreeSet对象排序+Map集合练习

一、TreeSet对象排序&#xff1a; 需求&#xff1a; public class Student implements Comparable<Student>{private String name;private int age;private int grade_Yu;private int grade_Shu;private int grade_Yin;private int sumthis.grade_Yinthis.grade_Shuthis…

突破自动驾驶瓶颈!KoMA:多智能体与大模型的完美融合

0.简介 本推文主要介绍了由来自北京航空航天大学的姜克谋、蔡轩和崔智勇教授等共同提出的一种名为KoMA的知识驱动的多智能体框架。论文《KoMA: Knowledge-driven Multi-agent Framework for Autonomous Driving with Large Language Models》提出了KoMA框架&#xff0c;通过结…