2023/8/27周报

目录

摘要

论文阅读

1、标题和现存问题

2、过度平滑和度量方法

3、处理过坡

4、实验结果

深度学习

1、解决可视化问题

2、CART算法

总结

摘要

本周在论文阅读上,阅读了一篇Pairnorm:解决GNNS中的过平滑问题的论文。PairNorm 的核心思想是在图卷积层之间引入节点对之间的特征差异。它通过在图卷积层的输出上引入额外的正则化项,来鼓励节点对之间的特征差异。具体来说,PairNorm 会对同一图卷积层的不同节点对之间的特征进行归一化,使得每对节点的特征差异保持一定的距离。这篇论文通过引入 PairNorm 正则化方法,成功地解决了图神经网络中的过度平滑问题,提升了模型的表示能力和性能。在深度学习上,解决了上周遗留下来的可视化问题和再次学习了CART算法。

This week, in terms of paper reading, reviewing a paper titled "PairNorm: Mitigating Over-Smoothing in Graph Neural Networks." The core idea of PairNorm is to introduce feature differences between node pairs in between graph convolutional layers. It achieves this by adding an additional regularization term to the outputs of graph convolutional layers to encourage feature disparities among node pairs. Specifically, PairNorm normalizes the features between different node pairs within the same graph convolutional layer, ensuring a certain distance in feature differences between each pair of nodes. By introducing the PairNorm regularization method, this paper successfully addresses the issue of over-smoothing in graph neural networks, thereby enhancing the model's representation capacity and performance. In terms of deep learning, tackling the visualization problem left from last week and revisited the CART algorithm.

论文阅读

1、标题和现存问题

标题:Pairnorm:解决GNNS中的过平滑问题

现存问题:gnn的一个关键问题是其深度限制。据观察,深度叠加层通常会导致 gnn(如GCN和GAT)的性能 显著下降,甚至超过几个(2-4)层。这种下降与许多因素有关;包括反向传播中逐渐消失的梯度,由于参数数量的增加而出现的过拟合,以及称为过平滑的现象。图卷积是一种拉普拉斯平滑,并证明了在多次使用拉普拉斯平滑后,(连通的)图中节点的特征会收敛到相似的值——这个问题被称为“过平滑”。实际上,过度平滑会导 致不同类之间的节点表示难以区分,从而影响分类性能。

2、过度平滑和度量方法

过度平滑指的是在多层图神经网络中,节点特征在不同层之间逐渐趋于相似,失去了节点之间的差异性,导致模型在节点分类和预测任务中的性能下降。

过度平滑现象的原因。主要观点包括:

  1. 线性层的传播效应:在多层图神经网络中,由于每一层的信息传递都是基于前一层的线性组合,信息传递会逐渐减弱,导致节点特征在不同层之间趋于一致。

  2. 信息聚合的稀疏性:随着层数增加,节点特征的信息会通过多次的聚合传递,使得节点之间的差异性逐渐减少,最终导致节点特征过于平滑。

  3. 初始特征的影响:节点初始特征在多层传播中会逐渐被稀释,如果初始特征差异性较小,经过多层传播后差异性会进一步减小,导致过度平滑。

文章提出的度量方法旨在衡量图神经网络(GNNs)中节点特征的平滑程度,以帮助检测和分析过度平滑的现象。这种度量方法有助于理解模型在不同层之间特征的变化情况,进而评估模型对节点之间差异性的保持能力。

通过衡量节点特征的平滑程度,可以识别出在多层GNN中是否存在过度平滑的问题。如果节点特征在不同层之间过于趋同,失去了差异性,那么就可能存在过度平滑,这可能导致模型性能下降。通过度量节点特征的平滑程度,研究者可以更好地理解模型的行为,并在设计和调整模型时采取相应的措施来缓解过度平滑问题。

 

row-diff测度是节点特征(即表示矩阵的行)之间所有两两距离的平均值,量化了节点的超平滑,而col-diff是(L1-归一化 1)列,并量化特征超平滑。

