十大经典排序算法最强总结(含Java、Python码实现)
引言
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。
两年前,我曾在博客园发布过一篇《十大经典排序算法最强总结(含JAVA代码实现)》博文,简要介绍了比较经典的十大排序算法,不过在之前的博文中,仅给出了Java版本的代码实现,并且有一些细节上的错误。所以,今天重新写一篇文章,深入了解下十大经典排序算法的原理及实现。
简介
排序算法可以分为内部排序和**外部排序**,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等,本文只讲解内部排序算法。用一张图概括:
图片名词解释:
n:数据规模
k:“桶”的个数
In-place:占用常数内存,不占 ...
Kafka入门简介
由于近期工作要接触一些Kafka的内容,所以周末花了些时间查询了一些相关的资料,总结出一篇Kafka入门简介,方便日后的学习,也希望能给未接触过Kafka的同学带来些帮助。本文内容主要翻译自Kevin Sookocheff的《Kafka in a Nutshell》一文,并在此基础上加入了一些自己的见解,欢迎各位交流指教。
引言
Kafka是一个消息传递系统。 仅此而已,那么为什么大受人们追捧呢? 实际上,消息传递是在系统之间传递数据非常重要的基础架构。 要了解原因,让我们看一下没有消息系统的数据管道是什么样的。
该系统使用Hadoop进行存储和数据处理。 Hadoop离开数据就失去了意义,因此使用Hadoop的第一步是获取数据。
到目前为止,貌似没什么大不了的。 不过,在现实世界中,数据可能存在于许多并行的系统中,所有这些系统都需要与Hadoop进行交互,也会彼此进行交互。 这种情况就会很快变得非常复杂,一个系统处理结束后,接着可能会有更多系统通过多条通道相互通信。而且每一个通道都需要有自己的协议和通信方法,在这些系统之间传递数据是一件很复杂的事情。
让我们再看一下这张图, ...
【异常检测】孤立森林(Isolation Forest)算法简介
简介
工作的过程中经常会遇到这样一个问题,在构建模型训练数据时,我们很难保证训练数据的纯净度,数据中往往会参杂很多被错误标记噪声数据,而数据的质量决定了最终模型性能的好坏。如果进行人工二次标记,成本会很高,我们希望能使用一种无监督算法帮我们做这件事,异常检测算法可以在一定程度上解决这个问题。
异常检测分为 离群点检测(outlier detection) 以及 奇异值检测(novelty detection) 两种.
离群点检测:适用于训练数据中包含异常值的情况,例如上述所提及的情况。离群点检测模型会尝试拟合训练数据最集中的区域,而忽略异常数据。
奇异值检测:适用于训练数据不受异常值的污染,目标是去检测新样本是否是异常值。 在这种情况下,异常值也被称为奇异点。
孤立森林 (Isolation Forest, iForest)是一个基于Ensemble的快速离群点检测方法,具有线性时间复杂度和高精准度,是符合大数据处理要求的State-of-the-art算法。由南京大学周志华教授等人于2008年首次提出,之后又于2012年提出了改进版本。适用于连续数据(Continuous nu ...
深度学习工作站攒机指南
引言
接触深度学习已经快两年了,之前一直使用Google Colab和Kaggle Kernel提供的免费GPU(Tesla K80)训练模型(最近Google将Colab的GPU升级为Tesla T4,计算速度又提升了一个档次),不过由于内地网络的原因,Google和Kaggle连接十分不稳定,经常断线重连,一直是很令人头痛的问题,而且二者均有很多限制,例如Google Colab一个脚本运行的最长时间为12h,Kaggle的为6h,数据集上传也存在问题,需要使用一些Trick才能达成目的,模型的保存、下载等都会耗费很多精力,总之体验不是很好,不过免费的羊毛让大家撸,肯定会有一些限制,也是可以理解的。
对于租用云服务器,之前也尝试过,租用了一家小平台的GPU服务器,也存在一些操作上的困难,不适合程序调试,而且价格也不便宜。
很早之前就想要搭建一个自己的深度学习工作站,不过机器成本的昂贵,一直阻碍着我攒机计划的进行。工欲善其事,必先利其器!最近终于下定决心,置办一个深度学习工作站主机。本文将我在这段时间选择、购置硬件的心得体会,分享给大家。
配置清单
配件
品牌型号
数量
价 ...
【机器学习】深入理解决策树算法
引言
决策树(Decision Tree)是机器学习中一种经典的分类与回归算法。本文主要讨论用于分类的决策树。决策树模型呈树形结构,在分类问题中,决策树模型可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性,分类速度快。决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的剪枝。
基本原理
模型结构
决策树由结点(Node)和有向边(Directed Edge)组成。结点有两种类型:内部结点(Internal Node)和叶结点(Leaf Node)。内部结点表示特征或属性,叶结点表示一个类别,有向边代表了划分规则。
决策树从根结点到子结点的的有向边代表了一条路径。决策树的路径是互斥并且是完备的。
用决策树分类时,对样本的某个特征进行测试,根据测试结果将样本分配到树的子结点上。此时每个子结点对应该特征的一个取值。递归地对样本测试,直到该样本被划分叶结点。最后将样本分配为叶结点所属的类。
条件概率分布
决策树将特征空间划分为互不相交的单元,在每个单元定义一个类的概率分布,这就构成了一个条件概率分布。
决策树 ...
【机器学习】一文读懂分类算法常用评价指标
前言
评价指标是针对将相同的数据,输入不同的算法模型,或者输入不同参数的同一种算法模型,而给出这个算法或者参数好坏的定量指标。
在模型评估过程中,往往需要使用多种不同的指标进行评估,在诸多的评价指标中,大部分指标只能片面的反应模型的一部分性能,如果不能合理的运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。
最近恰好在做文本分类的工作,所以把机器学习分类任务的评价指标又过了一遍。本文将详细介绍机器学习分类任务的常用评价指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、P-R曲线(Precision-Recall Curve)、F1 Score、混淆矩阵(Confuse Matrix)、ROC、AUC。
准确率(Accuracy)
准确率是分类问题中最为原始的评价指标,准确率的定义是预测正确的结果占总样本的百分比,其公式如下:
Accuracy=TP+TNTP+TN+FP+FNAccuracy = \frac{TP+TN}{TP+TN+FP+FN}
Accuracy=TP+TN+FP+FNTP+TN
其中:
真正例(True P ...
Git常用操作指南
前言
因为工作需求,最近又重新温习了一下Git操作,遂总结了一篇Git常用操作指南,方便日后学习查阅,本博客精简提炼了在开发过程中Git经常用到的核心命令,主要参考了《廖雪峰老师的Git教程》,希望对大家学习使用Git能带来帮助。
Git简介
Git是Linux之父Linus的第二个伟大的作品,它最早是在Linux上开发的,被用来管理Linux核心的源代码。后来慢慢地有人将其移植到了Unix、Windows、Max OS等操作系统中。
Git是一个分布式的版本控制系统,与集中式的版本控制系统不同的是,每个人都工作在通过克隆建立的本地版本库中。也就是说每个人都拥有一个完整的版本库,查看提交日志、提交、创建里程碑和分支、合并分支、回退等所有操作都直接在本地完成而不需要网络连接。
对于Git仓库来说,每个人都有一个独立完整的仓库,所谓的远程仓库或是服务器仓库其实也是一个仓库,只不过这台主机24小时运行,它是一个稳定的仓库,供他人克隆、推送,也从服务器仓库中拉取别人的提交。
Git是目前世界上最先进的分布式版本控制系统。
安装之后第一步
安装完成后,还需要最后一步设置,在命令行输入:
1 ...