自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

rover

干货铺

  • 博客(30)
  • 资源 (4)
  • 收藏
  • 关注

原创 PageRank算法详解

搜索引擎的主要工作,是爬虫建立资料库,根据关键词快速查找(倒排索引)含有关键词的页面,将结果按照重要程度排序后呈现给用户。核心难题在于如何对海量检索结果排序(Rank, Not Sort)。1. PageRank和HITS互联网的超链接(hyperlink)构成了一个巨大的有向图,图中的结点代表网页,有向连接表示超链接,称**入链(inlink)为连入某页面的、指向结点的超链接,而出链(outlink)**就是结点出发的超链接。可以将超链接视为一种推荐,由我的主页指向你的主页的超链接,就是我对你的Ho

2020-05-31 20:10:10 3785

原创 深度协同过滤NCF实践

修改官网代码去掉了不方便直接引用的from official.utils.*代码,关键处理处添加了注释。从official.utils.flags扒出一个有用的小函数:def get_gpus_num(): """ 获取GPU个数 """ from tensorflow.python.client import device_lib local_device_protos = device_lib.list_local_devices() return sum([1 for d in

2020-05-30 16:06:41 1594

原创 经典论文阅读(一)--NCF: Neural Collaborative Filtering

NCF是神经网络版本的协同过滤,推荐算法的经典的方法之一。本文回顾一下NCF论文的要点。摘要(What)NCF是一种通用的框架,它可以表达和推广矩阵分解。为了提升NFC的非线性建模能力,我们提出了使用多层感知机去学习用户-项目之间交互函数(interaction function)。引言(Why)矩阵分解(MF):将用户和项目映射到共享潜在空间(shared latent space),使用潜在特征向量(latent features),用以表示用户或项目。这样一来,用户在项目上的交互就被建模为

2020-05-28 22:18:11 3414

原创 Delaunay三角剖分算法初探

Delaunay三角网在空间邻近分析上是一种较好的支持模型, 广泛应用于空间聚类、多边形群的合并、人像关键点提取、形态分析中。问题:一堆二维点中寻找一个与目标点最近(欧氏距离最小)的点。1. 三角剖分与Delaunay剖分的定义   如何把一个散点集合剖分成不均匀的三角形网格,这就是散点集的三角剖分问题,散点集的三角剖分,对数值分析以及图形学来说,都是极为重要的一项预处理技术。该问题图示如下:   1.1. 三角剖分定义  【定义】三角剖分:假设V是二维实数域上的有限点集,边e是由点集中的点作

2020-05-28 18:56:12 3022 1

原创 tensorflow提升树实践

以决策树为基函数的提升方法称为提升树(boosting tree)。提升树采用前向分步算法,根据每轮迭代的残差值,学习得到一个回归树,用加法模型得到提升树的结果。回归问题采用平方误差损失函数,分类问题用指数损失函数。指数损失通过最小化指数损失来逐步学习多个输出为1和−1的二值基函数{φj}j=1b\{\varphi_j\}^b_{j=1}{φj​}j=1b​的线性组合。对离群点、噪声非常敏感,常用在AdaBoost算法中。指数损失详解HIGGS 数据集包含有 11 million 个样本,具有 28

2020-05-26 11:48:13 524

原创 spark(十)RDD的groupByKey和reduceByKey实现

先上源码: /** RDD.scala * Return an RDD of grouped items. Each group consists of a key and a sequence of elements * mapping to that key. The ordering of elements within each group is not guaranteed, and * may even differ each time the resulting RD

2020-05-26 00:03:56 759

原创 glibc中memcpy和memmove函数的实现

两三年前的一篇笔记,挺有意思的。[ glibc-2.12.2 ]中memcpy()的源码,加上个别中文注释:// 位于 string/memcpy.c#include <string.h>#include <memcopy.h>#include <pagecopy.h>#undef memcpyvoid *memcpy (dstpp, srcpp, len) void *dstpp; const void *srcpp;...

2020-05-24 22:20:02 1055

原创 win10安装tensorflow-gpu版本

几个月前用conda创建了一个python3.6的虚拟环境用于安装tensorflow-gpu,而win10下Anaconda自带的python是3.7.4版本的,后来发现默认的python3.7环境中 "No module named 'tensorflow'"!坑爹啊。干脆就把之前的python3.6版本下的虚拟环境给删除了,使用命令conda remove -n tf-py36 --all ,然后重新安装!在官网https://www.tensorflow.org/install/source可以

2020-05-23 14:32:24 544

原创 SVM参数理解和分类实践

sklearn中svm.SVC()有比较重要的参数C和gamma,默认使用径向基核(kernel=‘rbf’)。RBF的核函数:K(x,z)=exp(−γ∥x−z∥2), γ>0K(x,z)=exp(-\gamma\|x-z\|^2),\, \gamma>0K(x,z)=exp(−γ∥x−z∥2),γ>0高斯核的RBF时,核函数:K(x,z)=exp(−∥x−z∥22⋅δ2)K(x,z)=exp(-\dfrac{\|x-z\|^2}{2\cdot \delta^2})K(x,z)=ex

2020-05-22 15:39:31 1237

原创 用spark窗口函数进行session划分

问题1:数据有car_id,city,up_time三列,目标是获取car每次经过一个city的时间段,类似于网页中的session,不是经过每个city的总时间。每个时间段以当地的up_time为准。比如:  N597,   杭州,   03-15 11:49:16  N597,   杭州,   03-15 12:50:38  N597,   绍兴,   03-15 14:10:35  N597,   绍兴,   03-15 19:20:47  N597,   杭州,   03-16 13

2020-05-21 16:26:11 884

原创 sqoop从mysql导入hive

# 导入全量sqoop import --connect jdbc:mysql://addr.yun.com:3306/idc_dev_temp?charset=utf-8 --username idc_online --password Pwd_2019 --table gout_zhiyun_mon_t2 -m 1 --hive-import --create-hive-table --hi...

2020-05-21 11:02:45 307

原创 spark SQL(12)show函数的执行流程

DataSet中的show()调用select()执行,并打印结果。 def show(truncate: Boolean): Unit = show(20, truncate) // def show(numRows: Int, truncate: Boolean): Unit = if (truncate) { println(showString(numRows, truncate = 20)) } else { println(showString(numRows,

2020-05-20 19:27:36 4223

原创 spark SQL(11)sql语句执行流程源码

spark通常这样开始执行一条SQL语句: val spark_sess = SparkSession .builder() .appName("Spark SQL basic example") .config("spark.some.config.option", "some-value") .getOrCreate() df = spark.read.json("examples/src/main/resources/people.json")

2020-05-20 14:19:11 2569 1

原创 循环神经网络简介

循环神经网络(recurrent neural network)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络。RNN用于解决训练样本输入是连续的序列,且序列的长短不一的问题,比如基于时间序列的问题。基础的神经网络只在层与层之间建立了权连接,RNN最大的不同之处就是在层之间的神经元之间也建立的权连接。RNN神经网络的结构如下:XRNNYh0Func_WX_t-1h_t-1Func_WX_th_tFunc_WX_t+1h_t+1RNN每个神经元的计算使用相同的权重参数和函数

2020-05-19 17:54:55 2193

原创 随机森林算法简介

随机森林(Random Forest) 实际上是一种改进的bagging方法,它将CART树用作bagging中的模型。普通决策树在节点上所有的样本特征中选择一个最优的特征来作为左右子树的划分,随机森林(RF)通过随机选择节点上的一部分特征,然后再这些随机算则的样本特征中,选择一个最优的特征作为左右子树的划分,从而增强了泛化能力。相当于对于样本和特征都进行了采样。随机森林算法流程:输入:样本集D={(x,y1),(x2,y2),…(xm,ym)},弱分类器迭代次数T。输出:最终的强分类器f(x)

2020-05-19 14:34:40 1484

原创 spark(九)-checkpoint的读写流程

RDD.checkpointspark计算中,当 计算流程DAG特别长,服务器需要将整个DAG计算完成得出结果,但是如果在这很长的计算流程中突然中间算出的数据丢失了,spark又会根据RDD的依赖关系从头到尾计算一遍,浪费计算资源,也非常耗时。checkpoint的作用就是将DAG中比较重要的中间数据做一个检查点将结果存储到一个高可用的地方(比如HDFS),当下游RDD计算出错时,可以直接从checkpoint过的RDD那里读取数据继续计算。在大数据量的情况下,保存和读取rdd数据也会十分消耗资源。所以

2020-05-19 12:37:28 1300

原创 朴素贝叶斯法的参数估计理论

贝叶斯的参数估计朴素贝叶斯方法需要知道先验概率,此时P(Yi)P(Y_i)P(Yi​)是先验概率,P(X∣Yi)P(X|Y_i)P(X∣Yi​)是类的条件概率密度。P(Yi)P(Y_i)P(Yi​)容易得到,对类的条件密度的估计存在两个问题:1,实际的样本对于类条件概率的估计来说,太少了;2,有时特征空间的维度太高,计算复杂度太高。为了降低估计难度,我们可以将类条件密度参数化,比如用正态分布来估计P(X∣Yi)P(X|Y_i)P(X∣Yi​)(极大似然)。再来一遍:根据贝叶斯公式,利用先验概率和

2020-05-18 16:02:21 1440

原创 朴素贝叶斯进行垃圾邮件分类原理

条件概率公式:P(A∣S)=∣A∩S∣∣S∣=P(A∩S)P(S)P(A|S)=\dfrac{|A\cap S|}{|S|}=\dfrac{P(A \cap S)}{P(S)}P(A∣S)=∣S∣∣A∩S∣​=P(S)P(A∩S)​推出:P(AS)=P(S)P(A∣S)P(AS)=P(S)P(A|S)P(AS)=P(S)P(A∣S)P(a,b∣c)=P(a,b,c)P(c)=P(a,b,c)P(b,c)⋅P(b,c)P(c)=P(a∣b,c)P(b∣c)or=P(b∣a,c)P(a∣c)\begin{

2020-05-17 14:01:52 2891

原创 spark(八)-Executor运行一个task

Executor launchTask()def launchTask(context: ExecutorBackend, taskDescription: TaskDescription): Unit = {val tr = new TaskRunner(context, taskDescription)runningTasks.put(taskDescription.taskId, tr)threadPool.execute(tr)}TaskRunner.run() overri.

2020-05-14 23:54:13 304

原创 spark(七)-TaskSet资源调度机制

submitMissingTasks()stage划分好以后,找到了祖先parent,就可以执行从头一个stage开始的所有task了。RDD Action 触发sc.runJob -> DAGScheduler事件循环 -> submitStage() -> submitMissingTasks()submitMissingTasks为stage创建tasks,从stage中获取numPartitions,为每一个partition创建一个task。 //为每一个parti

2020-05-13 17:16:35 1490

原创 Spark(六)-Stage划分算法

DAGScheduler提交job时,主要执行了:val func2 = func.asInstanceOf[(TaskContext, Iterator[_]) => _]val waiter = new JobWaiter(this, jobId, partitions.size, resultHandler)eventProcessLoop.post(JobSubmitted( jobId, rdd, func2, partitions.toArray, callSite, wa

2020-05-13 11:13:05 410

原创 spark(五)-wordcount执行过程

有了文件读写过程,就可以读取一个文件执行简单的hello spark程序了。wordcount执行过程val lines = sc.textFile(“D:/resources/README.md”)val words = lines.flatMap(.split(" ")).filter(word => word != " ")val counts = words.map(word => (word,1)).reduceByKey( + _)counts.collect().fore

2020-05-12 15:08:04 263

原创 spark(三)-Worker启动Driver和Executor

master在schedule()时会先启动注册过来的waitingDrivers,然后启动Worker上的所有Executors。在standalone模式下。Worker启动Drivermaster向worker发送LaunchDriver(driver.id, driver.desc)消息,worker收到LaunchDriver消息后,创建一个DriverRunner()来管理driver的执行,在driver失败时重启等。worker调用DriverRunner()的start(),记录

2020-05-12 11:30:24 407

原创 spark(二)-Master的资源调度

Master在收到RegisterWorker/RegisterApplication/ExecutorStateChanged/RequestSubmitDriver消息时,或者完成主备切换后,都要执行schedule(),来调度waiting apps中所有可用的(ALIVE状态的)资源(Driver,Executor on Workers):private def schedule(): Unit = { // Standby master是不会参与Application资源的调度的

2020-05-11 14:48:55 282

原创 spark(四)-文件读写流程

1,spark读文件流程从本地读取txt文件:// path最后可以是文件或文件夹,还可以用通配符val path = “file:///usr/local/spark/spark-1.6.0-bin-hadoop2.6/licenses/”val rdd1 = sparkcontext.textFile(path,2)从hdfs读取文件:sparkcontext.textFile("hdfs://s1:8020/user/hdfs/input”)textFile()Read a text f

2020-05-10 17:19:35 2394

原创 spark2.4.3(一)提交作业的整体流程

任务提交和执行流程以standalone模式为例的基本流程:spark-submit shell提交Application,提交到Driver进程。Spark使用DriverWrapper启动用户APP的main函数。Driver进程执行Application应用代码,先构建sparkContext。sparkContext初始化时,主要是构建出TaskScheduler和DAGScheduler。TaskScheduler通过后台进程连接Master,向Master注册Application.

2020-05-09 17:27:43 537

原创 kafka设计解析(二)

1. kafka在zk中的存储结构http://www.cnblogs.com/byrhuangqiang/p/6367037.html/broker/ids/[0…N]broker 注册信息。 其中[0…N]表示broker id(broker id唯一,不可以重复)/broker/topics/[topic]/partitions/[0…N]Broker Topic 注册。...

2020-05-06 22:37:05 249

原创 kafka设计解析(一)

目前生产环境中,使用较多的消息队列有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ等。消息系统的作用:异步处理、应用解耦、流量削峰和消息通讯异步处理 用户注册后,异步发送邮件和注册短信。 缩短响应时间,提高吞吐量。应用解耦 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险,两端互不影响。流量削峰 通过队列暂存或...

2020-05-06 22:33:23 398

原创 XGBoost原理小结

XGBoost(eXtreme Gradient Boosting) 是梯度提升树算法的一种流行且高效的开源实现。梯度提升(Gradient Boosting)是一种监督式集成学习算法,它尝试将一组较简单、较弱的模型的一系列估计值结合在一起,从而准确地预测目标变量。XGBoost 在机器学习竞赛中表现出色。得益于大量的超参数可进行优化和调整来改进拟合效果,XGBoost能够Robust地处理各种数...

2020-05-05 23:09:22 457

原创 GBDT原理小结

提升树提升树(BoostingTree)其实是决策树的加法模型,采用了前向分步算法。前向分步算法:初始提升树f_0(x)=0,第m步的模型:fm(x)=fm−1(x)+T(x;Θm)f_m(x)=f_{m-1}(x)+T(x;\Theta_m)fm​(x)=fm−1​(x)+T(x;Θm​)其中T(x;Θm)T(x;\Theta_m)T(x;Θm​)为决策树,Θ\ThetaΘ表示决策树的参...

2020-05-01 16:05:04 150

Hive用户指南(Hive_user_guide)_中文版.pdf

Hive用户指南,使用手册,简明扼要。内容包括架构、基本操作、参数设置、UDF,以及优化及使用技巧等等。

2020-07-28

Effective C++ 中文版

Effective C++ 精简版,经典名著你懂的

2014-12-22

DebugHacks深入调试.pdf

DebugHacks深入调试.pdf 电子书

2014-12-22

空空如也

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

TA关注的人

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