做网站需要相机吗/安卓优化大师app

做网站需要相机吗,安卓优化大师app,专业彩票网站建设,怎么建立一个免费网址K-means算法在无监督学习中的应用 K-means算法是一种典型的无监督学习算法,广泛用于聚类分析。在无监督学习中,模型并不依赖于标签数据,而是根据输入数据的特征进行分组。K-means的目标是将数据集分成K个簇,使得同一簇内的数据点…

K-means算法在无监督学习中的应用

K-means算法是一种典型的无监督学习算法,广泛用于聚类分析。在无监督学习中,模型并不依赖于标签数据,而是根据输入数据的特征进行分组。K-means的目标是将数据集分成K个簇,使得同一簇内的数据点相似度较高,而不同簇之间的数据点相似度较低。它通过寻找数据中的潜在结构来自动划分数据。

K-means算法广泛应用于聚类分析图像分割异常检测等领域。本文将详细介绍K-means算法的原理、数学模型、实现步骤,并从这三个应用方向举例讲解K-means在无监督学习中的应用。


1. K-means算法的原理和数学模型

1.1 K-means算法的基本思想

K-means算法是一种基于划分的聚类方法,目标是将数据集分成K个簇,并通过最小化簇内误差平方和(SSE, Sum of Squared Errors)来实现数据的聚类。K-means算法的核心在于通过不断地更新簇的中心(质心)和重新分配数据点,直到算法收敛。

1.2数学模型

假设我们有一个包含n个数据点的数据集,数据点的特征是d维的。K-means算法的目标是将数据集划分为K个簇,最小化每个簇内的误差平方和。具体的数学模型如下:

  1. 初始化: 随机选择K个数据点作为初始簇的中心(质心),记为 C 1 , C 2 , … , C K C_1, C_2, \dots, C_K C1,C2,,CK

  2. 分配步骤: 将每个数据点 x i x_i xi 分配到距离它最近的簇中心。距离度量通常使用欧氏距离:
    d ( x i , C k ) = ∥ x i − C k ∥ 2 d(x_i, C_k) = \| x_i - C_k \|^2 d(xi,Ck)=xiCk2
    数据点 x i x_i xi 被分配到最近的簇中心 C k C_k Ck

  3. 更新步骤: 更新每个簇的质心,新的质心是该簇所有数据点的均值:
    C k = 1 ∣ S k ∣ ∑ x i ∈ S k x i C_k = \frac{1}{|S_k|} \sum_{x_i \in S_k} x_i Ck=Sk1xiSkxi
    其中, S k S_k Sk 是簇 k k k 中的所有数据点, ∣ S k ∣ |S_k| Sk 是簇的大小。

  4. 停止条件: 重复分配和更新步骤,直到簇中心不再发生变化或达到最大迭代次数。

K-means的目标是最小化簇内误差平方和(SSE),公式如下:
S S E = ∑ k = 1 K ∑ x i ∈ S k ∥ x i − C k ∥ 2 SSE = \sum_{k=1}^K \sum_{x_i \in S_k} \| x_i - C_k \|^2 SSE=k=1KxiSkxiCk2
K-means通过迭代更新簇中心来减少SSE,从而实现最优的簇划分。


2. K-means的实现步骤

K-means算法的实现过程可以分为以下几个主要步骤:

  1. 数据预处理
    • 在应用K-means之前,通常需要对数据进行预处理,包括标准化和降维,尤其是当数据特征维度较高时。
  2. 选择K值
    • K值表示簇的数量。在实际应用中,K的选择非常重要,常用的方法有肘部法则(Elbow Method)来确定最佳K值。
  3. 初始化簇中心
    • 选择K个数据点作为初始簇中心,常用的初始化方法有随机选择K-means++
  4. 迭代更新
    • 分配每个数据点到最近的簇中心。
    • 更新簇中心为簇内所有数据点的均值。
    • 重复步骤直到簇中心不再变化。
  5. 评估聚类效果
    • 可以使用SSE、轮廓系数等指标来评估聚类效果。

3. KMeans类的参数解释

