自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不学无术的小镇做题家

记录学习轨迹

  • 博客(108)
  • 收藏
  • 关注

原创 Attentional Factorization Machines - 学习笔记

引言本篇文章介绍的是Attentional Factorization Machines(AFM)。AFM开创性地将注意力机制引入到因子分解机(Factorization Machines)中,可视为FM和NFM的延续之作,这两个模型在前面博客中已经进行了介绍,有兴趣的读者可以点击蓝色链接进行深入了解。简单回顾一下,FM使用两个隐向量的内积来表示一对特征组合的权重,增强了模型的泛化性;NFM为了弥补FM中特征交叉阶数有限的缺点,引入深度神经网络(DNNs)构建交叉特征,并提出了一种新的特征交叉操作。概

2022-05-11 17:00:57 591

原创 Neural Factorization Machine -学习笔记

动机在推荐系统中,交叉特征(Cross Features)可以深入挖掘特征之间的潜在关系,提升模型效果。例如,把职业特征occupation={banker,doctor}occupation=\left\{banker,doctor\right\}occupation={banker,doctor}和性别特征gender={M,F}gender=\left\{M,F\right\}gender={M,F}进行交叉组合,可以得到新特征occupation_gender={banker_M,banker_F

2022-05-04 15:15:45 900

原创 Deep & Cross 学习笔记

引言Deep & Cross模型来自于2017年的KDD论文:《Deep & Cross Network for Ad Click Predictions》。该模型可以看作是Wide & Deep模型的延续,着眼于解决特征交叉问题。研究动机传统的特征交叉都需要学者进行人工定义,过程较为繁琐。深度神经网络(DNNs)虽然可以自动完成特征交叉过程,节省了人工操作。但是,DNNs的特征交叉操作是自动且隐式(implicit)的:无法显式地判断哪些特征组合是有利的,并且对所有特征组合都

2022-04-26 16:50:24 588

原创 Product-based Neural Network(PNN) - 学习笔记

引言这篇工作的着眼点是在特征交叉方面,提出了一个乘积层(product layer) 来对多个领域(field) 的特征进行充分的特征交叉。其中,product layer包含两种形式,分别是内积形式(inner product)和外积形式(outer product)。整体的模型结构上图是PNN的整体模型架构,这里简单介绍一下。InputInputInput是经过one-hot编码的稀疏向量,经过EmbeddingEmbeddingEmbedding层生成稠密的特征向量矩阵xxx。x[start

2021-10-16 19:08:36 211

原创 从极大既然估计的角度推导均方误差最小化

问题背景曲线拟合问题,给定参数www和输入xxx,用多项式函数来拟合曲线,其中MMM表示多项式的次数:y(x,w)=w0+w1x+w2x2+...+wMxMy(x,w) = w_0 + w_1x+w_2x^2+...+w_Mx^My(x,w)=w0​+w1​x+w2​x2+...+wM​xM如下图所示:推导我们都知道曲线拟合问题,可以用均方误差最小化来解决,也就是使以下函数的值最小化:E(w)=12∑n=1N(y(xn,w)−tn)2E(\textbf{w}) = \frac{1}{2}

2021-10-10 20:38:36 693

原创 DeepFM - 学习笔记

动机Wide&Deep首先提出了分别用Wide部分来捕捉低阶特征交叉,用Deeo部分来捕捉高阶特征交叉。但是,Wide部分需要人工设计特征交叉的规则,不能完全交给网络训练。所以,DeepFM用FM(因子分解机)来取代Wide部分,让FM自动地学习低阶的特征交叉。网络架构DeepFM的网络架构如上图所示,左边是FM部分,右边是Deep部分。可以看到两个部分共享同一个Embedding层,这一点是和Wide&Deep不一样的。FMFM的主要功能用网络层来完成特征的一阶交叉和二阶交叉

2021-08-01 22:54:50 117

原创 Wide & Deep - 学习笔记

1、介绍Wide & Deep模型的出发点是兼顾模型的记忆能力和泛化能力,下面解释一下这两者的含义。记忆 (Memorization):指的是模型记住商品共现性的能力。举个例子,一个父亲逛淘宝通常会同时买尿布和啤酒,这就体现了商品的共现性。购买的次数多了,当模型看到尿布,自然会给用户推荐啤酒,这就是模型的记忆能力。泛化( Generalization)能力:只是的模型挖掘用户潜在喜好的能力。比方说,你经常刷足球类的短视频,软件就会根据足球去联想,你是不是有可能喜欢C罗呢?然后软件就会尝试给你

2021-07-30 20:54:39 105

原创 Neural Collaborative Filtering - 学习笔记

介绍深度学习未兴起时,传统矩阵分解(Matrix Factorization)是推荐领域中的一种经典方法,基本做法是:把用户和商品映射到隐向量空间,用向量表示。通过内积,来表示向量之间的相似性。作者认为,通过内积来表示向量相似性的做法过于简单,有时候会出现错误,限制了模型的泛化能力。文中的一个例子:对于(a)中的交互矩阵,用sss表示用户之间的相似度,可以明显得看出s23(0.66)>s12(0.5)>s13(0.4)s_{23}(0.66) > s_{12}(0.5)

2021-07-02 10:45:02 485

原创 Deep Crossing - 学习笔记

动机在广告推荐领域,工程师可利用的初始输入非常多。如何从海量特征中制作高质量的特征,在当时成为一个迫切问题。虽然有经验的工程师可以手工制作高质量的特征,但是,在大数据规模的业务场景下,手工制作特征的可行性很低。能不能让网络自己从初始输入中学习到高质量的特征呢?这就是Deep Crossing解决的问题——完整地解决了从特征工程、稀疏向量稠密化、多层神经网络进行优化目标的整个流程。特征的预处理特征类别论文中提到的数目繁多的特征中,主要有三种特征数值型特征,如点击率,也称为计数型特征样例特征,如广

2021-06-30 09:02:59 161 1

原创 Field-aware Factorization Machine - FFM(领域感知的因子分解机)

“域”概念的提出本篇的模型是FFM,全称是Field-aware Factorization Machine。作者认为,FM中虽然对特征做了高阶(一般是二阶)交叉,但是有一个弊端:在实际场景中,特征的领域(Field)很可能不同,比如性别、品牌、国籍等,向量在不同域的表示应该不一样才对,FM只用一个向量Embedding来表示特征,也就意味着在与其他特征做交叉的时候,使用的是同一个向量,这显然是不合理的。所以,FFM引入了域(Field)的概念,做法就是每个特征不再使用单一向量表示,而是fff个向量,这

2021-06-29 09:31:04 371

原创 Factorization Machine(因子分解机)

论文链接:Factorization MachineMotivationSVM在通用场景下的分类性能和模型学习是非常高效的,但是在推荐场景下,用户与商品的交互矩阵是高度稀疏(sparse)的,SVM并不适用于向量高度稀疏的学习任务中。于是,本文提出了一个新的模型——Factorization Machine(因子分解机),简称FM,来解决向量高度稀疏场景下的模型学习问题。Contribution主要有三点:FM能够在数据非常稀疏的场景下学习,这一点SVM做不到。(你做不了的,我能做)FM计算复

2021-06-26 20:54:35 325 1

原创 “Assertion `index >= -sizes[i] && index < sizes[i] && “index out of bounds“` failed.” 解决方法

最近在使用Pytorch训练时报错,出现了以下信息:Assertion `index >= -sizes[i] && index < sizes[i] && "index out of boundsdevice-side assert triggered可以判断时数组下标越界导致的,但是由于把数据加载到cuda里面,导致报错信息并不能帮助我们准确地定位错误位置,这时候,只需要将*.cuda()或者.*to(device)去掉,将模型放在cpu训练,就能看

2021-03-12 14:51:51 4052 3

原创 1. 两数之和(简单)- LeetCode

题目描述解法使用哈希表,一次遍历即可。时间复杂度O(n)O(n)O(n),空间复杂度O(n)O(n)O(n)。class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: d = {} for i,num in enumerate(nums,0): if target-num in d.keys(): ret

2021-01-21 14:00:15 97

原创 from…import * 语句与 import 区别

import 模块:导入一个模块;注:相当于导入一个文件夹,是相对路径。from … imprt:导入了一个模块中的一个函数;相当于导入的是一个文件夹中的文件,是个绝对路径。使用上的区别import //模块.函数from ... import //直接使用函数名就可以了所以from...import *:是把一个模块中所有函数都导入进来; 注:相当于:相当于导入的是一个文件夹中所有文件,所有函数都是绝对路径。结论from…import *语句与import区别在于:import.

2020-09-15 18:35:58 291

原创 7. 整数反转(简单)- LeetCode

题目描述自己解法很无脑的解法,先转成字符串再进行判断,Python代码:class Solution: def reverse(self, x: int) -> int: x = str(x) if not x[0].isnumeric(): #负数 x = x[0] + x[1:][::-1] pos = 0 for i in range(1,len(x)):

2020-09-12 14:40:47 112

原创 1552. 两球之间的磁力(中等)- LeetCode

题目描述解法自己没想出来,参考了大佬的思路解法,下面试着用自己的话讲一遍。这道题是属于求“最大最小”的题型,一般使用二分法,在本题中要求“最大的最小磁力”,我们先考虑最小磁力,最小磁力肯定出现在相邻两个数之间,比如数组:[1,2,3,4,6]的最小磁力就是1,要求取最小磁力,只需要遍历一遍即可。接下来我们来考虑最大磁力,在有序数组中要放置m个小球,也就是会产生m-1个距离,最大值为max,最小值为min,如果数组是连续的(在题意中就是假设所有位置都有篮子,但实际上可能不满足),那么小球均匀摆布

2020-09-02 09:12:29 252

原创 977. 有序数组的平方(简单)- LeetCode

题目描述解法双指针解法。设置一个变量index值为-1,先从左向右遍历数组,找到第一个大于等于零的元素,记录它的下标index。这一过程有三种可能结果:index = -1,表示没找到,说明数组全是负数index = 0,表示第一个数就是非负数,说明数组全是非负数0 < index < 数组长度,说明数组里既有负数,也有非负数第一、二种情况比较好办,直接按位赋值即可。第三种情况需要分别设置遍历负数的指针neg,遍历非负数的指针pos。neg向数组前端遍历,pos向数组末尾遍历,

2020-08-28 20:14:28 172

原创 1550. 存在连续三个奇数的数组(简单)- LeetCode

题目描述解法设置一个变量temp,当累计到3时跳出循环。时间复杂度O(n)O(n)O(n),空间复杂度O(1)O(1)O(1)。Python代码:class Solution: def threeConsecutiveOdds(self, arr: List[int]) -> bool: temp = 0 isFound = False for i in range(len(arr)): if arr[i] %

2020-08-26 14:02:15 256

原创 1333. 餐厅过滤器(中等)- LeetCode

题目描述解法Python代码参考了题解区大佬的解法,主要用了以下两个Python内置函数,比较方便:filter()函数sorted()函数Python代码:class Solution: def filterRestaurants(self, restaurants: List[List[int]], veganFriendly: int, maxPrice: int, maxDistance: int) -> List[int]: def isVeganF

2020-08-25 20:25:56 197

原创 Python内置函数 - sorted()

sorted() 函数对所有可迭代的对象进行排序操作sorted()函数的语法为:sorted(iterable, cmp=None, key=None, reverse=False)iterable 可迭代对象cmp 比较函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。key 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。reverse 排序

2020-08-25 20:03:22 207

原创 Python内置函数 - filter()

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。 Pyhton2.7 返回列表,Python3.x 返回迭代器对象。示例:In [1]: def belowFive(a): ...: return a <= 5 ...:In [2]: A = list(range(1

2020-08-25 19:32:59 196

原创 189. 旋转数组(简单)- LeetCode

题目描述自己解法解法一 - 暴力求解直接原地移动数组,时间复杂度O(n2)O(n^2)O(n2),空间复杂度O(1)O(1)O(1):class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ length = len(num

2020-08-23 17:24:47 177

原创 1534. 统计好三元组(中等)- LeetCode

题目描述解法题目的要求是求三元组个数,按照暴力解法的话算法复杂度会达到O(n3)O(n^3)O(n3),一个比较简便的做法是先求二元组,比如:∣arr[j]−arr[k]∣≤b|arr[j]-arr[k]| ≤ b∣arr[j]−arr[k]∣≤b对于每一个二元组,满足三元组要求的第三个数满足:∣arr[i]−arr[j]∣≤a |arr[i]−arr[j]|≤a ∣arr[i]−arr[j]∣≤a∣arr[i]−arr[k]∣≤c |arr[i]−arr[k]|≤c∣arr[i]−arr[

2020-08-19 23:23:11 191

原创 31. 下一个排列(中等)

题目描述解法自己有想到解题的思路,就是尽量使低位的大数与最接近它的高位的小数交换,再使后面的序列升序排列即可,但是代码实现的时候出问题,看了看大佬的题解,大佬的题解思路就是清晰,自己写了个Python版本的:时间复杂度O(n)O(n)O(n),空间复杂度O(1)O(1)O(1)class Solution: def nextPermutation(self, nums: List[int]) -> None: """ Do not return any

2020-08-19 15:10:48 130

原创 Anaconda中常用的几个命令

查看已安装的虚拟环境conda info --env创建虚拟环境conda create -n jiayu python==3.8激活环境conda activate jiayu退出环境conda deactivate查看环境中已安装的包conda list

2020-08-18 20:55:06 134 1

原创 二分类问题的评价指标 - 精度(P)、召回率(R)

TP(TruePositive)TP(True Positive)TP(TruePositive) - 将正类预测为正类数(True Positive)FN(FalseNegative)FN(False Negative)FN(FalseNegative) - 将正类预测为负类数(False Negative)FP(TruePositive)FP(True Positive)FP(TruePositive) - 将负类预测为正类数(False Positive)TN(TrueNegative)T

2020-08-18 19:48:31 779

原创 Python文件路径

‘’ : 当前同级目录‘/’ :根目录‘./’ :当前同级目录‘…/’ :上级目录

2020-08-14 11:31:49 160

原创 面试题 17.05. 字母与数字(中等)- LeetCode

题目描述自己解法利用前缀和,时间复杂度O(n)O(n)O(n),空间复杂度O(n)O(n)O(n):class Solution: def findLongestSubarray(self, array: List[str]) -> List[str]: ans = [] locDict = {0:-1} temp = 0 for i,str in enumerate(array): if '0'

2020-08-08 19:20:47 134

原创 面试题 16.20. T9键盘(中等)- LeetCode

题目描述自己解法class Solution: def getValidT9Words(self, num: str, words: List[str]) -> List[str]: keyboard = {2:['a','b','c'],3:['d','e','f'],4:['g','h','i'],5:['j','k','l'],6:['m','n','o'],7:['p','q','r','s'], \ 8:['t','u','v'],9:['w',

2020-08-05 23:22:59 286

原创 229. 求众数 II(中等)- LeetCode

题目描述自己解法时间复杂度O(n)O(n)O(n),空间复杂度O(1)O(1)O(1)。class Solution: def majorityElement(self, nums: List[int]) -> List[int]: ans = [] if not nums: return ans cand1,count1 = nums[0],0 cand2,count2 = nums[0],0

2020-08-03 15:19:25 87

原创 560. 和为K的子数组(中等)- LeetCode

题目描述自己解法解法一:暴力求解,时间复杂度O(n2)O(n^2)O(n2),空间复杂度O(1)O(1)O(1):class Solution: def subarraySum(self, nums: List[int], k: int) -> int: ans = 0 L = len(nums) for i,val in enumerate(nums): remain = k - val

2020-08-01 23:35:34 99

原创 1491. 去掉最低工资和最高工资后的工资平均值(简单)- LeetCode

题目描述自己解法直接按题目思路模拟,没有使用API。时间复杂度O(n)O(n)O(n),空间复杂度O(1)O(1)O(1)。class Solution: def average(self, salary: List[int]) -> float: minIndex,maxIndex = 0,0 L = len(salary) for i in range(1,L): if salary[i] < salar

2020-07-24 12:26:34 206

原创 面试题 05.08. 绘制直线(中等)- LeetCode

题目描述自己解法class Solution: def drawLine(self, length: int, w: int, x1: int, x2: int, y: int) -> List[int]: ans = [0 for i in range(length)] arr = [0 for i in range(32 * length)] ## 绘制直线 if x1 > x2: x1,x

2020-07-22 17:11:42 163

原创 670. 最大交换(中等)- LeetCode

题目描述自己解法先将输入数字num转换为从高位到低位排列的数组arr,再对arr从大到小排序得到sort_arr,从前往后遍历,找出arr与sort_arr不同的第一个元素的下标start,该下标的元素就是将要与低位的大数进行替换的元素,在从start开始遍历求取最大数,将其与start下标的元素交换。最后再将原数组还原为数字输出即可。时间复杂度O(nlogn)O(nlogn)O(nlogn),空间复杂度O(n)O(n)O(n)。class Solution: def maximumSwap

2020-07-20 16:27:07 121

原创 695. 岛屿的最大面积(中等)- LeetCode

题目描述自己解法广度优先搜索(BFS),遍历过的点都置0,时间复杂度O(m∗n)O(m*n)O(m∗n),空间复杂度O(min[m,n])O(min[m,n])O(min[m,n])class Solution: def maxAreaOfIsland(self, grid: List[List[int]]) -> int: maxArea = 0 H,W = len(grid),len(grid[0]) queue = collecti

2020-07-18 12:53:32 203

原创 122. 买卖股票的最佳时机 II(中等)- LeetCode

题目描述自己解法采取的方法是计算折线图的每个上升区段,将峰值与低谷值相减得到每个上升区段的利润,最后进行累加,类似于官方题解中的第二种解法。时间复杂度O(n)O(n)O(n),空间复杂度O(1)O(1)O(1)。class Solution: def maxProfit(self, prices: List[int]) -> int: ans = 0 start,end = 0,1 length = len(prices)

2020-07-18 00:07:58 91

原创 200. 岛屿数量(中等)- LeetCode

题目描述自己解法广度优先遍历(BFS),使用列表queue模拟队列,isSelected矩阵存储该点是否被遍历过。时间复杂度O(m∗n)O(m*n)O(m∗n),空间复杂度O(m∗n)O(m*n)O(m∗n)class Solution: def numIslands(self, grid: List[List[str]]) -> int: isSelected = [[False for line in row]for row in grid] cou

2020-07-16 15:34:51 104

原创 1144. 递减元素使数组呈锯齿状(中等)- LeetCode

题目描述自己解法动态规划的思想,分别计算按奇、偶数索引形成锯齿需要的次数,在进行比较。时间复杂度O(n)O(n)O(n),空间复杂度O(1)O(1)O(1)。class Solution: def movesToMakeZigzag(self, nums: List[int]) -> int: count_odd,count_even = 0,0 temp_odd,temp_even = 0,0 for i in range(1,len(

2020-07-15 23:58:00 774

原创 121. 买卖股票的最佳时机(简单)- LeetCode

题目描述自己解法及改进维持一个数组,用动态规划的思想,记录在某一天卖出时的最大利润,最后遍历求取最大值,即买卖股票的最佳策略。缺点是空间复杂度过高。class Solution: def maxProfit(self, prices: List[int]) -> int: if not prices: return 0 profit = [0 for val in prices] minPrice = prices

2020-07-14 14:47:29 121

原创 566. 重塑矩阵(简单)- LeetCode

题目描述自己解法先把原矩阵转换为一个列表,再依次读入:时间复杂度O(m∗n)O(m*n)O(m∗n),空间复杂度O(m∗n)O(m*n)O(m∗n)class Solution: def matrixReshape(self, nums: List[List[int]], r: int, c: int) -> List[List[int]]: if r * c != len(nums) * len(nums[0]): return nums

2020-07-13 22:52:07 144

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除