SGC通过将多层GCN中的复杂卷积操作简化为邻接矩阵的幂操作,实现了特征的传播和聚合。这种简化的操作降低了模型的复杂性,同时减少了超平滑的影响。SGC通过只使用一层卷积,将邻接矩阵的幂函数作为卷积核,从而避免了多层卷积导致的过度平滑问题。

因此,SGC研究超平滑的目的是通过简化模型结构和操作,减轻多层GCN中的超平滑问题,从而提高模型的表现和泛化能力。

 

3、处理过坡

建立了图卷积和一个优化问题之间的联系,即图正则化最小二乘:

 

上面公式中的优化问题有助于更深入地研究图卷积的过平滑问题。理想情况下,希望在相同的集群中获得平滑,但是避免平滑来自不同集群的节点。上面公式中的目标通过图形正则化项只规定了第一个目标。因此,当反复使用卷积时,它容易出现过平滑。为了解决这个问题并同时实现这两个目标,我们可以添加一个负数项,例如断开连接的对之间的距离之和,如下所示。

 

这里 λ是一个平衡标量,以考虑两个目标的不同体积和重要性。在文章中,我们采取了不同的路线。我们提出了一种通用而有效的“补丁”,称为 PAIRNORM,而不是一个全新的图卷积算子,它可以应用于任何形式的有过平滑潜力的图卷积。

提出的PAIRNORM(带有输入~ X和输出X˙)可以被写成一个两步、中心和规模的归一化过程:

 

PAIRNORM的说明,包括定心和缩放步骤:

 

原始与pairnorm增强GCN和GAT模型在Cora上层数增加的性能比较。

 

如果任务需要大量的层来实现其最佳性能,那么更多地使用 PAIRNORM会使任务受益。为此,研究了“缺失特征设置”,即节点的子集缺少特征向量。将该任务的这种变体称为缺失向量的半监督节点分类(SSNC-MV)。

下图展示了SGC、GCN和GAT模型在Cora 上随层数增加的性能,其中我们从所有未标记的节点中去除特征向量,即 p = 1。与那些没有 PAIRNORM的模型相比,使用 PAIRNORM的模型获得了更高的测试精度,它们通常可以达到更多的层。

 

4、实验结果

数据集:Cora、Citeseer、Pubmed、Coauthor。

将 PAIRNORM应用于SGC对SSNC-MV的全局性能增益。pairnormn 增强的SGC在缺失0%以上的情况下表现类似或更好,而在大多数其他设置下,特别是在缺失率较大的情况下,它的表现明显优于普通 SGC。

 

对相同设置下的GCN和GAT采用PAIRNORM-SI,并将其与剩余(跳过)连接技术进行比较。

  

GCN和GAT模型表现出相似的趋势:

(1)在 SSNC-MV 条件下,随着缺失率的增加,香草模型的性能下降;

(2)剩余连接和PAIRNORM-SI 都能使模型更深入,并提高性能;

(3) GCN-PN和GAT-PN实现的性能是可比的或比仅仅使用跳跃;

(4)通过使用跳跃和PAIRNORM-SI 可以进一步提高性能(尽管是轻微的)。

PAIRNORM计算速度快,不需要改变网络结构,也不需要任何额外的参数,可以应用于任何GNN。在真实的分类任务上的实验表明了 PAIRNORM的有效性,当任务受益于更多的层时,它提供了性能提升。

深度学习