from sklearn.cluster import KMeans# n_clusters: 簇的数量,即 K 值
# init: 初始化中心点的方法,默认为 'k-means++',一种启发式方法来选择初始簇中心以加速收敛
# n_init: 运行 k-means 算法的次数,选择具有最小 SSE 的结果,默认为 'auto' 根据数据集大小自动选择
# max_iter: 单次运行的最大迭代次数,达到最大迭代次数或收敛时停止迭代
# tol: 收敛阈值,两次迭代误差小于此值即认为算法已收敛
# verbose: 是否输出详细信息,默认为 0,不输出
# random_state: 随机数生成器的种子,用于初始化中心点,保持结果可重复
# copy_x: 是否复制输入数据,默认为 True,表示复制输入数据
# algorithm: 计算的算法,'auto', 'full', 'elkan','auto'根据数据自动选择算法,'full'使用传统的 EM 算法,'elkan'是一种更有效的 K-means 算法kmeans = KMeans(n_clusters=8,init='k-means++',n_init='auto',max_iter=300,tol=0.0001,verbose=0,random_state=None,copy_x=True,algorithm='lloyd'
)kmeans.fit(X)

4. 确定最优K值

4.1 数据预处理(前摇)

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.decomposition import PCAimport matplotlib.pyplot as plt
import seaborn as snssns.set_theme(style="whitegrid", font="SimHei", rc={"axes.unicode_minus": False})  # 设置主题和字体# 加载数据集
iris = load_iris()
X = iris.data# 使用PCA降维到二维,以便可视化
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

4.2 肘部法(Elbow Method)

通过绘制不同K值下的SSE(误差平方和),并寻找SSE快速下降的“肘部”位置。

# 计算不同K值下的SSE
sse = []
for k in range(1, 11):kmeans = KMeans(n_clusters=k)kmeans.fit(X_pca)  # 这里X_pca是经过PCA降维后的数据sse.append(kmeans.inertia_)# 绘制SSE曲线
plt.figure(figsize=(8, 6))  # 设置图表大小
plt.plot(range(1, 11), sse, marker='o', color='b', linestyle='-', markersize=8)# 设置中文标题和标签
plt.title('肘部法则选择最佳K值', fontsize=14)
plt.xlabel('簇的数量 (K)', fontsize=12)
plt.ylabel('SSE', fontsize=12)# 显示图表
plt.show()

download

4.3 轮廓系数(Silhouette Score)

衡量聚类质量的指标,轮廓系数越大,表示聚类效果越好。

# 计算不同K值下的轮廓系数
silhouette_scores = []
for k in range(2, 11):  # 由于轮廓系数要求至少有两个簇kmeans = KMeans(n_clusters=k)cluster_labels = kmeans.fit_predict(X_pca)silhouette_avg = silhouette_score(X_pca, cluster_labels)silhouette_scores.append(silhouette_avg)# 绘制轮廓系数曲线
plt.figure(figsize=(8, 6))  # 设置图表大小
plt.plot(range(2, 11), silhouette_scores, marker='o', color='b', linestyle='-', markersize=8)# 设置中文标题和标签
plt.title('轮廓系数选择最佳K值', fontsize=14)
plt.xlabel('簇的数量 (K)', fontsize=12)
plt.ylabel('轮廓系数', fontsize=12)# 显示图表
plt.show()

download

4.4 遍历K值(肉眼比较法)

通过遍历不同K值,并比较它们的可视化效果。
(当使用 肘部法轮廓系数 无法确定K值时候,可遍历K值根据可视化结果比较作为参考)

# 设置图表的整体大小
fig, axes = plt.subplots(2, 4, figsize=(18, 8), sharex=True, sharey=True)  # 2行5列的子图排布# 遍历聚类数量1到8
for k in range(1, 9):kmeans = KMeans(n_clusters=k)kmeans.fit(X_pca)  # 用降维后的数据进行聚类labels = kmeans.labels_  # 聚类标签# 选择子图位置ax = axes[(k - 1) // 4, (k - 1) % 4]# 绘制每个子图ax.scatter(X_pca[:, 0], X_pca[:, 1], c=labels, cmap='viridis', s=50, alpha=0.6)ax.set_title(f'k = {k}', fontsize=12)ax.set_xlabel('特征1', fontsize=10)ax.set_ylabel('特征2', fontsize=10)ax.grid(True)# 调整布局,防止标签重叠
plt.tight_layout()
plt.show()

download


5. K-means算法的应用

K-means算法广泛应用于多个领域,以下文中三个常见的应用方向进行举例:聚类分析图像分割异常检测

5.1 聚类分析

