11 2020 档案
摘要:Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。
阅读全文
摘要:进程是程序的一次执行过程, 正在进行的一个过程或者说一个任务,而负责执行任务的则是CPU。协程其实可以认为是比线程更小的执行单元。为啥说他是一个执行单元,因为他自带CPU上下文。这样只要在合适的时机,我们可以把一个协程切换到另一个协程,只要这个过程中保存或恢复CPU上下文那么程序还是可以运行的。
阅读全文
摘要:所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口 。
阅读全文
摘要:正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
阅读全文
摘要:异常:写的时候不报错,一旦出错,后面的代码无法执行,需要捕获异常,让后面的代码正常执行。
阅读全文
摘要:多态:在继承的基础上,而且需要用重写。要在父类中定义一个方法,让所有子类重写该方法,那么我们可以使用父类对象去指向不同的子类来调用同一个方法名,则有不同的状态或结果(animal看作是父类对象,Python没有真正的多态,这里将animal看作是父类的对象)
阅读全文
摘要:使用装饰器可以增加程序的灵活性,减少耦合度,适合使用在用户登陆检查、日志处理等方面。
阅读全文
摘要:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
阅读全文
摘要:字典占用的内存相对列表而言,更多一些,但是查询速度很快,即便数据量很大时,速度也基本不变。
阅读全文
摘要:Python的列表是可变数据类型的一种。列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型,创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。
阅读全文
摘要:Python中数据类型分为可变类型和不可变类型。在Python中,数值(整型,浮点型),布尔型,字符串,元组属于值类型,本身不允许被修改(不可变类型),数值的修改实际上是让变量指向了一个新的对象(新创建的对象),所以不会发生共享内存问题。在Python中,列表,集合,字典是引用类型,本身允许修改(可变类型)。
阅读全文
摘要:Python是一种解释型,面向对象,动态数据类型的高级程序语言。
阅读全文
摘要:2000年Google的工程师第一次将AB测试用于测试搜索结果页展示多少搜索结果更合适,虽然那次的AB测试因为搜索结果加载速度的问题失败了,但是这次的AB测试可以认为是Google的第一次AB测试。从那以后AB测试被广泛应用于互联网公司的优化迭代, 每年数万个AB实验被Google、Amazon、eBay、阿里等主流互联网公司应用于线上进行UI内容优化、算法优化、收益优化等方方面面。
阅读全文
摘要:推荐系统的任务就是联系用户和信息,一方面帮助用户发现对自己有价值的信息,而另一方面让信息(商品)能够展现在对它感兴趣的用户面前从而实现信息消费者和信息生产者的双赢。而推荐系统的实现是基于推荐算法的。
阅读全文
摘要:模型选择与评估虽然是机器学习的基础,但是个人认为这部分内容是最重要的。
阅读全文
摘要:对训练集里面样本数量较少的类别(少数类)进行过采样,合成新的样本缓解类不平衡。
阅读全文
摘要:作为GBDT的高效实现,XGBoost是一个上限特别高的算法,因此在算法竞赛中比较受欢迎。简单来说,对比原算法GBDT,XGBoost主要从下面三个方面做了优化:一是算法本身的优化,二是算法运行效率的优化,三是算法健壮性的优化。
阅读全文
摘要:假如要选择3个最重要的机器学习算法的话,GBDT应该占有一席之地。
阅读全文
摘要:Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。而Adaboost是Boosting家族的重要成员。
阅读全文
摘要:PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
阅读全文
摘要:DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。
阅读全文
摘要:K-means的算法思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的联系在一起,而让簇间的距离尽量的大。
阅读全文
摘要:TF-IDF是Term Frequency - Inverse Document Frequency的缩写,即“词频-逆文本频率”。它由两部分组成,TF和IDF。
阅读全文
摘要:SVM算法是一个很优秀的算法,在集成学习和神经网络之类的算法没有表现出优越性能前,SVM基本占据了分类模型的统治地位。目前则是在大数据时代的大样本背景下,SVM由于其在大样本时超级大的计算量,热度有所下降,但是仍然是一个常用的机器学习算法。
阅读全文
摘要:感知机算法是一个简单易懂的算法。它是很多算法的鼻祖,比如支持向量机算法,神经网络与深度学习。
阅读全文
摘要:随机森林是bagging的一个特化进阶版,所谓的特化是因为随机森林的弱学习器都是决策树。所谓的进阶是随机森林在bagging的样本随机采样基础上,又加上了特征的随机选择,其基本思想没有脱离bagging的范畴。
阅读全文
摘要:集成学习本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。也就是我们常说的“博采众长”。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等,可以说所有的机器学习领域都可以看到集成学习的身影。
阅读全文
摘要:1970年代,一个叫做昆兰的大神找到了用信息论中的熵来度量决策树的决策选择过程......
阅读全文
摘要:利用Logistics回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。这里的“回归” 一词源于最佳拟合,表示要找到最佳拟合参数集。
阅读全文
摘要:时间序列:一个变量在连续时间段内的一系列观测值。如过去十年的月度股票市场回报率数据,就是一个时间序列数据。
阅读全文
摘要:KKT条件是非线性规划最佳解的必要条件,KKT条件将拉格朗日乘数法所处理的涉及等式约束的优化问题,推广至不等式约束。
阅读全文
摘要:正则化就是对最小化经验误差函数上加约束,这样的约束可以解释为先验知识(正则化参数等价于对参数引入先验分布)。约束有引导作用,在优化误差函数的时候倾向于选择满足约束的梯度减少的方向,使最终的解倾向于符合先验知识。
阅读全文
摘要:梯度下降法作为在机器学习中较长使用的优化算法,有三种不同的形式:批量梯度下降、随机梯度下降、小批量梯度下降。
阅读全文
摘要:为了防止模型的过拟合,我们在建立线性模型的时候,经常需要加入正则化项,一般有L1正则化和L2正则化。
阅读全文
摘要:线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。
阅读全文
摘要:K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法,在平常的生活中也会不自主的应用。比如,判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用了KNN的思想。
阅读全文
摘要:1、此部分内容为本人的个人学习总结,内容来自老师的讲义、网络达人的分享、 周志华老师的《西瓜书》、李航老师的《统计学习方法》等。 2、其中网络资料以刘建平老师博客为主。
阅读全文
摘要:# 快速排序的思路是依据一个“中值”数据项来把数据表分为两半 :小于中值的一半和大于中值的一半, # 然后每部分分别进行快速排序(递归) # 如果希望这两半拥有相等数量的数据项,则应该找到数据表的中位数 # 但找中位数需要计算开销!要想没有开销,只能随意找一个数来充当中值比如,第1个数。 # 设置左
阅读全文
摘要:# 归并排序是递归算法,思路是将数据表持续分裂为两半,对两半分别进行归并排序 # 递归的基本结束条件是:数据表仅有1个数据项,自然是排好序的 # 缩小规模:将数据表分裂为相等的两半,规模减为原来的二分之一; # 用自身:将两半分别调用自身排序,然后将分别排好序的两半进行归并,得到排好序的数据表 #
阅读全文
摘要:# 我们注意到插入排序的比对次数,在最好的情况下是O(n),这种情况发生在列表已是有序的情况下, # 实际上,列表越接近有序,插入排序的比对次数就越少 # 从这个情况入手,谢尔排序以插入排序作为基础,对无序表进行间隔划分子列表,每个子列表都执行插入排序 # 子列表的间隔一般从n/2开始,每趟倍增:n
阅读全文
摘要:# 插入排序时间复杂度仍然是O(n**2),但算法思路与冒泡排序、选择排序不同 # 插入排序维持一个已排好序的子列表,其位置始终在列表的前部,然后逐步扩大这个子列表直到全表 # 插入排序的比对主要用来寻找新项的插入位置 def insertionSort(alist): for index in r
阅读全文
摘要:# 选择排序对冒泡排序进行了改进,保留了其基本的多趟比对思路,每趟都使当前最大项就位 # 但选择排序对交换进行了削减,相比起冒泡排序进行多次交换,每趟仅进行1次交换,记录最大项的所在位置,最后再跟本趟最后一项交换 # 选择排序的时间复杂度比冒泡排序稍优 # 比对次数不变,还是O(n2) # 交换次数
阅读全文
摘要:# 通过监测每趟比对是否发生过交换,可以提前确定排序是否完成 # 如果某趟比对没有发生任何交换,说明列表已经排好序,可以提前结束算法 def shortBubbleSort(alist): exchanges = True passnum = len(alist) - 1 while passnum
阅读全文
摘要:# 冒泡排序的算法思路在于对无序表进行多趟比较交换, # 每趟包括了多次两两相邻比较,并将逆序的数据项互换位置,最终能将本趟的最大项就位 # 经过n-1趟比较交换,实现整表排序 # 比对的时间复杂度是O(N**2) # 关于交换次数,时间复杂度是O(N**2) # 冒泡排序通常作为时间效率较差的排序
阅读全文
摘要:# 由于二分查找,每次比对都将下一步的比对范围缩小一半,n次比对后剩余数据n/2**i,求出i=log2(N) def binarySearch(alist, item): if len(alist) == 0: return False else: midpoint = len(alist) //
阅读全文
摘要:# 通过控制列表索引达到二分的目的 # 算法时间复杂度O(log(N)) def binarySearch(alist, item): first = 0 last = len(alist) - 1 found = False while first <= last and not found: m
阅读全文
摘要:# 算法时间复杂度O(N) def orderedSequentialSearch(alist, item): pos = 0 found = False stop = False while pos < len(alist) and not found and not stop: if alist
阅读全文
摘要:# 算法时间复杂度O(N) def sequentialSearch(alist, item): pos = 0 found = False while pos < len(alist) and not found: if alist[pos] == item: found = True else:
阅读全文
摘要:# 递归是从后向前递归调用,相当于是倒算 # 而动态规划是从前向后计算,每一步计算利用的都是前面已经计算完成的值,不存在调用自身的问题 # 动态规划突破了递归的层数限制 import time def fibonacci_v3(n, record): for i in range(1, n+1):
阅读全文
摘要:# 递归调用是函数调用自己,在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用, # 栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导 # 致栈溢出。大多数编程语言没有针对尾递归做优化,Python解释器也没有做
阅读全文
摘要:# 递归算法三定律: # 递归算法必须具备基本结束条件 # 递归算法必须要减小规模,改变状态,向基本结束条件演进 # 递归算法必须要调用自身 import time def fibonacci_v1(n): if n == 1: return 0 elif n == 2: return 1 else
阅读全文
