
算法
算法介绍与实践。
rosefunR
每次都多付出一点. 欢迎关注公众号《机器学习与算法之道》
-
原创 做了一个B站Up主推荐系统
1. 技术路线(1)爬取B站用户关注Up主列表使用B站的API进行获取数据https://api.bilibili.com/x/relation/followings?vmid(2)采用简单的ItemCF模型参考之前的文章[零基础入门推荐系统(1)]基于用户和基于物品的协同过滤方法(python代码实现)class ItemCF(object): """ 物品协同过滤,根据用户浏览过的物品推荐相似物品 """ def train(self, user_items2021-03-01 11:25:37197
1
-
原创 搜索:PageRank网页排名技术
搜索结果的排名取决于两组信息:关于网页的质量信息,以及这个查询与每个网页的相关性信息。PageRank算法的原理一个网页被很多其他网页所链接,说明它受到普遍的承认和信赖,排名就高。对于不同网页的链接区别对待,排名高的网页链接更可靠,这些链接的权重就更大。但这里,存在网页排名过程需要用到网页本身的排名,因此,可以使用迭代的方法。先假设所有网页的排名是相同的,根据初始值,算出各个网页的第一次迭代排名,然后不断迭代直到收敛。由于网页的数量比较多,描述这个邻接矩阵很巨大,因此,使用稀疏矩阵计算的技巧,简2020-12-20 18:55:4664
0
-
原创 PCA数学原理推导及python实现
1、数学原理 步骤: 1.用X表示原有数据; 2.零均值化; 3.求协方差矩阵; 4.求特征值和特征向量; 5.根据相应的特征值把特征向量从大到小排序,从组成的矩阵选取K行代表降维的基(K维); 6.降维的基和原有数据X相乘,即为降维后的数据Y2、MATLAB实现3、python实现#pcaimport numpy as np#零均值化def zeroM2017-12-17 22:08:23699
0
-
原创 python实现归一化和标准化
参考:数据预处理2018-01-05 17:30:4016993
0
-
原创 机器学习实战 k-近邻算法及python实现
1、实现'''Created on Sep 16, 2010kNN: k Nearest NeighborsInput: inX: vector to compare to existing dataset (1xN) dataSet: size m data set of known vectors (NxM) labels: data2018-01-14 22:31:14194
0
-
原创 Python决策树的可视化
# Fit the classifier with default hyper-parametersclf = DecisionTreeClassifier(random_state=1234)model = clf.fit(X, y)text_representation = tree.export_text(clf)print(text_representation)from dtreeviz.trees import dtreeviz # remember to load the pack2020-08-06 17:46:29325
0
-
原创 经典算法: 决策树及python实现
1、基本理论决策树,就是二叉树的一种,只不过每个分支都是需要通过条件判断进行划分。2、特征提取几个术语:熵、条件熵、信息增益。 熵 条件熵 信息增益对于给定测试集,我们只需要求出各个特征的信息增益,最大的那个便是最优特征。3、决策树的生成方法:ID3、C4.5 在生成决策树时,我们往往引入阈值e. -3.1 ID3算法 使用信息增益进行决策树的生成。 容易产生过拟合。-3.2 C4.52017-11-27 20:31:20483
0
-
原创 (待完善)半监督学习(Semi-supervised learning)综述
半监督学习(Semi-supervised learning)综述1. 关于半监督学习半监督学习是机器学习的分支,主要利用有标签样本以及无标签样本用于用于特定学习的任务。如下图,半监督学习有利于获得更准确的分类边界。在这里插入图片描述1.2 半监督学习的假设(1)平滑假设如何输入的两个点在输入空间是接近的,那个它们的标签是一致的。(2)低密度假设(3)流型假设2. 半监督学习的方法2.1 Inductive 方法Inductive方法构造一个分类器,并用于对每个样本进行预测。无标签样2020-12-12 00:44:38594
0
-
转载 超大规模深度学习在美团的应用
参考:超大规模深度学习在美团的应用2020-12-07 11:04:4166
0
-
原创 强化学习系列(1):简介
1. 强化学习强化学习,reinforcement learning,RL,强调如何基于环境而行动,以取得最大化的预期利益。在机器学习问题中,环境通常被规范为马尔科夫决策过程,所以,强化学习算法在这种情况下使用动态规划技巧。强化学习和标准的监督式学习之间的区别在于,它并不需要出现正确的输入/输出对,也不需要精确校正次优化的行为。强化学习更加专注于在线规划,需要在探索(在未知的领域)和遵从(现有知识)之间找到p;h2. 强化学习模型基本的强化学习模型包括:1.环境状态的集合S;2.动作的集合A;2020-11-29 15:42:07110
0
-
原创 半监督学习模型: 半监督的SVM
1. SVM模型SVM 模型优化的损失函数:如果结构损失中的2范数换成1范数:2. 半监督的SVM考虑到无标签样本,如果无标签样本在SVM模型中预测成负类或者正类,只要它与决策面的距离少于单位距离, 都会有一个损失,并且这个损失是预测成负类和预测成正类中最小的那个损失(也就是如果预测对了,这个损失可以是0)。参考:原论文 Semi-Supervised Support Vector Machines ;半监督支持向量机(S3VMs);...2020-11-18 21:33:356452
0
-
原创 协同指导用于极限噪声标签样本学习
Co-teaching: Robust Training of Deep Neural Networks with Extremely Noisy Labels1. 方法协同指导(co-teaching)同时使用两个网络,一个网络训练后,选取损失比较小的样本,指导另一个网络接下来的训练。具体的算法:可以看出:网络 f 先选取损失较少的样本,然后网络 g 计算这部分样本的损失,并将损失进行反向传播并参数更新。同样,网络 f 对网络 g 中损失较少的样本进行计算损失和反向传播。2. 实验在M2020-10-21 16:35:525891
0
-
原创 牛顿法与拟牛顿法(含代码实现)
1. 牛顿法牛顿法(英语:Newton’s method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法。牛顿法的基本思想是使用函数 f(x){\displaystyle f(x)}f(x) 的泰勒级数的前面几项来寻找方程 f(x)=0{\displaystyle f(x)=0}f(x)=0 的根。牛顿法主要应用在两个方面,1:求方程的根;2:最优化(求解最值问题)。1.1 求方程f(x)=0{\displaystyle f(2020-10-05 23:43:516289
0
-
原创 Faiss向量召回引擎如何做到快速查找最近邻
Faiss是Facebook开源的向量召回引擎,用于寻找与某个向量最相似的N个向量。1. 简介向量量化(Vector Quantization)所谓向量量化,就是将原来无限的空间 映射到一个有限的向量集合当然这里的映射函数也不是随便指定的,需要满足误差最小的原则,一种方法是将优化函数设置为最小平方误差:正好就是k-means方法的目标函数!因此我们可以用k-means作为寻找最佳codebook的方法。假设我们将原来2000W个向量映射到大小为20W的集合中(平均每个中心点代表1002020-09-22 22:47:486260
0
-
原创 [经典面试题]:随机森林RF,梯度提升决策树GBDT,极限提升树Xgboost,轻量级梯度提升机lightgbm理论比较
由于本文是基于面试整理,因此不会过多的关注公式和推导,如果希望详细了解算法内容,敬请期待后文。 RF、GBDT和XGBoost都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性。 根据个体学习器的生成方式,目前的集成学习方法大致分为两大类:即个体学习器之间存在强依赖关系、必须串行生成的序列化方法,以及...2019-07-16 23:30:307262
6
-
原创 Python实现图的经典Dijkstra、Floyd算法
1. 简介对于最短路径算法的Dijkstra、Floyd算法:Dijkstra算法是求从某个源点到其余各个顶点的最短路径(单源最短路径),时间复杂度为 O(n2)O(n^2)O(n2) ,主要思想为每次在未确定的顶点中选取最短的路径,并把最短路径的顶点设为确定值,然后再由源点经该点出发来它相邻其他顶点的路径的值,重复以上步骤最后得到就是最短路径了。而Floyd算法针对的问题是求每对顶点之间的最短路径,相当于把Dijkstra算法执行了n遍(实际上并不是这样做),所以Floyd算法的时间复杂度为O(n32020-09-18 11:10:246130
0
-
原创 GeoHash算法获取附近店铺和距离
1. 简介GeoHash算法将二维经纬度坐标直接转换成字符串,每一个字符串代表一个矩形区域,也就是说,这个矩形区域内所有的点(经纬度坐标)都共享相同的GeoHash字符串,字符串的长度越大,矩形的区域就越小,经度也就越高。字符串相似的表示距离相近,这样可以利用字符串的前缀匹配来查询附近的POI信息。2. GeoHash算法地球纬度区间是[-90,90],经度区间是[-180,180],通过区间法对经度和纬度分别进行计算,假如我们获取到的当前坐标为经度-0.12866, 纬度38.534413,以纬度为2020-09-11 10:04:546141
0
-
原创 CTR模型:Deep&Cross Network
1. 简介DCN模型(Deep & Cross Network for Ad Click Predictions)是2017年提出的。出发点:(1)人工探索所有的交叉特征是不现实的;(2)难于推广未曾出现过的交叉特征。DNN能够自动探索交叉特征并推广到未出现过的交叉特征,但是DNN的学习效率不高,且无法显式的学习特征交叉。Deep&Cross Network, DCN 模型保留了DNN的优点,并提出了新的cross network,高效学习高阶特征交互。优点:(1)cross2020-09-08 18:32:136105
0
-
转载 推荐系统基础(5):推荐系统技术演进趋势
1. 简介最近两年,由于深度学习等一些新技术的引入,推荐系统表现出了一些比较明显的技术发展趋势。召回,主要根据用户部分特征,从海量的物品库里,快速找回一小部分用户潜在感兴趣的物品,然后交给排序环节,排序环节可以融入较多特征,使用复杂模型,来精准地做个性化推荐。召回强调快,排序强调准。四个环节是:召回,粗排序,精排序,重排。由于每个用户召回环节返回的物品数量还是太多,怕排序环节速度跟不上,在召回和精排之间加入一个粗排环节。通过少量的用户和物品特征,简单模型,对召回的结果进行粗略的排序,粗排往往是可2020-09-08 12:39:206282
0
-
原创 CTR模型:DeepCrossing
1. 简介DeepCrossing是2016年提出的模型。对于web-scale, 特征数量大,如何自动组合特征生成高阶特征是一个问题。2. 模型2.1 数据在搜索广告任务中,有大量的原始特征,每个原始特征都用一个向量表示,原始特征包括:(1)用户 query:用户搜索文本;(2)广告主竞价 keyword:广告主的竞价关键词;(3)广告Title:广告的标题文本;(4)MatchType:广告主指定的关键词匹配类型。分为exact,phrase,broad,contextual.(5)2020-09-08 00:38:026021
0
-
原创 CTR模型:PNN
1.简介PNN模型(Product-based Neural Networks for User ResponsePrediction)是2016年提出的。场景是预测用户反应,比如是点击,转化,在推荐系统,网络搜索,在线广告等,都有应用。但这些场景会存在很多的类别特征,包含多个fields, 典型的表示是通过one-hot把它转换到高维的稀疏二值特征表示。对应这种极端稀疏,传统模型局限于挖掘浅层的特征,比如,低阶特征组合。深度模型,比如深度神经网络,不能直接应用高维的输入,因为这会导致巨大的特征空2020-09-08 00:16:096057
0
-
原创 CTR模型:FNN模型
1. 简介FNN 模型是2016年提出的,基于传统机器学习模型,如LR,FM等,的CTR预测方案被称为基于浅层模型的方案。 优点是模型简单,预测性能较好,可解释性强。缺点是,很难自动提取高阶组合特征携带的信息。于是, 基于因子分解即的神经网络(Factorization Machine supported Neural Network, FNN)被提出。2. FNN模型输入的类别特征是 field-wise one-hot编码的。每个field相当于一个类别特征,比如 city。FNN模型使用因2020-09-07 21:46:426296
0
-
原创 CTR预估模型DSSM
1. 简介CTR预估模型主要用于搜索,推荐,计算广告等领域,传统CTR模型包括逻辑回归LR模型,因子分解机FM模型,梯度提升树GBDT模型等。优点是可解释性强,训练和部署方便,便于在线学习。在搜索广告的场景中,query 和document使用不同的单词,同一个单词不同形态来表达同一个概念,需要通过文本的单词匹配来计算query和document的相似性。2. DSSM 模型思想:将query 和document降维到公共的低维空间, 在低维空间,query 和document的相似性通过两者的2020-09-07 21:06:376138
0
-
原创 随机梯度下降法 SGD
1. 梯度下降batch_size = 1: SGDbatch_size = n: mini-batchbatch_size = 全部训练集大小:batch SGD对比:(1)batch SGD: 噪声小, 幅度大一些;(2)mini-batch SGD: 效率高, 收敛快;我们实际在pytorch等框架使用的SGD,只要指定的batch size不等于 1, 就是 mini-batch SGD。(3)SGD:大部分时候向着全局最小值靠近, 但是有时候会远离最小值,SGD会有很多的噪声。 S2020-09-07 09:52:596310
0
-
原创 NLP:XLNet模型
1. 简介XLNet是一种类似BERT的模型,XLNet是一种通用的自回归预训练方法,由CMU和Google Brain团队在2019年6月发布,在18个任务取得了当前最佳效果,包括机器回答,自然语言推断,情感分析,文档排序。出发点:BERT是基于去噪自编码器的预训练模型,可以很好对双向语境信息建模,性能优于自回归语言模型的预训练方法。但是,优于需要mask一部分的输入,BERT模型忽略了mask位置之间的依赖关系,出现预训练和微调效果的差异。提出的XLNet是一种泛化的自回归预训练模型,可以:2020-09-06 17:15:576182
0
-
原创 python计算阶乘方法
1. 阶乘的概念公式:n!=∏k=1nk,∀n≥1.n! = \prod_{k=1}^{n} k, \forall n\geq1.n!=∏k=1nk,∀n≥1.2. 方法1:循环# method 1. def factorial_1(n): if n<1: return 1 res = 1 for i in range(1, n+1): res *= i return res测试:prod_n = factorial_1(2020-09-02 18:14:237260
0
-
原创 两种背包问题(递归,python)
书包容量为 C, 每个物品对应重量wi和 vi ,求可拥有的最大价值,每个商品只有一个。递归解决:def backage(C,weight_list,value_list,now_value): # 剩下容量,目前商品,目前的价格,目前拥有的价值 if C<=0 or len(weight_list) ==0: return now_value if C < min(weight_list): return now_value2020-08-13 20:55:356056
0
-
原创 Pytorch学习率调整策略StepLR
CLASStorch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1, verbose=False)>>> # lr = 0.05 if epoch < 30>>> # lr = 0.005 if 30 <= epoch < 60>>> # lr = 0.0005 if 60 <= epoch < 902020-08-07 06:55:417373
0
-
原创 GLU, sparsemax, GELU激活函数
2. sparsemaxSoftmax:softmax缺点:每个向量位置都有值。文章From Softmax to Sparsemax:A Sparse Model of Attention and Multi-Label Classification 提出了能够输出稀疏概率的Sparsemax。这里把输入 z 和某个分布 p 的欧式距离最小化。一种具体的实现是,参考:论文;...2020-08-06 14:54:346913
0
-
原创 距离度量:欧氏距离,余弦距离,KL散度,马氏距离(含python代码实现)
1. 欧氏距离绝对距离。2. 余弦距离角度。归一化后的欧式距离和余弦距离关系:参考:欧氏距离和余弦相似度的区别是什么?2020-07-29 14:23:426050
0
-
原创 9种排序方法及python实现(冒泡,插入,希尔,选择,堆,快速,桶,基数,归并排序)
1. 排序算法分类外部排序 (External sorting)是指能够处理极大量数据的排序算法。通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘)上。外排序通常采用的是一种“排序-归并”的策略。在排序阶段,先读入能放在内存中的数据量,将其排序输出到一个临时文件,依此进行,将待排序数据组织为多个有序的临时文件。而后在归并阶段将这些临时文件组合为一个大的有序...2020-05-06 12:34:006453
2
-
原创 python哈希表(字典)HashTable实现
1. 概念哈希表(hash table),又称散列表,是根据键key直接访问内存存储位置的数据结构。关键字经过散列函数,得到键key。给定一对(关键字,值),关键字经过散列函数转换,得到存储位置,该存储位置存储(关键字,值)。2. 常见的散列函数散列函数的性质:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。6种散列函数:直接定址法:取关键字的...2020-05-05 16:04:097445
0
-
原创 梯度消失、爆炸原因
梯度消失经常出现,一是在深层网络中,二是采用了不合适的损失函数,比如sigmoid。梯度爆炸一般出现在深层网络和权值初始化值太大的情况下1.深层网络角度如果上一层梯度大于1,那么层数增多的时候,最终的求出的梯度更新将以指数形式增加,即发生梯度爆炸,如果上一层梯度小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失。2.激活函数角度如果使用sigmoid作为损失函...2020-09-30 22:00:366034
0
-
原创 损失函数总结
损失函数一般分为4种,HingeLoss 0-1 损失函数,绝对值损失函数,平方损失函数,对数损失函数。(Hinge Loss):主要用于支持向量机(SVM) 中Hinge loss 可以用来解 间距最大化 的问题。J(w)=12∥w∥2+C∑imax(0,1−yiwTxi)=12∥w∥2+C∑imax(0,1−mi(w))=12∥w∥2+C∑iLHinge(mi)\begin{ali...2020-05-15 09:07:006310
0
-
转载 不平衡样本对SVM的影响
样本失衡会对SVM的影响假设正类样本远多于负类1、线性可分的情况假设真实数据集如下:由于负类样本量太少,可能会出现下面这种情况使得分隔超平面偏向负类。严格意义上,这种样本不平衡不是因为样本数量的问题,而是因为边界点发生了变化2、线性不可分的情况源数据以及理想的超平面情况如下:很可能由于负类样本太少出现以下这种情况,超平面偏向负类解决不平衡的方案:【SVM对不平衡本身并不十分敏感...2020-04-22 17:10:566146
0
-
原创 常见数据结构与python实现
python重要的数据结构list 可以实现线性表,队列,栈等。1. 线性表顺序表size = 10array = [0 for i in range(size)]链表class ListNode: def __init__(self,x): self.val = x self.next = Nonenode = ListNode(0)2. 栈 stack特性:后进...2020-04-21 12:16:056074
0
-
原创 python求最大公约数
辗转相除法/欧几里得算法:def gcd(a,b): if b == 0: return a return gcd(b, a%b)print(gcd(6,9))相减法:def gcd(a,b): if b>a: tmp = a a = b b = tmp if a%b == 0: ...2020-04-16 18:43:465931
1
-
原创 pomegranate包实现贝叶斯网络
1. 包安装pip install pomegranate==0.102. 示例from pomegranate import *import numpy as npmydb=np.array([[1,2,3],[1,2,4],[1,2,5],[1,2,6],[1,3,8],[2,3,8],[1,2,4]])bnet = BayesianNetwork.from_samples...2020-04-15 18:56:206386
0
-
原创 Keras Bert实践
1. keras-bert包安装pip install keras-bert示例:训练模型:import kerasfrom keras_bert import get_base_dict, get_model, compile_model, gen_batch_inputs# A toy input examplesentence_pairs = [ [['all'...2020-04-15 13:27:526574
1
-
原创 算法:感知机及python实现
1.简介感知机(perceptron),一种构建超平面进行二分类的模型,也是神经网络和支持向量机的基础。构建误分类点到超平面的距离和的损失函数,通过随机梯度下降法进行优化,即可以得到感知机模型。2.模型感知机模型为一超平面:f(x)=sign(wx+b)f(x) = sign(wx + b)f(x)=sign(wx+b)其中,x∈Rn,w∈Rn,b∈Rx\in R^n, w \in ...2020-03-15 18:11:076041
0