聚类分析旨在将数据集划分为多个簇,使得簇内的数据点相似度高,簇间的数据点相似度低。

5.1.1 数据加载、降维并聚类

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.decomposition import PCAimport matplotlib.pyplot as plt
import seaborn as snssns.set_theme(style="whitegrid", font="SimHei", rc={"axes.unicode_minus": False})  # 设置主题和字体# 加载数据集
iris = load_iris()
X = iris.data# 使用PCA降维到二维,以便可视化
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)# 聚类
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_pca)

5.1.2 绘制聚类散点图

# 可视化聚类结果
plt.figure(figsize=(10, 8))  # 调整画布大小
sns.set_theme(style="whitegrid", font="SimHei", rc={"axes.unicode_minus": False})  # 设置主题和字体# 绘制散点图
scatter = sns.scatterplot(x=X_pca[:, 0],y=X_pca[:, 1],hue=clusters,palette='bright',style=clusters,markers=["o", "s", "D"],s=100,  # 调整点的大小edgecolor='black',  # 添加边框颜色linewidth=0.8,  # 边框线宽alpha=0.8,  # 透明度
)# 设置标题和轴标签
plt.title("K-Means聚类结果", fontsize=18, fontweight="bold", pad=10)
plt.xlabel("主成分1", fontsize=14, labelpad=10)
plt.ylabel("主成分2", fontsize=14, labelpad=10)# 设置轴刻度字体大小
plt.tick_params(axis='x', labelsize=12)
plt.tick_params(axis='y', labelsize=12)# 设置图例样式
legend = plt.legend(title="聚类类别",title_fontsize=13,fontsize=12,loc='lower right',  # 调整图例位置bbox_to_anchor=(0.975, 0.025),  # 向左上偏移0.1frameon=True,  # 添加图例边框shadow=True,  # 添加阴影fancybox=True,  # 圆角边框borderpad=1  # 内边距
)
legend.get_frame().set_linewidth(1.2)  # 设置图例边框线宽# 添加网格线样式
plt.grid(color='gray', linestyle='--', linewidth=0.8, alpha=0.3)# 调整布局
plt.tight_layout()# 显示图表
plt.show()

download

5.1.3 添加轮廓线

# 绘制轮廓线
sns.kdeplot(x=X_pca[:, 0],y=X_pca[:, 1],hue=clusters,palette='bright',levels=5,alpha=0.5,linewidths=1.5,ax=scatter,
)

download

5.1.4 添加簇中心点

# 将中心点转换到PCA空间
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1],c='red', marker='X', s=200, label='聚类中心', edgecolor='black', linewidth=2
)  # 绘制中心点

download


5.2 图像分割

图像分割是指将图像划分为多个区域,每个区域的像素在颜色、纹理等特征上具有相似性。K-means算法可以用于图像分割,将图像的每个像素聚类到不同的簇中,从而实现对图像的分割。

5.2.1 导入图片

from sklearn.datasets import load_sample_image
import matplotlib.pyplot as plt# 加载“chinajpg”样本图像
flower = load_sample_image('china.jpg')# 显示图片
plt.figure(figsize=(6, 6))
plt.imshow(flower)
plt.axis('off')  # 禁用轴
plt.show()

download

5.2.2 分割过程

from sklearn.cluster import KMeans
import numpy as np# 加载图像并转换为numpy数组
china = load_sample_image("china.jpg")
china = np.array(china)# 将图像转为二维数组(每个像素为一个数据点)
X = china.reshape(-1, 3)  # 3是RGB通道# K-means聚类,设定聚类数为4
kmeans = KMeans(n_clusters=3, random_state=1)
kmeans.fit(X)# 获取聚类标签
labels = kmeans.labels_# 将标签重新变为图像的形状
segmented_image = labels.reshape(china.shape[0], china.shape[1])

5.2.3 可视化

import seaborn as sns
from mpl_toolkits.mplot3d import Axes3D  # 可视化RGB三维散点图sns.set_theme(style="whitegrid", font="SimHei", rc={"axes.unicode_minus": False})  # 设置主题和字体# 提取RGB通道数据
R = X[:, 0]
G = X[:, 1]
B = X[:, 2]# 创建3D散点图
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')# 使用透明度(alpha)调整点的透明度
scatter = ax.scatter(R, G, B, c=labels, cmap='viridis', s=5, alpha=0.5)  # alpha为透明度# 设置坐标轴标签和标题
ax.set_xlabel('R', fontsize=12, labelpad=10)
ax.set_ylabel('G', fontsize=12, labelpad=10)
ax.set_zlabel('B', fontsize=12, labelpad=10)
ax.set_title('K-means 聚类 RGB 三维散点图', fontsize=14)# 设置更精致的坐标轴刻度
ax.tick_params(axis='both', which='major', labelsize=10)# 显示图形
plt.show()