1、解决可视化问题

  1. 导入必要的库:

    • 代码开始时导入了所需的库,如pandaspyechartsos

  2. 读取数据:

    • 代码使用pd.read_excel从Excel文件读取数据。数据似乎以年份为行,城市为列的形式组织。

  3. 创建时间轴和地图图表:

    • 代码使用Timeline(init_opts=opts.InitOpts(...))初始化时间轴。这为时间轴设置了一些初始选项,如宽度、高度、主题和页面标题。

    • 然后,它遍历数据中的每个年份,并为每个年份创建地图图表。对于每个年份:

      • 从DataFrame中获取该年份的CO数据作为一行。

      • 将城市名称与其相应的CO浓度级别结合起来。

      • 使用pyecharts库创建一个Map图表,并将数据添加到其中。

      • 设置各种图表选项,包括标题和CO浓度级别到颜色的可视映射。

  4. 将地图添加到时间轴:

    • 在循环内,它使用timeline.add()方法将每个地图图表添加到时间轴,指定图表和相应的时间点(年份)。

  5. 时间轴配置:

    • 在添加所有地图图表到时间轴后,它使用timeline.add_schema()配置时间轴设置。这启用了自动播放,并设置了帧之间的播放间隔。

  6. 渲染时间轴:

    • 使用timeline.render()将时间轴渲染为HTML文件。

    • 使用os.system()命令在默认的网络浏览器中打开生成的HTML文件。

