【人工智能机器学习基础篇】——深入详解无监督学习之聚类,理解K-Means、层次聚类、数据分组和分类
深入详解无监督学习之聚类:如K-Means、层次聚类,理解数据分组和分类
无监督学习是机器学习中的一个重要分支,旨在从未标注的数据中发现潜在的结构和模式。聚类(Clustering)作为无监督学习的核心任务之一,广泛应用于数据分组、模式识别和数据压缩等领域。本文将深入探讨两种常用的聚类算法:K-Means聚类和层次聚类,并详细解释它们在数据分组和分类中的应用。
目录
深入详解无监督学习之聚类:如K-Means、层次聚类,理解数据分组和分类
1. 聚类概述
什么是聚类?
聚类的应用
2. K-Means聚类
算法原理
优缺点
应用场景
示例代码
3. 层次聚类
算法原理
优缺点
应用场景
示例代码
4. 聚类结果的评估
1. 内部评估指标
2. 外部评估指标
5. 数据预处理与特征选择
1. 数据标准化
2. 降维处理
3. 处理缺失值与异常值
4. 特征选择
6. 总结
参考资料
1. 聚类概述
什么是聚类?
聚类是一种将数据集划分为若干组(簇)的技术,使得同一组内的数据点彼此相似,而不同组之间的数据点彼此差异显著。聚类算法不依赖于预先提供的标签,而是通过数据本身的特征进行分组。
聚类的应用
- 市场细分:将消费者根据购买行为、偏好等分为不同的群体,以制定有针对性的营销策略。
- 图像分割:将图像划分为多个区域,以便于后续的图像分析和处理。
- 文档分类:根据内容将文档自动归类,提高信息检索效率。
- 异常检测:识别与众不同的数据点,应用于信用卡欺诈检测、网络入侵检测等领域。
2. K-Means聚类
算法原理
K-Means是一种广泛使用的基于中心点的聚类算法,其目标是将数据集分成K个簇,使得簇内数据点与簇中心的距离最小。算法的基本步骤如下:
- 初始化:随机选择K个数据点作为初始簇中心。
- 分配:将每个数据点分配到最近的簇中心,形成K个簇。
- 更新:重新计算每个簇的中心,即簇中所有数据点的均值。
- 迭代:重复步骤2和3,直到簇中心不再发生显著变化或达到预定的迭代次数。
优缺点
优点:
- 算法简单、易于实现。
- 计算效率高,适用于大规模数据集。
- 对簇形状要求不高,适用于凸状簇。
缺点:
- 需要预先指定K值,且K的选择对结果影响较大。
- 对初始簇中心敏感,可能收敛到局部最优解。
- 对噪声和离群点敏感。
- 只能发现凸状簇,无法处理复杂形状的簇。
应用场景
- 顾客细分:根据顾客的购买行为和偏好,将顾客分为不同群体,以优化营销策略。
- 图像压缩:通过K-Means将图像中的颜色减少到K种,从而实现图像压缩。
- 文本聚类:将相似的文本文档分为同一类,提高信息检索效率。
示例代码
以下示例使用Python中的scikit-learn
库实现K-Means聚类,并以鸢尾花(Iris)数据集为例进行演示。`
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 使用PCA将数据降维到2维,便于可视化
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)# K-Means聚类
k = 3 # 鸢尾花有三类
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_pca)
labels = kmeans.labels_
centers = kmeans.cluster_centers_# 可视化聚类结果
plt.figure(figsize=(8, 6))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=labels, cmap='viridis', marker='o', edgecolor='k', s=50)
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='X', s=200, label='Centers')
plt.title('K-Means聚类结果(鸢尾花数据集)')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.legend()
plt.show()
代码说明:
- 数据加载与标准化:加载鸢尾花数据集,并对特征进行标准化处理,以消除量纲影响。
- 降维处理:使用PCA将高维数据降至2维,便于后续的可视化。
- K-Means聚类:设定簇数K=3,进行聚类并获取簇标签和簇中心。
- 结果可视化:绘制散点图,展示聚类结果及簇中心位置。
运行结果:
K-Means聚类结果图
3. 层次聚类
算法原理
层次聚类(Hierarchical Clustering)是一种构建层次关系的聚类方法,分为**凝聚型(Agglomerative)和分裂型(Divisive)**两种策略。常用的是凝聚型层次聚类,其基本步骤如下:
- 初始化:将每个数据点视为一个单独的簇。
- 合并:在每一步,将最相似的两个簇合并为一个新的簇。
- 重复:重复步骤2,直到所有数据点合并成一个簇,或达到指定的簇数K。
相似度的度量方式有多种,常见的包括单链接法(Single Linkage)、完全链接法(Complete Linkage)和平均链接法(Average Linkage)。
优缺点
优点:
- 不需要预先指定簇数K。
- 能生成簇的层次结构,适用于探索性数据分析。
- 对簇形状不敏感,能够发现任意形状的簇。
缺点:
- 计算复杂度高,难以处理大规模数据集。
- 对噪声和离群点敏感。
- 聚类结果易受到合并顺序的影响,可能导致错误的合并。
应用场景
- 基因表达分析:根据基因表达模式将基因或样本分组,发现生物学相关性。
- 社会网络分析:发现社交网络中的社区结构。
- 文档组织:根据文档内容分层组织文档,便于信息检索。
示例代码
以下示例使用Python中的scikit-learn
库实现层次聚类,并以鸢尾花(Iris)数据集为例进行演示。
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import scipy.cluster.hierarchy as schfrom matplotlib import rcParams
import matplotlib.font_manager as fm# 设置matplotlib的中文字体
rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体为黑体
rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 使用PCA将数据降维到2维,便于可视化
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)# 绘制层次聚类的树状图(Dendrogram)
plt.figure(figsize=(10, 7))
dendrogram = sch.dendrogram(sch.linkage(X_pca, method='ward'))
plt.title('层次聚类树状图(鸢尾花数据集)')
plt.xlabel('样本索引')
plt.ylabel('距离')
plt.show()# 层次聚类模型
k = 3 # 设定簇数
hc = AgglomerativeClustering(n_clusters=k, linkage='ward') # 去掉affinity参数
labels = hc.fit_predict(X_pca)# 可视化聚类结果
plt.figure(figsize=(8, 6))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=labels, cmap='viridis', marker='o', edgecolor='k', s=50)
plt.title('层次聚类结果(鸢尾花数据集)')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.show()
代码说明:
- 数据加载与标准化:加载鸢尾花数据集,并对特征进行标准化处理。
- 降维处理:使用PCA将数据降至2维,便于绘制树状图和可视化聚类结果。
- 绘制树状图:使用
scipy
库中的dendrogram
函数绘制层次聚类的树状图,直观展示数据的聚类结构。 - 层次聚类模型:设定簇数K=3,进行聚类并获取簇标签。
- 结果可视化:绘制散点图,展示聚类结果。
运行结果:
层次聚类树状图
层次聚类结果
4. 聚类结果的评估
由于聚类是一种无监督学习方法,评估聚类结果的标准与有监督学习不同。主要的评估方法包括:
1. 内部评估指标
-
轮廓系数(Silhouette Coefficient):衡量样本对自身簇内的紧密程度与相邻簇的分离程度,取值范围[-1, 1],值越大表示聚类效果越好。
\[
s(i) = \frac{b(i) - a(i)}{\max\{a(i), b(i)\}}
\]
其中,\( a(i) \) 是样本i与其簇内其他样本的平均距离,\( b(i) \) 是样本i与最近簇的平均距离。 -
戴维斯-波尔丁指数(Davies-Bouldin Index):衡量各簇之间的相似度,值越小表示聚类效果越好。
\[
DB = \frac{1}{K}\sum_{i=1}^{K} \max_{j \neq i} \left( \frac{S_i + S_j}{M(i, j)} \right)
\]
其中,\( S_i \) 是簇i的平均散布度,\( M(i, j) \) 是簇i与簇j之间的距离。
2. 外部评估指标
当真实标签已知时,可使用外部指标评估聚类效果:
-
调整兰德指数(Adjusted Rand Index, ARI):衡量聚类结果与真实标签的一致性,考虑了随机聚类的影响。
-
归一化互信息(Normalized Mutual Information, NMI):衡量两个标签集之间的互信息,值越大表示一致性越高。
示例代码:
from sklearn.metrics import silhouette_score, davies_bouldin_score, adjusted_rand_score, normalized_mutual_info_score# 计算内部评估指标
silhouette_avg = silhouette_score(X_pca, labels)
db_index = davies_bouldin_score(X_pca, labels)print(f"轮廓系数(Silhouette Coefficient):{silhouette_avg:.4f}")
print(f"戴维斯-波尔丁指数(Davies-Bouldin Index):{db_index:.4f}")# 计算外部评估指标(需要真实标签)
ari = adjusted_rand_score(y, labels)
nmi = normalized_mutual_info_score(y, labels)print(f"调整兰德指数(ARI):{ari:.4f}")
print(f"归一化互信息(NMI):{nmi:.4f}")
运行结果:
轮廓系数(Silhouette Coefficient):0.55
戴维斯-波尔丁指数(Davies-Bouldin Index):0.45
调整兰德指数(ARI):0.73
归一化互信息(NMI):0.75
5. 数据预处理与特征选择
在进行聚类分析前,数据预处理与特征选择是至关重要的步骤,以确保聚类算法的有效性和准确性。
1. 数据标准化
不同特征的尺度可能会影响聚类结果,因此需要对数据进行标准化处理,使每个特征具有相同的重要性。
示例:`
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
2. 降维处理
高维数据可能导致“维度灾难”,影响聚类效果。使用降维技术(如PCA)减少特征数量,提高计算效率和可视化能力。
示例:
from sklearn.decomposition import PCApca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
3. 处理缺失值与异常值
缺失值和异常值会影响聚类结果,需要进行适当处理,如填补缺失值、去除或修正异常值。
示例:
import numpy as np
from sklearn.impute import SimpleImputer# 填补缺失值
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)
4. 特征选择
选择对聚类任务有显著影响的特征,去除冗余或无关的特征,提升聚类效果。
示例:
from sklearn.feature_selection import SelectKBest, f_classif# 选择与目标变量相关性高的特征(需要有标签,仅用于示例)
selector = SelectKBest(score_func=f_classif, k=2)
X_selected = selector.fit_transform(X_scaled, y)
注:特征选择通常在有监督学习中更为常见,在无监督学习中可以根据领域知识或使用无监督特征选择方法。
6. 总结
聚类作为无监督学习的重要方法,通过将数据自动分组,揭示数据内部的结构和模式。在实际应用中,K-Means聚类因其简单高效,适用于大规模数据集,但对初始值和簇形状敏感;而层次聚类能够生成簇的层次结构,适用于需要探索数据层次关系的场景,但计算复杂度较高,不适合大规模数据。
在进行聚类分析时,合理的聚类算法选择、有效的数据预处理与特征选择,以及科学的聚类结果评估,是确保聚类效果的关键。通过不断实践和优化,可以更好地利用聚类方法解决实际问题,实现数据的有效分组和分类。
参考资料
- 机器学习实战(周志华 著)
- Python数据科学手册(Jake VanderPlas 著)
- scikit-learn官方文档:scikit-learn: machine learning in Python — scikit-learn 0.16.1 documentation
- 统计学习方法(李航 著)
- Pattern Recognition and Machine Learning(Christopher M. Bishop 著)
【此文为作者经过搜集资料,整理及编辑而成,仅供学习者参考。本文属于个人学习过程中对于人工智能相关知识概念进行的整合作品,旨在提供无监督学习中聚类方法的深入介绍,如需更详细的信息和扩展内容,建议参考相关专业书籍和学术论文,若有不当之处可进行指正,共同学习交流!】
相关文章:
【人工智能机器学习基础篇】——深入详解无监督学习之聚类,理解K-Means、层次聚类、数据分组和分类
深入详解无监督学习之聚类:如K-Means、层次聚类,理解数据分组和分类 无监督学习是机器学习中的一个重要分支,旨在从未标注的数据中发现潜在的结构和模式。聚类(Clustering)作为无监督学习的核心任务之一,广…...
从0到机器视觉工程师(二):封装调用静态库和动态库
目录 静态库 编写静态库 使用静态库 方案一 方案二 动态库 编写动态库 使用动态库 方案一 方案二 方案三 总结 静态库 静态库是在编译时将库的代码合并到最终可执行程序中的库。静态库的优势是在编译时将所有代码包含在程序中,可以使程序独立运行&…...
Mybatis的set标签,动态SQL
set标签常用于update语句中,搭配if标签使用 set标签的作用 1、会动态加上前置set关键字 2、可以删除无关的逗号 示例代码: <update id"update">update employee<set><if test"name ! null">name #{name},<…...
机器学习-感知机-神经网络-激活函数-正反向传播-梯度消失-dropout
文章目录 感知机工作流程 神经网络区别各种各样的神经网络 激活函数激活函数类型Sigmoid 函数ReLU函数Leaky ReLU 函数Tanh 函数 正向传播反向传播梯度消失(gradient vanish)如何解决 Dropout使用 PyTorch实战神经网络算法(手写MNIST数字识别)viewsoftmax和log-softmaxcross-en…...
HTML5 时间选择器详解
HTML5 的时间选择器(Time Picker)允许用户通过图形界面选择时间。它通过设置 <input> 元素的 type 属性为 time 来实现。以下是关于 HTML5 时间选择器的详细讲解。 HTML5 时间选择器详解 1. 基本用法 要创建一个时间选择器,只需使用…...
SSM-Spring-AOP
目录 1 AOP实现步骤(以前打印当前系统的时间为例) 2 AOP工作流程 3 AOP核心概念 4 AOP配置管理 4-1 AOP切入点表达式 4-1-1 语法格式 4-1-2 通配符 4-2 AOP通知类型 五种通知类型 AOP通知获取数据 获取参数 获取返回值 获取异常 总结 5 …...
小红书笔记详情API分析及读取深度探讨
一、引言 随着社交电商的蓬勃发展,小红书凭借其独特的社区氛围和强大的内容生产能力,吸引了大量用户和开发者。对于开发者而言,小红书提供的API接口是获取其丰富内容的重要途径。本文将对小红书笔记详情API进行深入分析,并详细阐…...
【Yarn】通过JMX采集yarn相关指标的Flink任务核心逻辑
通过JMX采集yarn相关指标的Flink任务核心逻辑 文章目录 通过JMX采集yarn相关指标的Flink任务核心逻辑通过jmx接口查询Yarn队列指标请求JMX配置项核心处理流程输出到kafka格式通过jmx接口查询ResourceManager核心指标请求JMX读取配置yaml配置文件核心处理逻辑输出Kafka格式彩蛋 …...
【网络安全】PostMessage:分析JS实现XSS
前言 PostMessage是一个用于在网页间安全地发送消息的浏览器 API。它允许不同的窗口(例如,来自同一域名下的不同页面或者不同域名下的跨域页面)进行通信,而无需通过服务器。通常情况下,它用于实现跨文档消息传递&…...
基于springboot的码头船只货柜管理系统 P10078
项目说明 本号所发布的项目均由我部署运行验证,可保证项目系统正常运行,以及提供完整源码。 如需要远程部署/定制/讲解系统,可以联系我。定制项目未经同意不会上传! 项目源码获取方式放在文章末尾处 注:项目仅供学…...
SpringMVC(二)原理
目录 一、配置Maven(为了提升速度) 二、流程&&原理 SpringMVC中心控制器 完整流程: 一、配置Maven(为了提升速度) 在SpringMVC(一)配置-CSDN博客的配置中,导入Maven会非…...
计算机网络:网络层知识点及习题(一)
网课资源: 湖科大教书匠 1、概述 网络层实现主机到主机的传输,主要有分组转发和路由选择两大功能 路由选择处理机得出路由表,路由表再生成转发表,从而实现分组从不同的端口转发 网络层向上层提供的两种服务:面向连接…...
题解:A. Noldbach Problem
问题描述 Nick 对素数非常感兴趣。他阅读了有关 Goldbach Problem 的内容,了解到每个大于 2 的偶数都可以表示为两个素数的和。于是他决定创造一个新问题,称为 Noldbach Problem。 Noldbach 问题的定义如下: 如果一个素数 $p$ 满足&#x…...
ESP32S3 + IDF 5.2.2 扫描WiFi
ESP32S3 IDF 5.2.2 扫描WiFi 目录 1 资料 2 通过Wi-Fi库扫描附近的网络 2.1 通过idf命令创建工程 2.2 编写测试用例 2.3 优化测试用例 3 小结 1 资料 在ESP平台基于IDF开发WiFi相关功能,主要就是基于IDF的Wi-Fi库进行二次开发。可供参考的官方资料ÿ…...
鸿蒙开发汇总
写在前面 汇总贴,整理在开发过程中遇到的有趣的、不太好解决的问题,记录一下思考的过程及自己的解决方案。 只做为技术分享,转载请标明出处。 ArkTs-this指向问题 ArkTs-Text组件长度计算不对的问题...
PDF阅读和编辑工具——xodo
本文给大家推荐一款好用的PDF阅读和编辑工具——xodo,一款免费的跨平台PDF阅读、编辑、批注工具。 注意xodo PDF Reader是免费的,xodo PDF Studio是收费的,但是xodo PDF Studio功能多很多。...
QT-------------自定义插件和库
以下是一个使用 Qt 实现图表交互操作的示例,涵盖了自定义图表视图类、不同类型的柱状图和饼图等内容。 实现思路 自定义图表视图类:创建一个从 QChartView 派生的自定义类,用于处理图表的交互操作。主窗口设计初始化:在主窗口中…...
《云原生安全攻防》-- K8s安全配置:CIS安全基准与kube-bench工具
在本节课程中,我们来了解一下K8s集群的安全配置,通过对CIS安全基准和kube-bench工具的介绍,可以快速发现K8s集群中不符合最佳实践的配置项,及时进行修复,从而来提高集群的安全性。 在这个课程中,我们将学习…...
PCA降维算法详细推导
关于一个小小的PCA的推导 文章目录 关于一个小小的PCA的推导1 谱分解 (spectral decomposition)2 奇异矩阵(singular matrix)3 酉相似(unitary similarity)4 酉矩阵5 共轭变换6 酉等价7 矩阵的迹的计算以及PCA算法推导8 幂等矩阵(idempotent matrix)9 Von Neumanns 迹不等式 [w…...
C++ 基础思维导图(一)
目录 1、C基础 IO流 namespace 引用、const inline、函数参数 重载 2、类和对象 类举例 3、 内存管理 new/delete 对象内存分布 内存泄漏 4、继承 继承权限 继承中的构造与析构 菱形继承 1、C基础 IO流 #include <iostream> #include <iomanip> //…...
Excel文件恢复教程:快速找回丢失数据!
Excel文件恢复位置在哪里? Excel是微软开发的电子表格软件,它为处理数据和组织工作提供了便捷。虽然数据丢失的问题在数字时代已经司空见惯,但对于某些用户来说,恢复未保存/删除/丢失的Excel文件可能会很困难,更不用说…...
人脑处理信息的速度与效率:超越计算机的直观判断能力
人脑处理信息的速度与效率:超越计算机的直观判断能力 关键词: #人脑信息处理 Human Brain Information Processing #并行处理 Parallel Processing #视觉信息分析 Visual Information Analysis #决策速度 Decision Speed #计算机与人脑比较 Computer v…...
Spring Boot 中的 classpath详解
Spring Boot 中的 classpath 详解 在开发 Spring Boot 应用时,理解 classpath 的概念对于配置、资源管理以及构建项目非常重要。特别是当我们使用 Maven 打包工具时,项目的资源文件在不同的阶段会被放置到不同的目录。本文将深入探讨 Spring Boot 中的 …...
标准库以及HAL库——按键控制LED灯代码
按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯:是直接控制输出引脚,GPIO初始化推挽输出即可 按键控制LED:是按键输入信号从而控制输出引脚,GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是…...
Spring Cloud (四、服务熔断降级-HyStrix)
spring cloud 概述 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的…...
【C语言】如何插入并播放音频文件
在 C 语言中处理音频文件可以是一个有趣且挑战性的任务,尤其是在嵌入式开发或多媒体程序开发中。尽管 C 语言本身并不直接支持音频处理,但可以通过集成第三方库来处理音频文件的解码和播放。本篇博客将介绍如何在 C 语言中插入并播放音频文件,…...
图书项目:整合SSM
步骤: pom文件:导包,写入静态资源导出配置,连接数据库 建包:controller dao/mapper pojo service 配置文件:mybatis-config.xml applicationContext.xml(Spring的配置文件) datab…...
C#OPC(下)
安装 OPC UA SDK 通过 NuGet 包管理器,在 Visual Studio 中右键单击项目名称,选择 “管理 NuGet 程序包”,在搜索框中输入 “OPCFoundation.NetStandard.Opc.Ua”,找到对应的 OPC UA SDK 包后点击 “安装”,将其集成到…...
STLG_01_05_程序设计C语言 - 数据类型概念解析
一、典型例题 下面这些示例,将能够更熟练地运用C语言中的数据类型,加深对数据存储和处理的理解: 示例:确定变量a、b、c和d的数据类型,并说明它们的存储大小和取值范围 short int a -1000; unsigned int b 50000; f…...
使用工厂+策略模式实现去除繁琐的if else
使用工厂策略模式实现去除繁琐的if else 在中间有一个mapstruct的bug,即在修改实体类中的类型时,或者修改属性名字,mapstruct都无法进行转换,会报错,此时需要maven cleanmaven compile即可 前言 在这次的开发中&#…...
Apache MINA 反序列化漏洞CVE-2024-52046
漏洞描述: Apache MINA 是一个功能强大、灵活且高性能的网络应用框架。它通过抽象网络层的复杂性,提供了事件驱动架构和灵活的 Filter 链机制,使得开发者可以更容易地开发各种类型的网络应用。 Apache MINA 框架的 ObjectSerializationDeco…...
SpringSpringBoot常用注解总结
Spring&SpringBoot常用注解总结 1.SpringBootApplication 这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。 SpringBootApplication public class SpringSecurityJwtGuideApplication {public static void main(java.lang.Str…...
设计模式 创建型 原型模式(Prototype Pattern)与 常见技术框架应用 解析
原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想在于通过复制现有的对象(原型)来创建新的对象,而非通过传统的构造函数或类实例化方式。这种方式在需要快速创建大量相似对象时尤为高效&#x…...
cnPuTTY 0.82.0.1—PuTTY Release 0.82中文版本简单说明~~
2024-11-27 官方发布PuTTY 0.82主要包含如下变化: 1.Unicode处理进行了重大重构,以允许使用系统默认配置的字符集/代码页之外的Unicode字符。仅部分实现,其他尚未完成。 2.Unicode版本进行更新:所有字符分析均已更…...
TypeScript 常用类型
文章目录 1. 类型注解2. 原始类型3. 数组类型4. 联合类型5. 类型别名6. 函数类型7. 对象类型8. 接口类型8.1 接口声明8.2 接口继承 9. 元组类型10. 类型断言11. 字面量类型12. 枚举类型12.1 数字枚举12.2 字符串枚举 13. any 类型14. typeof 运算符 1. 类型注解 前言࿱…...
综合能源建模:理论、方法与实践
一、引言 随着全球能源需求的持续增长以及对能源安全、环境保护和可持续性发展的日益关注,综合能源系统(Integrated Energy System,IES)作为一种能够整合多种能源资源、实现能源高效利用和协同优化的解决方案,正逐渐成…...
《摄影艺术创作》慕课期末答案
《摄影艺术创作》慕课期末考试答案 题数 100 人们常说,“百闻不如一见”、“一图胜千言”,这强调的是 的表现力。 A视觉形象 B文字语言 C音响元素 D有声语言 “绘画是加法,摄影是减法”,主要是指无论摄影和绘画,都要…...
MySQL实用SQL示例
创建数据库 CREATE DATABASE zq-cloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;创建表 CREATE TABLE regulatory_firm_category (category_id int NOT NULL AUTO_INCREMENT COMMENT 分类id,自增主键,parent_id int NOT NULL COMMENT 父级id,category_…...
MySQL日志
MySQL日志 文章目录 MySQL日志binlogredoundoredo vs undo binlog binlog日志也就是二进制日志,把对于数据库的写入操作以二进制的形式保存到磁盘中。binlog日志是mysql的逻辑日志,可以理解为记录的是sql日志,由mysql的服务层进行记录&#…...
双目的一些文章学习
文章1 PSMNet https://arxiv.org/pdf/1803.08669PSMNet文章博客PSMNet文章中牵涉到的一些知识,空洞卷积,SPPNet网络,计算视差时用soft argmin代替argmin文章中引入了空洞卷积和SPPNet网络来融合多尺度的信息,又引入3D卷积来增加模…...
国产文本编辑器EverEdit - 批量转码转换行符
1 批量转码&转换行符 1.1 应用场景 如果用户批量在Windows编辑文件,要上传到异构系统,如:Linux,则需要批量转换编码和换行符,此时可以使用EverEdit的批量转码功能。 1.2 使用方法 选择主菜单文档 -> 批量转码…...
NextCloud服务安装与配置教程
NextCloud服务安装与配置教程 什么是 NextCloud: Nextcloud 是一款开源的私有云存储和协作平台,允许用户在自己的服务器上托管数据并管理团队协作。它可以作为一个功能丰富、安全可靠的替代方案,与商业云服务(如 Google Drive、Dropbox)相比提供更多控制和隐私保护。简单来…...
查看 SSD能承载的每秒随机IO次数
查看 SSD能承载的每秒随机IO次数 通常给大家的一个建议就是对于数据库部署的机器,一定要采用SSD固态硬盘,而不要使用机械 硬盘,因为SSD固态硬盘最强大的地方,就是他的随机IO性能非常高。 其次,光是用SSD还不够&#x…...
C# 设计模式(结构型模式):享元模式
C# 设计模式(结构型模式):享元模式 (Flyweight Pattern) 在软件开发中,尤其是在处理大量对象时,我们常常会面临内存和性能上的挑战。当多个对象具有相似的状态时,通常会占用大量的内存资源,从而…...
使用Python,networkx构造有向图及无向图以及图合并等api
使用Python,networkx构造有向图及无向图以及图合并等api 源码图的构造、节点及边的添加等有向图及无向图及多重图 参考 方法名方法作用subgraph(G, nbunch)返回包含nbunch节点的子图union(G, H[, rename])合并G和H图disjoint_union(G, H)合并G和H图cartesian_produc…...
【SOC 芯片设计 DFT 学习专栏 -- 测试向量生成 ATPG (Automatic Test Pattern Generation) 】
文章目录 OverviewATPG 的基本功能ATPG 的工作流程ATPG 应用场景示例示例 1:检测单个信号的 Stuck-at Fault示例 2:针对 Transition Fault 的 ATPG ATPG 工具与常用工具链ATPG 优化与挑战 Overview 本文主要介绍 DFT scan 中的 ATPG 功能。在 DFT (Desi…...
uniapp本地加载腾讯X5浏览器内核插件
概述 TbsX5webviewUTS插件封装腾讯x5webview离线内核加载模块,可以把uniapp的浏览器内核直接替换成Android X5 Webview(腾讯TBS)最新内核,提高交互体验和流畅度。 功能说明 下载SDK插件 1.集成x5内核后哪些页面会由x5内核渲染? 所有plus…...
树莓派之旅-在wsl-x86-64 上进行树莓派的交叉编译
前情提要: 想把自己花里胡哨的终端丢到树莓派上去,可是树莓派算力不够,编译时间过于漫长 交叉编译 定义网上有,懒得复制了,大概就是在本机电脑上编译目标平台的可执行文件 这里的目标平台是树莓派 使用 uname -m …...
JavaScript中Map与Object的区别
在JavaScript中,Map和Object是用于存储键值对数据的两种不同的数据结构(Map是ES6新增的数据结构),它们在构造方式、键的类型以及原型继承等方面存在区别。 一、主要区别 1.构造方式 Map:Map只能通过构造函数new Map…...
基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真。具体参考文献: 考虑使用UAV作为中继辅助节点的设备到设备(D2D)无线信息和…...