download

# 可视化图像分割结果
plt.figure(figsize=(8, 6))
plt.imshow(segmented_image, cmap='viridis')
plt.title('图像分割:K-means聚类', fontsize=14)
# plt.axis('off')  # 禁用坐标轴
plt.show()

download

5.2.4 拆分结果

# 将标签重新变为图像的形状
segmented_image_list = []# 创建每个簇的分割图像
for cluster in range(3):  # 假设我们有3个簇# 创建一个全为0的图像(与原图尺寸一致)segmented_image = np.zeros_like(china)# 将属于该簇的像素赋值为原图像素,其他像素设置为黑色# 获取属于该簇的像素的索引cluster_pixels = labels == cluster# 将符合条件的像素赋值segmented_image.reshape(-1, 3)[cluster_pixels] = china.reshape(-1, 3)[cluster_pixels]# 添加到分割图像列表中segmented_image_list.append(segmented_image)# 创建子图布局
fig, axes = plt.subplots(1, 3, figsize=(12, 10))# 绘制每个聚类的分割图像
for i, ax in enumerate(axes.flat):ax.imshow(segmented_image_list[i])  # 显示分割后的图像ax.set_title(f'Cluster {i+1}', fontsize=14)  # 设置标题为聚类编号ax.axis('off')  # 禁用坐标轴# 调整布局,防止重叠
plt.tight_layout()
plt.show()

download


5.3 异常检测

K-means算法也可用于异常检测,尤其是在数据集中存在噪声或异常点时。通过计算数据点到簇中心的距离,可以识别那些远离簇中心的点作为异常点。这些异常点可能代表了异常行为或错误数据。

5.3.1 生成原始数据集并可视化

from sklearn.cluster import KMeans
import numpy as np
from scipy.spatial.distance import cdist
import matplotlib.pyplot as plt
import seaborn as sns# 设置主题和字体
sns.set_theme(style="whitegrid", font="SimHei", rc={"axes.unicode_minus": False})# 生成模拟数据:两个明显簇和少量离群点
np.random.seed(42)
cluster_1 = np.random.normal(loc=[5, 5], scale=1.5, size=(100, 2))
cluster_2 = np.random.normal(loc=[15, 15], scale=1.5, size=(100, 2))
outliers = np.random.uniform(low=[0, 0], high=[20, 20], size=(10, 2))
X = np.vstack([cluster_1, cluster_2, outliers])# 可视化样本
plt.figure(figsize=(8, 6))
x = X[:, 0]
y = X[:, 1]
plt.scatter(x, y, s=20, c='gray', alpha=0.7, label='数据点')
plt.title("数据点分布图", fontsize=16)
plt.xlabel("X轴", fontsize=12)
plt.ylabel("Y轴", fontsize=12)
plt.grid(color='gray', linestyle='--', linewidth=0.8, alpha=0.3)  # 添加网格线样式
plt.legend()
plt.show()

download

5.3.2 聚类并进行异常值比较

# KMeans算法拟合
kmeans_model = KMeans(n_clusters=2, random_state=42).fit(X)# 聚类中心
centroids = kmeans_model.cluster_centers_# 每个样本到聚类中心的欧式距离
D = cdist(X, centroids, 'euclidean')# 每个样本的最近聚类中心索引
cluster_labels = D.argmin(axis=1)# 每个样本到所属聚类中心的距离
distances_to_cluster = np.min(D, axis=1)# 设置异常点的距离阈值
threshold = 4.0# 异常点判定:仅比较点与其所属簇中心的距离
outliers = X[distances_to_cluster > threshold]

array([[15.77257153, 20.77909724],
[18.47198785, 12.19910221],
[10.13809899, 13.46341854],
[18.19955006, 12.0718683 ],
[ 1.12750993, 17.29444753],
[16.25802018, 19.99435347],
[19.93273674, 11.10863411],
[16.99294781, 4.94696203],
[ 9.01088271, 2.5831883 ],
[19.08102055, 12.12349269],
[ 4.57285611, 13.43401369],
[12.36256481, 7.16325436]])

