- 博客(30)
- 收藏
- 关注
原创 Java参数传递传递:从“副本”理解值传递机制
在 Java 中,“副本”的本质是栈内存中数据的复制。无论是基本类型还是对象类型,参数传递时都会创建原始值的副本。简单来说,“副本”就是数据的复制!所有参数传递都是值传递:传递的是原始值的副本。基本类型:传递值的副本,无法修改原数据。对象类型:传递引用的副本,可通过副本修改对象内容,但无法修改原引用的指向。
2025-02-17 19:08:18
353
原创 java启动项目字符编码和配置文件的字符编码问题
第二种解决方案是 启动项目的时候添加参数, 比如说原来是java -jar app.jar,修改为 java -Dfile.encoding=utf-8 -jar app.jar。第一种解决方案是 修改配置文件, 删除配置文件中的所有中文注释。建议使用第二种,第一种删除了中文注释之后可读性可能会受到影响.
2025-01-10 16:36:45
242
原创 GAT图注意力网络
GAT(Graph Attention Networks),加入了注意力机制的图神经网络,与GCN不同的是,其消息传递的权重是通过注意力机制得到。GAT的计算过程:aij=softmaxjeijexp(eij)Σk∈Niexp(eik)a_{ij}=softmax_{j}e_{ij}\frac{exp(e_{ij})}{\Sigma_{k∈N_i}exp(e_{ik})}aij=softmaxjeijΣk∈Niexp(eik)exp(eij) (1)eij=LeakyReLU(
2021-11-30 15:59:39
4098
原创 注意力机制与兴趣演化在推荐系统当中的应用
什么是“注意力机制”**“注意力机制”来源于人类天生的“选择性注意”的习惯。**最典型的例子是用户在浏览网页时,会有选择性地注意页面的特定区域,而忽视其他区域。比如下图是 Google 对大量用户进行眼球追踪实验后,得出的页面注意力热度图。我们可以看到,用户对页面不同区域的注意力区别非常大,他们的大部分注意力就集中在左上角的几条搜索结果上。 “注意力机制”对我们构建推荐模型来说价值是非常大的。比如说我们要做一个新闻推荐的模型,让这个模型根据用户已经看过的新闻做推荐。那我们在分析用户已浏览新闻的时候
2021-11-30 13:56:58
1110
原创 特征工程:推荐系统中的特征
什么是特征工程推荐系统就是利用“用户信息”“物品信息”“场景信息”这三大部分有价值数据,通过构建推荐模型得出推荐列表的工程系统。 在这个系统之中,特征工程就是利用工程手段从“用户信息”“物品信息”“场景信息”中提取特征的过程。这个过程说起来容易,但实际做起来其实困难重重。比如说,一个网站或者 App 每天收集起来的用户日志,采集来的站外信息,自己公司员工编辑添加的结构化数据那么多,那么庞杂,怎么才能挑出那些对推荐有用的特征呢?再比如从“推荐模型”的角度来说,一个机器学习模型的输入,往往是一个数值型的
2021-11-29 22:04:15
1688
原创 GCN图卷积网络
GCN图卷积网络GCN全称graph convolutional networks.图卷积网络,提出于2017年。GCN的出现标志着图神经网络的出现。深度学习最常用的网络结构就是CNN,RNN,GCN与CNN不仅名字相似,其实理解起来也很类似,都是特征提取器。不同的是,CNN提取的是张量数据特征,而GCN提出的是图结构数据特征。1.计算过程初期研究者为了从数学上严谨的推导GCN公式是有效的,所以会涉及到诸如傅里叶变换,拉普拉斯算子的知识。其实对于我们使用者而言,我们可以绕开那些知识并且毫无影响的理解G
2021-11-29 21:25:49
3763
1
原创 图神经网络在推荐系统中的应用
互联网中到处都是图结构的数据,比如我们熟悉的社交网络,最近流行的知识图谱等等,这些数据中包含着大量的关系信息,这对推荐系统来说是非常有帮助的。 为了能更好地利用这些信息进行推荐,各大巨头可谓尝试了各种办法,比如 DeepWalk、Node2Vec 这些非常实用的 Graph Embedding 方法。但是技术的发展永无止境,最近两年,GNN(Graph Nerual Netwrok,图神经网络)毫无疑问是最火热、最流行的基于图结构数据的建模方法。严格一点来说,图神经网络指的就是可以直接处理图结构数据
2021-11-22 22:18:59
2429
原创 Embedding+MLP
MLP是 Multilayer perceptron,多层感知机的缩写。感知机是神经元的另外一种叫法,所以多层感知机就是多层神经网络。下面以微软著名的深度学习模型 Deep Crossing 为例来说明 Embedding+MLP 模型的结构和实现方法。 图 1 展示的就是微软在 2016 年提出的深度学习模型 Deep Crossing,微软把它用于广告推荐这个业务场景上。它是一个经典的 Embedding+MLP 模型结构,我们可以看到,Deep Crossing 从下到上可以分为 5 层,分别
2021-11-22 20:40:29
1625
原创 协同过滤与矩阵分解
协同过滤算法的基本原理用户行为数据是推荐系统最常用,也是最关键的数据。用户的潜在兴趣、用户对物品的评价好坏都反映在用户的行为历史中。而协同过滤算法,就是一种完全依赖用户和物品之间行为关系的推荐算法。我们从它的名字“协同过滤”中,也可以窥探到它背后的原理,就是 “协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”一起看一个电商场景下的例子。这个电商推荐系统从得到原始数据到生成最终推荐分数,全过程一共可以总结为 6 个步骤,如下所示。首先,我们可以看到,电商网站的商品库
2021-11-22 20:14:30
5166
原创 利用图结构数据生成Graph Embedding
我们知道,只要是能够被序列数据表示的物品,都可以通过 Item2vec 方法训练出 Embedding。但是,互联网的数据可不仅仅是序列数据那么简单,越来越多的数据被我们以图的形式展现出来。这个时候,基于序列数据的 Embedding 方法就显得“不够用”了。但在推荐系统中放弃图结构数据是非常可惜的,因为图数据中包含了大量非常有价值的结构信息。下面就重点来讲基于图结构的 Embedding 方法,它也被称为 Graph Embedding。互联网中的图结构数据事实上,图结构数据在互联网中几乎无处不
2021-11-22 19:22:11
1071
原创 Embedding 基础
一、什么是Embedding简单来说,Embedding 就是用一个数值向量“表示”一个对象(Object)的方法,这里说的对象可以是一个词、一个物品,也可以是一部电影等等。一个物品能被向量表示,是因为这个向量跟其他物品向量之间的距离反映了这些物品的相似性。更进一步来说,两个向量间的距离向量甚至能够反映它们之间的关系。这个解释听上去可能还是有点抽象,那我们再用两个具体的例子解释一下。上图是 Google 著名的论文 Word2vec 中的例子,它利用 Word2vec 这个模型把单词映射到了高维空间中
2021-11-21 23:08:26
22329
3
原创 02链路预测
什么是链路预测链路预测是一个利用图网络做预测的经典任务。所谓链路(Link)指节点与节点之间的连接,也就是图论中的边。如上图所示,所谓链路预测就是预测原本不相连的两个节点之间是否有边存在,若是在有权图中,那就顺便还预测下相邻边的权重。如果该图是一个社交网络图,那么链路预测的任务就好比是在预测某个用户是否对另一个用户感兴趣,也就是好友推荐任务,如果是一个用户物品图,那么链路预测就是物品推荐任务。链路预测本身是一门学科,已经有好几十年历史了,推荐是它最主要的应用方向。如今来链路预测总是不温不火。究其原
2021-11-19 14:29:55
5884
原创 01图论基础
什么是图图的基本示意图图是描述复杂事务的数据表示形式,由节点和边组成,数学上一般表述为图G-(V,E)。其中的V(vertical)代表节点,可被理解为事物。而E(edge)代表边,描述的是两个事物之间的关系。例如一个图的社交网络图,每个人都可视为节点,而人与人之间的关系可被视为边。而在我们的推荐系统中,用户与物品之间的交互关系,用户与用户自身的关系,物品与物品之间的关系,完全可由一张图完整的进行描述。如下图所示:用户与物品之间的关系图无向图与有向图无向图有向图双向图无向图是由没有方
2021-11-17 16:13:10
1965
原创 机器学习06:朴素贝叶斯算法
朴素贝叶斯的思想如下:假设我们有四篇文章,三个类别,要判断每一篇文章属于哪一种类别,这种算法是将文章属于每一种概率的类别计算出来,并且判断它属于哪一种类别的概率最大,那么它就属于这个类别先介绍一下与概率有关的内容概率定义为一件事情发生的可能性联合概率:包含多个条件,且所有条件同时成立的概率记作:P(A,B)P(A,B) = P(A)P(B)上表中职业是程序员并且体型匀称的概率是多少?P(程序员, 匀称) = (3/7)*(4/7) = 12/49条件概率:事件A在事件B已经发生条件下的
2021-11-13 13:05:51
853
原创 机器学习05:转换器与估计器
一、转换器回想一下之前做的特征工程的步骤1、实例化(实例化的是一个转换器类(Transformer)2、调用fit-transform(对于文档建立分类词频矩阵,不能同时调用)fit_transform()就是先fit(输入数据),再transform(转换数据)举个例子:from sklearn.preprocessing import StandardScalers = StandardScaler()data = s.fit_transform([[1, 2, 3], [4, 5,
2021-11-12 19:40:26
769
原创 机器学习04:机器学习算法分类及开发流程简介
一、算法分类在介绍机器学习算法之前,先来明确两个概念:离散型数据和连续性数据离散型数据:上图是一组离散型数据,它是由记录不同类别个体的数目所得到的数据,又称计数数据,例如人口数、班级数量、特定范围内的汽车数量……所有这些数据全部都是整数,而且不能再细分,也不能进一步提高他们的精确度.连续性数据:变量可以在某个范围内取任一数,即变量的取值可以是连续的,如,长度、时间、质量值等,这类整数通常是非整数,含有小数部分。明确了上述概念,我们来看机器算法的分类:大致可以分为两种:监督学习和无监督学习
2021-11-12 16:14:55
985
原创 机器学习03:特征选择
一、特征选择是什么特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。主要方法(三大武器):Filter(过滤式):VarianceThresholdEmbedded(嵌入式):正则化、决策树Wrapper(包裹式)这里我们我们主要过滤式,其余的后续再介绍二、特征降维的实现1.Filter(过滤式):VarianceThresholdVarianceThresho
2021-11-12 15:16:14
1411
原创 机器学习02:特征预处理
什么是特征预处理通过特定的统计方法(数学方法)将数据转换成算法要求的数据数值型数据:标准缩放:1、归一化2、标准化3、缺失值类别型数据:one-hot编码时间类型:时间的切分归一化特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间公式:注:作用于每一列,max为一列的最大值,min为一列的最小值,那么x"为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0那么为什么需要将数据归一化呢?来看一个例子这是一组约会对象的数据这个样本是男士的数据,包含三个特征
2021-11-11 14:59:51
385
原创 机器学习01:入门案例-文本特征抽取
一、字典特征抽取字典数据抽取就是把字典中的一些类别数据分别转化成特征值from sklearn.feature_extraction import DictVectorizerdef dictvec(): """ 字典数据提取 """ # 实例化 dict = DictVectorizer(sparse=False) # sparse=False后,dict在调用fit_transform后则返回的是ndarray # 调用fit_tra
2021-11-10 19:00:17
1302
原创 python数据结构:07 排序算法(1)
冒泡排序def bubble_sort(alist): """ 冒泡排序 最坏时间复杂度:O(n2) 稳定性:稳定 """ n = len(alist) for i in range(0, n-1): for j in range(0, n-1-i): if alist[j] > alist[j+1]: alist[j], alist[j+1] = alist[j+1],
2021-11-04 09:23:20
384
原创 python数据结构:06双端队列
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。操作Deque() 创建一个空的双端队列add_front(item) 从队头加入一个item元素add_rear(item) 从队尾加入一个item元素remove_front() 从队头删除一个item元素remove_rear() 从队尾删除一个item元素is_empty()
2021-11-03 10:47:34
145
原创 python数据结构:05队列的实现
"""Queue() 创建一个空的队列enqueue(item) 往队列中添加一个item元素dequeue() 从队列头部删除一个元素is_empty() 判断一个队列是否为空size() 返回队列的大小"""class Queue(object): """队列""" def __init__(self): self.items = [] def is_empty(self): return self.items == []
2021-11-03 10:43:49
107
原创 python数据结构:04栈的实现
"""栈的操作Stack() 创建一个新的空栈push(item) 添加一个新的元素item到栈顶pop() 弹出栈顶元素peek() 返回栈顶元素is_empty() 判断栈是否为空size() 返回栈的元素个数"""class Stack: def __init__(self): self.items = [] def push(self, elem): """入栈/压栈""" self.items.append(e
2021-11-03 10:41:32
139
原创 python数据结构:03单向循环链表
class Node: def __init__(self, elem, next=None): self.elem = elem self.next = nextclass SingleLinkList: """单向循环链表""" def __init__(self, node=None): self.__head = node if node: node.next = node
2021-11-03 09:57:07
140
原创 python数据结构:02双向链表
class Node: def __init__(self, elem, pre=None, next=None): self.elem = elem self.pre = pre self.next = nextclass DoubleLinkList: def __init__(self, node=None): self.__head = node def is_empty(self): "
2021-11-02 21:57:37
101
原创 python数据结构:01单链表
# -*- coding: utf-8 -*-class Node: def __init__(self, elem): self.elem = elem self.next = Noneclass SingleLinkList: def __init__(self): self.__head = None def is_empty(self): """链表是否为空""" return self
2021-11-02 19:52:47
109
原创 python字符串及其方法介绍
字符串字符串的基本特点字符串的本质是:字符序列。Python 的字符串是不可变的,我们无法对原字符串做任何修改。但可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的效果。Python 不支持单字符类型,单字符也是作为一个字符串使用的。replace()实现字符串替换字符串不可改变。但是,我们确实有时候需要替换某些字符。这时,只能通过创建新的字符串来实现a = 'abcdefghijklmnopqrstuvwxyz'a = a.replace('c','高')print(a)o
2021-10-20 22:55:11
125
原创 2021-10-20 day_01
系列解包赋值a, b, c=4,5,6 相当于:a=4;b=5;c=6使用系列解包赋值实现变量交换a, b=1, 2a, b=b, aprint(a, b)output: 2 1常量Python 不支持常量,即没有语法规则限制改变一个常量的值。我们只能约定常量的命名规则,以及在程序的逻辑上不对常量的值作出修改。MAX_SPEED = 120print(MAX_SPEED)output: 120is 和 ==的区别is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。
2021-10-20 19:34:46
80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人