import pandas as pd
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.charts import Timeline
import os
if __name__ == '__main__':# 读取数据data = pd.read_excel('./显示结果表/真实结果单独表(前15行)/CO_表(真实).xlsx', index_col=0)years = data.index.tolist()cities = data.columns.tolist()# 创建地图示例map_chart = Map()timeline = Timeline(init_opts=opts.InitOpts(width='1300px',height='830px',theme="广西CO变化",page_title="广西CO变化",))
​for k, year in enumerate(years):row = data.iloc[k,].tolist()economic_data = list(zip(cities, row))map = (Map().add(year, economic_data, "广西").set_global_opts(title_opts=opts.TitleOpts(title="广西CO变化(2020年)_真实"), visualmap_opts=opts.VisualMapOpts(# max_=1,# range_color=["#FFFFFF", "#FFCC00", "#CC0000"],  # 这里修改颜色,低、中、高pieces=[{'min': 0.3980778753757477, 'max': 0.5579649806022644, 'label': "0.39-0.55", 'color': '#9ecae1'},{'min': 0.5581204891204834, 'max':   0.6000000238418579, 'label':"0.55-0.60" , 'color': '#6baed6'},{'min':0.6000000238418579, 'max':  0.643344521522522, 'label': "0.60-0.64", 'color': '#4292c6'},{'min': 0.647230863571167, 'max':  0.699999988079071, 'label': "0.64-0.69", 'color': '#2171b5'},{'min': 0.699999988079071, 'max': 0.800000011920929, 'label': "0.69-0.80", 'color': '#08519c'},{'min':0.800000011920929, 'max': 0.8999999761581421, 'label': "0.80-0.89",'color': '#ffaaaa'},{'min': 0.8999999761581421, 'max':  1.277964234352112, 'label': "0.89-1.28",'color': '#e64b50'},],is_piecewise=True,pos_bottom="10%", pos_left="25%",)))print(f"Adding map for year: {year}")timeline.add(chart=map, time_point=year)timeline.add_schema(is_auto_play=True, play_interval=500)
​
​timeline.render("./html/真实html/Reality_CO.html")os.system("html/真实html/Reality_CO.html")

2、CART算法

CART(Classification and Regression Trees,分类与回归树)算法是一种常用的决策树算法,用于解决分类和回归问题。CART算法通过递归地将数据集分割成子集,并在每个子集上构建最佳拟合的树结构。在分类问题中,每个叶节点代表一个类别,而在回归问题中,每个叶节点代表一个数值。

CART算法的基本原理:

  1. 树的构建: 算法从根节点开始,选择一个特征和一个阈值,将数据集分成两个子集。该过程是通过选择一个特征和一个切分点,将数据集分为两部分,以最小化切分后的子集的不纯性度量(如Gini指数、熵等)。

  2. 递归分割: 每个子集都被递归地继续切分,直到满足终止条件。终止条件可以是达到指定的最大深度、数据集的大小小于某个阈值,或子集的不纯性达到一定程度。

  3. 叶节点: 一旦停止分割,每个子集被赋予一个叶节点,并用于表示一个类别(在分类问题中)或一个数值(在回归问题中)。

  4. 剪枝: 构建好的树可能存在过拟合的问题,因此需要进行剪枝操作。剪枝是通过移除一些节点和子树,来减少模型的复杂度,以提高泛化能力。

  5. 预测: 使用构建好的决策树对新数据进行预测。从根节点开始,根据特征值的判定条件,沿着树的分支向下移动,最终到达叶节点,该叶节点的值即为预测结果。

CART算法在分类问题中可以使用基尼指数(Gini index)或熵(Entropy)来衡量不纯性,从而选择最佳的特征和切分点。在回归问题中,通常使用均方误差(Mean Squared Error,MSE)来度量拟合程度。

import numpy as np
​
# 定义一个决策树节点类
class DecisionNode:def __init__(self, feature_index=None, threshold=None, value=None, left=None, right=None):self.feature_index = feature_index   # 特征索引self.threshold = threshold           # 切分阈值self.value = value                   # 叶节点值(类别)self.left = left                     # 左子树self.right = right                   # 右子树
​
# 定义一个CART分类器类
class CARTClassifier:def __init__(self, max_depth=None):self.max_depth = max_depth
​# 计算基尼不纯度def gini(self, y):unique_labels, counts = np.unique(y, return_counts=True)p = counts / len(y)gini_score = 1 - np.sum(p ** 2)return gini_score
​# 根据特征和阈值切分数据集def split(self, X, y, feature_index, threshold):left_mask = X[:, feature_index] <= thresholdright_mask = ~left_maskleft_X, left_y = X[left_mask], y[left_mask]right_X, right_y = X[right_mask], y[right_mask]return left_X, left_y, right_X, right_y
​# 找到最佳切分特征和阈值def find_best_split(self, X, y):m, n = X.shapebest_gini = float('inf')best_feature = Nonebest_threshold = None
​for feature_index in range(n):thresholds = np.unique(X[:, feature_index])for threshold in thresholds:left_X, left_y, right_X, right_y = self.split(X, y, feature_index, threshold)gini_left = self.gini(left_y)gini_right = self.gini(right_y)gini_score = (len(left_y) / m) * gini_left + (len(right_y) / m) * gini_right
​if gini_score < best_gini:best_gini = gini_scorebest_feature = feature_indexbest_threshold = threshold
​return best_feature, best_threshold
​# 递归地构建决策树def build_tree(self, X, y, depth=0):if depth >= self.max_depth:value = np.argmax(np.bincount(y))return DecisionNode(value=value)
​best_feature, best_threshold = self.find_best_split(X, y)if best_feature is None:value = np.argmax(np.bincount(y))return DecisionNode(value=value)
​left_X, left_y, right_X, right_y = self.split(X, y, best_feature, best_threshold)left_subtree = self.build_tree(left_X, left_y, depth + 1)right_subtree = self.build_tree(right_X, right_y, depth + 1)
​return DecisionNode(feature_index=best_feature, threshold=best_threshold,left=left_subtree, right=right_subtree)
​# 训练模型def fit(self, X, y):self.tree = self.build_tree(X, y)
​# 预测单个样本def predict_one(self, node, x):if node.value is not None:return node.valueif x[node.feature_index] <= node.threshold:return self.predict_one(node.left, x)else:return self.predict_one(node.right, x)
​# 预测多个样本def predict(self, X):predictions = [self.predict_one(self.tree, x) for x in X]return np.array(predictions)
​
# 生成一些随机数据用于演示
np.random.seed(0)
X = np.random.rand(100, 2)
y = (X[:, 0] + X[:, 1] > 1).astype(int)
​
# 创建CART分类器实例并训练
cart_classifier = CARTClassifier(max_depth=3)
cart_classifier.fit(X, y)
​
# 预测并输出结果
test_data = np.array([[0.2, 0.8], [0.8, 0.2]])
predictions = cart_classifier.predict(test_data)
print("Predictions:", predictions)
  • DecisionNode 类表示决策树的节点,包括特征索引、阈值、叶节点值等信息。

  • CARTClassifier 类是分类器的主要实现,包含了计算基尼不纯度、数据切分、寻找最佳切分等方法。

  • 通过递归构建决策树,不断选择最佳特征和阈值进行切分,直到达到最大深度或不可再切分为止。

  • fit 方法用于训练模型,predict 方法用于预测新数据的类别。

  • 示例使用随机数据,构建了一个简单的分类器,演示了预测过程。

总结

本周继续对GNN相关知识进行学习,同时解决了上周遗留下来的可视化问题,同时对CART算法再次进行了学习,接下来将对图之间的权重关系进行学习。

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

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

相关文章

CUDA和C++混合编程及CMakeLists.txt

1. 概要 首先认识一个问题&#xff0c;单从CMakeLists.txt的角度来看&#xff0c;无法同时使用两种编译器编译两种语言。不过直接编写Makefile是可以的&#xff0c;通过设置不同的任务&#xff0c;可以实现一个Makefile编译两个语言。但这不是这里要讨论的重点。 使用CUDA和C进…

7 集群基本测试

1. 上传小文件到集群 在hadoop路径下执行命令创建一个文件夹用于存放即将上传的文件&#xff1a; [atguiguhadoop102 ~]$ hadoop fs -mkdir /input上传&#xff1a; [atguiguhadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/work.txt /input2.上传大文件 [atguiguhadoop1…

Vue 3 常见面试题汇总

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 前言 最近两年许多大厂都在实行“降本增效”、“优化组织架构”&#xff0c;然后“为社会输送了大量人才”&#xff0c;今年&#xff08;2023&#xff…

视频云存储/安防监控视频智能分析网关V3:占道经营功能详解

违规占道经营者经常会在人流量大、车辆集中的道路两旁摆摊&#xff0c;导致公路交通堵塞&#xff0c;给居民出行的造成不便&#xff0c;而且违规占路密集的地方都是交通事故频频发生的区域。 TSINGSEE青犀视频云存储/安防监控视频/AI智能分析网关V3运用视频AI智能分析技术&…

10万字智慧政务大数据平台项目建设方案222页[Word]

导读&#xff1a;原文《10万字智慧政务大数据平台项目建设方案222页[Word]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 1.1 项目建设目标 推进市一级政府搭建数…

求生之路2社区服务器sourcemod安装配置搭建教程centos

求生之路2社区服务器sourcemod安装配置搭建教程centos 大家好我是艾西&#xff0c;通过上文我们已经成功搭建了求生之路2的服务端。但是这个服务端是纯净的服务端&#xff0c;就是那种最纯粹的原版。如果想要实现插件、sm开头的命令等功能&#xff0c;需要安装这个sourcemod。…

js中的解构赋值

在JavaScript中&#xff0c;解构赋值是一种方便地从数组或对象中提取值并赋给变量的方法。 它允许你使用一种简洁的语法来快速访问和使用数据。 对于数组解构赋值&#xff0c;你可以使用方括号&#xff08;[]&#xff09;来指定变量名&#xff0c;并将其放在赋值语句的左侧。例…

opencv 案例实战02-停车场车牌识别SVM模型训练及验证

1. 整个识别的流程图&#xff1a; 2. 车牌定位中分割流程图&#xff1a; 三、车牌识别中字符分割流程图&#xff1a; 1.准备数据集 下载车牌相关字符样本用于训练和测试&#xff0c;本文使用14个汉字样本和34个数字跟字母样本&#xff0c;每个字符样本数为40&#xff0c;样本尺…

家政服务行业搭建小程序的实用技巧分享

随着移动互联网的发展&#xff0c;小程序成为了各行各业的新宠。对于家政服务行业来说&#xff0c;搭建一个小程序商城可以极大地提升服务的便捷性和用户体验&#xff0c;同时也能提高企业的竞争力。本文将分享家政服务行业搭建小程序的实用技巧&#xff0c;帮助您顺利创建属于…

Docker 常用服务 安装使用 教程

Docker安装常用服务 1、 安装mysql # 1.拉取mysql镜像到本地 docker pull mysql:tag (tag不加默认最新版本) # 2.运行mysql服务 docker run --name mysql -e MYSQL_ROOT_PASSWORDroot -d mysql:tag --没有暴露外部端口外部不能连接 docker run --name mysql -e MYSQL_ROOT_PAS…

mongodb和redis的用途

MongoDB和Redis都是常见的NoSQL数据库&#xff0c;它们有不同的特点和用途。 MongoDB的主要特点和用途&#xff1a; 数据存储&#xff1a;MongoDB是一种面向文档的数据库&#xff0c;以JSON样式的BSON文档&#xff08;二进制JSON&#xff09;的形式存储数据。它支持复杂的数据…

【从零学习python 】63.正则表达式中的re.Match类及其属性和方法介绍

文章目录 re.Match类介绍进阶案例 re.Match类介绍 当我们调用re.match方法、re.search方法&#xff0c;或者对re.finditer方法的结果进行迭代时&#xff0c;拿到的数据类型都是re.Match对象。 x re.match(rh,hello) y re.search(re,hello) z re.finditer(rl,hello) print(…

[Unity] 单例设计模式, 可供继承的单例组件模板类

一个可供继承的单例组件模板类: public class SingletonComponent<TComponent> : Componentwhere TComponent : SingletonComponent<TComponent> {static TComponent _instance;private static TComponent GetOrFindOrCreateComponent(){// 双检索if (_instance …

树莓派使用Nginx+cpolar内网穿透实现无公网IP访问内网本地站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

Python爬取旅游网站数据机票酒店价格对比分析

本文将介绍如何使用Python爬虫从旅游网站上获取机票和酒店的价格数据&#xff0c;并实现价格对比分析&#xff0c;帮助你做出明智的旅行决策。我们提供了完善的方案和代码&#xff0c;让你能够轻松操作并获得实际价值。 使用Python爬虫获取旅游网站上的机票和酒店价格数据&…

docker学习(1)

1、容器与虚拟机的对比&#xff1a; 虚拟机&#xff08;virtual machine&#xff09;就是带环境安装的一种解决方案。 它可以在一种操作系统里面运行另一种操作系统&#xff0c;比如在Windows10系统里面运行Linux系统CentOS7。 应用程序对此毫无感知&#xff0c;因为虚拟机看…

HTML+CSS 查漏补缺

目录 1&#xff0c;HTML1&#xff0c;尺寸的百分比1&#xff0c;普通元素2&#xff0c;绝对&#xff08;固定&#xff09;定位元素3&#xff0c;常见百分比 2&#xff0c;form 表单元素1&#xff0c;form2&#xff0c;button3&#xff0c;label4&#xff0c;outline5&#xff0…

今天学习了弗洛伊德算法(floyed)

我自己写的模板嘿嘿Dijkstra算法SPFA算法但是我知道还有这些&#xff0c;但是今天是周末哎&#xff0c;我有点不想学了&#xff0c;我今天学的是比较差劲的一个算法&#xff08;但是它好像比较好记啊&#xff09;&#xff0c;改天再学其他比较好一点的算法加强自己 #include&l…

TCP/IP网络江湖武艺传承:物理层与通信江湖的幕后(物理层中篇:物理层与现代通信技术)

目录 〇、引言:进入现代通信技术的江湖 一、数字信号与模拟信号:传承与差异

mysql备份与还原

mysql日志管理 、备份与恢复 备份的主要目的是灾难恢复&#xff0c;备份还可以测试应用、回滚数据修改、查询历史数据、审计等。 而备份、恢复中&#xff0c;日志起到了很重要的作用 #######前言&#xff1a;日志⭐⭐ MySQL 的日志默认保存位置为 /usr/local/mysql/data ##配…