5.3.3 可视化异常值检测结果

# 可视化
plt.figure(figsize=(10, 8))# 绘制簇的点
palette = sns.color_palette("husl", 2)
for i in range(2):  # 遍历每个簇plt.scatter(X[cluster_labels == i, 0], X[cluster_labels == i, 1], s=50, color=palette[i], alpha=0.7, label=f"簇 {i+1}", edgecolor='k', marker='o')# 绘制聚类中心
plt.scatter(centroids[:, 0], centroids[:, 1], s=200, c='red', marker='x', label='聚类中心')# 绘制离群点
if len(outliers) > 0:plt.scatter(outliers[:, 0], outliers[:, 1], s=100, c='red', label='离群点', edgecolor='k', zorder=6)# 绘制分界线
for center in centroids:circle = plt.Circle(center, threshold, color='gray', alpha=0.3, fill=True, linestyle='--')plt.gca().add_artist(circle)# 图表设置
plt.title("KMeans 聚类与优化后的异常值检测", fontsize=16)
plt.xlabel("X轴", fontsize=12)
plt.ylabel("Y轴", fontsize=12)
plt.grid(color='gray', linestyle='--', linewidth=0.8, alpha=0.3)  # 添加网格线样式
plt.legend(loc='upper left', fontsize=10)
plt.tight_layout()
plt.show()

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 35.6 + JetPack v5.1.4之 pytorch升级

Linux 35.6 JetPack v5.1.4之 pytorch升级 1. 源由2. 升级步骤1:获取二进制版本步骤2:安装二进制版本步骤3:获取torchvision步骤4:安装torchvision步骤5:检查安装版本 3. 使用4. 补充4.1 torchvision版本问题4.2 支持…

Spring——自动装配

假设一个场景: 一个人(Person)有一条狗(Dog)和一只猫(Cat),狗和猫都会叫,狗叫是“汪汪”,猫叫是“喵喵”,同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…

TCP与DNS的报文分析

场景拓扑: 核心路由配置: 上(DNS):10.1.1.1/24 下(WEB):20.1.1.1/24 左(client):192.168.0.1/24 右(PC3):192.168.1.1/24Clint2配置&a…

PWR-STM32电源控制

一、原理 睡眠模式不响应其他操作,比如烧写程序,烧写时按住复位键松手即可下载,在禁用JTAG也可如此烧写程序。 对于低功耗模式可以通过RTC唤醒、外部中断唤醒、中断唤醒。 1、电源框图: VDDA主要负责模拟部分的供电、Vref和Vref-…

WebSocket 测试入门篇

Websocket 是一种用于 H5 浏览器的实时通讯协议,可以做到数据的实时推送,可适用于广泛的工作环境,例如客服系统、物联网数据传输系统, 基础介绍 我们平常接触最多的是 http 协议的接口,http 协议是请求与响应的模式&…

基于机器学习的故障诊断(入门向)

一、原始信号的特征提取 1.EMD经验模态分解的作用 信号分析:EMD可以将信号分解为多个IMFs,每个IMF代表信号中的一个特定频率和幅度调制的成分。这使得EMD能够提供对信号的时频特征进行分析的能力(特征提取用到的)。信号去噪&…

【算法刷题】leetcode hot 100 双指针

文章目录 283. 移动零11. 盛最多水的容器15. 三数之和42. 接雨水 283. 移动零 https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked 解法一: 找到第一个等于0的下标,然后继续向右找到第一个不等于0的…

【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

目录 C++寻宝石 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 五、运行结果 六、考点分析 七、推荐资料 C++寻宝石 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 有N(1<N<100)个盒子排成一排,每个盒子都放…

Nginx入门笔记

Nginx入门笔记 一、Nginx基本概念二、代理1、正向代理2、反向代理 三、准备工作1、CentOS 7安装nginx&#xff08;1&#xff09;. 安装必要的依赖&#xff08;2&#xff09;下载nginx&#xff08;3&#xff09;编译安装&#xff08;4&#xff09;编译并安装 Nginx(5)启动nginx …

重塑视频创作的格局!ComfyUI-Mochi本地部署教程

一、介绍 mochi是近期Genmo公司开源的先进视频生成模型&#xff0c;具有高保真运动和强大的提示遵循性。此模型的发布极大的缩小了闭源和开源视频生成系统之间的差距。 目前&#xff0c;视频生成模型与现实之间存在巨大差距。其中最影响视频生成的两个关键功能也就是运动质量和…

el-table自定义按钮控制扩展expand

需求&#xff1a;自定义按钮实现表格扩展内容的展开和收起&#xff0c;实现如下&#xff1a; 将type“expand”的表格列的宽度设置为width"1"&#xff0c;让该操作列不展示出来&#xff0c;然后通过ref动态调用组件的内部方法toggleRowExpansion(row, row.expanded)控…

Ubuntu 22.04 英伟达开发环境 CUDA 12.4 | cuDNN 9.0.0 | TensorRT 10.1 版本安装指南

NVIDIA 驱动安装 前置 笔者近期重整服务器&#xff0c;计划重新安装操作系统并配置新的开发环境。服务器的主要配置如下&#xff1a; Dell PowerEdge R730 Intel Xeon E5-2630v3 x2 64GB ECC DDR4 NVIDIA GeForce RTX 2080 Ti Rev. A Ubuntu 22.04.5 LTS x86_64 (No Desktop…

数据结构-栈、队列和数组

栈 栈的定义 栈是只允许在一端进行插入或删除操作的线性表。首先栈式一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作&#xff0c;如图所示。 栈包括&#xff1a; 栈顶&#xff08;Top&#xff09;。允许进入插入删除的那一端。 栈底&#xff08;Butt…

Mysql快速列出来所有列信息

文章目录 需求描述实现思路1、如何查表信息2、如何取字段描述信息3、如何将列信息一行展示4、拼接最终结果 需求描述 如何将MySQL数据库中指定表【tb_order】的所有字段都展示出来&#xff0c;以备注中的中文名为列名。 实现思路 最终展示效果&#xff0c;即拼接出可执行执行…

LLM大模型实践10-聊天机器人

大型语言模型带给我们的激动人心的一种可能性是&#xff0c;我们可以通过它构建定制的聊天机器人 &#xff08;Chatbot&#xff09;&#xff0c;而且只需很少的工作量。在这一章节的探索中&#xff0c;我们将带你了解如何利用会话形式&#xff0c;与具 有个性化特性&#xff08…

用python实现烟花代码,完整代码拿走不谢

有时候用python实现一些有趣的代码&#xff0c;既有趣&#xff0c;又能提升知识 使用Python实现动态烟花代码 效果如下&#xff1a; 不废话&#xff0c;直接上代码&#xff1a; import pygame from random import randint, uniform, choice import mathvector pygame.math…

【Java项目】基于SpringBoot的【校园交友系统】

【Java项目】基于SpringBoot的【校园交友系统】 技术简介&#xff1a;系统软件架构选择B/S模式、SpringBoot框架、java技术和MySQL数据库等&#xff0c;总体功能模块运用自顶向下的分层思想。 系统简介&#xff1a;系统主要包括管理员和用户。 (a) 管理员的功能主要有首页、个人…

使用强化学习训练神经网络玩俄罗斯方块

一、说明 在 2024 年暑假假期期间&#xff0c;Tim学习并应用了Q-Learning &#xff08;一种强化学习形式&#xff09;来训练神经网络玩简化版的俄罗斯方块游戏。在本文中&#xff0c;我将详细介绍我是如何做到这一点的。我希望这对任何有兴趣将强化学习应用于新领域的人有所帮助…

大湾区经济网与澳门红刊杂志社签署战略合作

大湾区经济网澳门1月9日电&#xff08;王强&#xff09;2025年1月9日&#xff0c;在粤港澳大湾区建设稳步推进的时代背景下&#xff0c;大湾区经济网与澳门红刊杂志社成功签署了合作协议&#xff0c;标志着双方在媒体战略合作领域迈出了坚实的一步&#xff0c;将共同为粤港澳大…

力扣 二叉树的最大深度

树的遍历&#xff0c;dfs与bfs基础。 题目 注意这种题要看根节点的深度是0还是1。 深度优先遍历dfs&#xff0c;通过递归分别计算左子树和右子树的深度&#xff0c;然后返回左右子树深度的最大值再加上 1。递归会一直向下遍历树&#xff0c;直到达到叶子节点或空节点。在回溯…