算法强化
TongYixuan_LUT
这个作者很懒,什么都没留下…
展开
-
算法强化 —— 反向传播
反向传播使用反向传播是为了防止路径的重复计算。为了方便,我们将之前的一个前向传播的过程复制过来:Z1=W1X+b1Z_1 = W_1X+b_1Z1=W1X+b1H1=RELU(Z1)H_1 = RELU(Z_1)H1=RELU(Z1)Z2=W2H1+b2Z_2 = W_2H_1 + b_2Z2=W2H1+b2H2=RELU(Z2)H_2 = RELU(Z_2)H2=...原创 2020-03-26 00:07:40 · 225 阅读 · 0 评论 -
算法强化 —— 前向神经网络
网络图和激活函数import numpy as npimport matplotlib.pyplot as pltfrom sklearn.datasets import make_circles准备数据def load_data(): # 训练样本有300个 测试样本有100个 train_X,train_Y = make_circles(n_samples=300...原创 2020-03-25 16:06:06 · 200 阅读 · 0 评论 -
算法强化 —— XGBoost(三)
缺失值处理真实场景中,有很多可能导致产生稀疏。如:数据缺失、某个特征上出现很多0项、人工进行one-hot编码导致大量的0理论上,数据缺失和数值0的含义是不同的,数值0是有效的实际上,数值0的处理方式类似缺失值的处理方式,都视为稀疏特征在xgboost中,数值0的处理方式和缺失值的处理方式是同一的。这只是一个计算上的优化,用于加速稀疏特征的处理速度对于稀疏特征,只需要对有效值进行处理,无...原创 2020-03-25 10:19:36 · 251 阅读 · 0 评论 -
算法强化 —— XGBoost(二)
分裂点贪心算法对现有的叶节点加入一个分裂,然后考虑分裂之后目标函数降低多少,如果目标函数下降,则说明可以分裂,如果目标函数不下降,则说明该叶节点不宜分裂对于一个叶节点,加入给定其分裂点,定义划分到左子节点的样本的集合为mathbbIL={i∣q(x→i)=L}\\mathbb{I}_{L}=\left\{i | q\left(\overrightarrow{\mathbf{x}}_{i}\ri...原创 2020-03-24 21:43:02 · 121 阅读 · 0 评论 -
算法强化 —— XGBoost
XGBoostxgboost也是使用提升树相同的前向分步算法。其区别在于:xgboost通过结构风险极小化来确定下一个决策参数Θm{\Theta}_{m}ΘmΘ^m=argminΘm∑i=1NL(y~i,fm(x→i))+Ω(hm(x→))\hat{\Theta}_{m}=\arg \min _{\Theta_{m}} \sum_{i=1}^{N} L\left(\tilde{y}_{i...原创 2020-03-24 15:26:41 · 169 阅读 · 0 评论 -
算法强化 —— 提升树算法(四)
多分类问题对于多分类问题,与二分类问题类似,仅在损失函数部分有所区别,对于多分类问题,原论文中选择的是交叉熵损失函数L({yk,Fk(x)}1K)=−∑k=1Kyklogpk(x)L\left(\left\{y_{k}, F_{k}(x)\right\}_{1}^{K}\right)=-\sum_{k=1}^{K} y_{k} \log p_{k}(x)L({yk,Fk(x)}1K)=...原创 2020-03-24 10:57:57 · 125 阅读 · 0 评论 -
算法强化 —— 提升树算法(三)
二分类问题对于二分类问题,原论文中使用的对数损失函数:L(y,F)=log(1+exp(−2yF)),y∈−1,1L(y,F) = log(1+exp(-2yF)),y \in -1,1L(y,F)=log(1+exp(−2yF)),y∈−1,1其中F(x)=12log[Pr(y=1∣x)Pr(y=−1∣x)]F(x) = \frac{1}{2}log \left[\frac{Pr(y=1...原创 2020-03-23 22:58:56 · 154 阅读 · 0 评论 -
算法强化 —— 提升树算法(二)
梯度提升树梯度提升树,是利用损失函数的负梯度在当前模型的值作为残差的一个近似值,进行拟合回归树,这样只要可以求梯度的函数,我们都可以进行求解。为了简便去掉求和符号和下标,改用向量化表示,则损失函数为:loss=L(y,fm(x))=L(y−fm−1(x)−hm(x;am))\text {loss}=L\left(y_, f_{m}\left(x\right)\right)=L \left(y...原创 2020-03-23 16:59:03 · 188 阅读 · 0 评论 -
算法强化 —— 提升树算法(一)
GDBT首先GBDT是集成学习的一种,而且属于boosting家族。我们知道Bagging的思想比较简单,即每一次从原始数据中根据均匀概率分布有放回的抽取和原始数据大小相同的样本集合,样本点可能出现重复,然后对每一次产生的训练集构造一个分类器,再对分类器进行组合。常见的随机森林算法就是bagging的集成算法。boosting的每一次抽样的样本分布都是不一样的。每一次迭代,都根据上一次迭代的结...原创 2020-03-23 15:30:20 · 204 阅读 · 0 评论 -
算法强化 —— GRU和LSTM
GRU(Gated Recurrent Unit)一个带门的RNN一般RNN模型中,每个元素受其周围附近的影响较大,难以建立跨度较大的依赖性。由于跨度较大,普通的RNN模型就容易出现梯度消失,捕捉不到他们之间的依赖,造成语法错误。其中,a<t>a^{<t>}a<t>的表达式为a<t>=tanh(Wa[a<t−1>,x<t&...原创 2020-03-22 23:37:25 · 340 阅读 · 0 评论 -
算法强化 —— 循环神经网络(RNN)
循环神经网络(RNN)为了更好地解决序列信号问题,例如语音识别,机器翻译,情感分类,音乐发生器等,需要构建一种新的神经网络模型,RNN就是这样的序列模型传统的神经网络模型x<1>,x<2>,...,x<Ts>x^{<1>},x^{<2>},...,x^{<T_s>}x<1>,x<2>,...,x...原创 2020-03-22 22:31:39 · 418 阅读 · 0 评论 -
算法强化 —— HMM模型(二)
HMM——三个基本问题的计算宇宙公主有金银铜三个首饰盒。金首饰盒里有两件红宝石、一件蓝宝石,一件珍珠首饰和一件珊瑚;银首饰盒里有红宝石、珍珠,珊瑚和蓝宝石首饰各一件;铜首饰盒里有珍珠、红宝石和珊瑚首饰各一件。她准备这样做:把三个首饰盒放在一个轮盘上,随机转动轮盘。停下时,哪个盒子在她眼前,她就从这个首饰盒里随机拿出一件首饰,记录首饰的材质后,把首饰放回原盒中。宇宙公主将重复上述动作3次,如果...原创 2020-03-22 16:18:46 · 137 阅读 · 0 评论 -
算法强化 —— HMM模型(一)
HMM模型HMM–定义和假设概率模型所谓概率模型,顾名思义,就是将学习任务归结于计算变量的概率分布的模型概率模型非常重要。在生活中,我们经常会根据一些已经观察到的现象来预测和估计未知的东西————这种需求,恰恰是概率模型的推断(inference)行为所做的事情。推断(inference)的本质是:利用可观测变量,来推测未知变量的条件分布。生成模型VS判别模型概率模型又可以分为两类:...原创 2020-03-21 21:27:00 · 464 阅读 · 0 评论 -
算法强化 —— K-means
k-means主要思想有四个牧师去郊区布道,一开始牧师们随意选择了几个布道点,并且把这几个布道点的情况公告给了郊区所有的居民,于是每个居民到离自己家最近的布道点去听课。听课之后,大家觉得距离太远了,于是每个牧师统计了一下自己上课所有居民的地址,搬到了所有地址的中心地带,并且在海报上更新了自己的布道点的位置。牧师每一次移动不可能离所有人都很近。有的人发现A牧师移动以后自己还不如去B牧师出听课更近...原创 2020-03-21 16:23:50 · 210 阅读 · 0 评论 -
算法强化 —— 最长公共子序列 LCS
最长公共子序列LeetCode 1143. 最长公共子序列给定两个字符串text1和text2,返回这两个字符串的最长公共子序列。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace"是"abcde"的子序列,但"aec"不是"abcde"的子序列。两个字符串的「公共子序列」是这两个字符串...原创 2020-03-19 16:46:08 · 112 阅读 · 0 评论 -
算法强化 —— 最长上升子序列 LIS
最长上升子序列 LIS给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。暴力解法 列出所有子序列,再判断这个子序列是不是上升子序列状态和状态转移方程状态: 定义dp[i],表示以第i个数字为结尾的最长上升子序列的长度dp[i]表示范围[0,i]...原创 2020-03-19 16:10:25 · 141 阅读 · 0 评论 -
算法强化 —— 动态规划
动态规划1.斐波那契数列2.记忆化搜索3.动态规划def f1(n): if n == 0: return 0 if n == 1: return 1 return f1(n-1)+f1(n-2)记忆化搜索我们已经知道哥哥的递归计算方式的问题是重复计算,那么我们把已经计算过的内容存下来就好了,这种方法叫做记忆化搜索m...原创 2020-03-19 14:19:48 · 173 阅读 · 0 评论 -
算法强化 —— 递归(回溯法)
回溯法全排列问题机器人的运动范围LeetCode 46 全排列给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]什么是回溯法1.递归一定会发生回溯2.通常讲的回溯法师一种暴力的搜索方法class Solution: ...原创 2020-03-18 23:54:17 · 177 阅读 · 0 评论 -
算法强化 —— 递归
递归1.斐波那契数列2.什么是递归3.记忆化搜索4.跳台阶问题5.变态跳台阶问题斐波那契数列F(0)=0F(0) = 0F(0)=0F(1)=1F(1) = 1F(1)=1F(n)=F(n−1)+F(n−2)F(n) = F(n-1)+F(n-2)F(n)=F(n−1)+F(n−2) def f1(n): if n == 0: ...原创 2020-03-18 20:28:35 · 122 阅读 · 0 评论 -
算法强化 —— 二叉搜索树 和 平衡搜索树
二叉搜索树 和 平衡搜索树二叉搜索树定义二叉查找树(Binary Search Tree):1.它或者是一颗空树2.或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值,它的左右子树也分别为二叉排序树平衡搜索树定义AVL树本质上还是一颗二叉搜索树,它的特点是1.本身首先是一颗二叉搜索树...原创 2020-03-18 16:54:38 · 110 阅读 · 0 评论 -
算法强化 —— 二叉树的遍历
二叉树的遍历二叉树的数据结构class TreeNode: def __init__(self,x): self.val = x self.left = None self.right = None二叉树的前序遍历 def preorder(root): if root: print(root.v...原创 2020-03-18 15:06:53 · 79 阅读 · 0 评论 -
算法强化 —— 最小生成树
最小生成树并查集思想:用集合中的一个元素代表集合操作:合并(Union):把两个不想交的集合合并为一个集合查询(Find):查询两个元素是否在同一个集合中LeetCode 684 冗余检测在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属...原创 2020-03-17 22:44:13 · 181 阅读 · 0 评论 -
算法强化 —— 最短路径
最短路径Dijkstra算法Bellman-Ford算法Dijkstra步骤1.第一个核心步骤:找到当前未处理过的顶点中Distance最小的点V,(由于起点到起点的消耗为0,所以算法开始时V必定代表起点)2.第二个核心步骤:若V有邻居,则计算经过V的情况下起点到达各邻居的消耗Distance,并选择是否更新V邻居的Distance值。若没有邻居则对该点的处理结束3.重复以上两个核心...原创 2020-03-17 19:33:28 · 325 阅读 · 0 评论 -
算法强化 —— BFS和DFS
广度优先 深度优先BFS算法过程:1.首先将根节点放入队列中2.从队列中取出第一个节点,进行访问,并将其所有未访问过的邻居加入队列汇总3.若队列为空,则算法结束时间复杂度不确定,|V|代表节点数量,|E|代表边的数量邻接表表示时,查找所有顶点的邻接点所需时间为O(|E|),访问顶点的邻接点所花时间为O(|V|),总的时间复杂度为O(|V|+|E|)邻接矩阵表示时,查找每个顶点的邻...原创 2020-03-17 17:07:21 · 215 阅读 · 0 评论 -
算法强化 —— 链表
链表1.信息域:当前节点的值(Data or Value)2.指针域:指向下一个节点的指针链接(Reference or Link)注:1.必须明确指定链表的第一项的位置。一旦我们知道第一项在哪里,第一项目可以告诉我们第二项是什么,依次类推。按照一个方向遍历,直到最后一项(最后一个节点),最后一项需要知道没有下一项。2.这些节点在逻辑上是相连的,但是要知道他们在物理内存上并不相连链表是...原创 2020-03-15 19:34:50 · 92 阅读 · 0 评论 -
算法强化 —— 哈希表
哈希表什么是哈希表哈希表(Hash table 也叫散列表),是==根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。==这个映射函数叫做散列函数,存放记录的数据叫做散列表。记录的存储位置 = f(关键字)这里的对应关系f称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存储在一块连续的存储空间中...原创 2020-03-15 15:58:15 · 119 阅读 · 0 评论 -
算法强化 —— 二分查找
二分查找def binarySearch(self,nums,target): left = 0 right = len(nums)-1 while(left <= right): mid = (right+left)/2 if nums[mid] == target: return mid e...原创 2020-03-14 20:40:49 · 140 阅读 · 0 评论 -
算法强化 ——KMP
KMP是一种空间换时间的算法,特点是主串的指针不往回走,利用存储好的信息,避免重复的运算要利用的信息存储在 部分匹配表(Partial Match Table)PMT:charabababcaindex01234567value00123401...原创 2020-03-14 16:16:46 · 109 阅读 · 0 评论 -
算法强化 —— SVM(四)
核函数线性不可分问题怎么解决对svm 来讲,最好的当然是样本完全线性可分,就算差一点不是完全的我们也希望绝大部分眼本店线性可分。但是我们可能碰到一种情况,样本点不是线性可分的这种情况的一种解决办法就是,将二维线性不可分样本,映射到高维空间中,让样本点在高维空间线性可分,比如变成这样:高维比低维更容易线性可分什么是非线性SVM对于有限维度向量空间中线性不可分的样本,我们将其映射到更...原创 2020-03-10 19:57:54 · 323 阅读 · 0 评论 -
算法强化 —— SVM(三)
软间隔软间隔的提出是解决什么问题的在实际的应用中,完全线性可分的样本是很少的,如果遇到了不能完全线性可分的样本我们应该怎么办,所以提出了软间隔,允许个别样本点出现在间隔带里面这样就允许了部分样本点不满足约束条件yi(wxi+b)≥1y_i(wx_i+b) \geq 1yi(wxi+b)≥1为了度量这个间隔"软"到何种程度,我们针对每个样本(x_i,y_i),引入一个松弛变量ξ...原创 2020-03-09 13:43:01 · 268 阅读 · 0 评论 -
算法强化 —— SVM(二)
SVM对偶问题约束条件下的目标函数如何求解最优化问题可以使用拉格朗日乘子法进行求解,将原本有约束的优化问题,转化为拉格朗日函数的无约束优化问题。拉格朗日乘子法的定义(以三维空间为例)L(x,y,λ)=f(x,y)+λg(x,y)L(x, y, \lambda)=f(x, y)+\lambda g(x, y)L(x,y,λ)=f(x,y)+λg(x,y)其中λ\lambdaλ是拉格朗...原创 2020-03-08 23:15:59 · 278 阅读 · 0 评论 -
算法强化 —— SVM(一)
SVM三宝间隔对偶和技巧间隔什么是线性可分在二维界面上,两类点呗一条直线完全分开,叫做线性可分。严格的数学定义是D0D_0D0和D1D_1D1是n维欧氏空间中的两个点集(点的集合)。如果存在n维向量w和实数b,使得所有属于D0D_0D0的点xix_ixi都有wxi+b>0wx_i + b > 0wxi+b>0,而对于所有属于D1D_1D1的点xjx_jx...原创 2020-03-08 16:35:04 · 345 阅读 · 0 评论 -
算法强化 —— 决策树
决策树原理顾名思义,决策树就是用一棵树来表示我们的整个决策过程。这棵树可以使二叉树(CART只能是二叉树),也可以使多叉树(ID3,C4.5 可以是多叉树或二叉树)根节点包含整个样本集,每个叶节点都对应一个决策结果(注意,不同的叶节点可能对应同一个决策结果),每一个内部节点都对应一次决策过程或者说是一次属性测试。从根节点到每个叶子节点的路径对应一个判定测试序列。决策树的生成就是不断的选择...原创 2020-03-07 21:35:15 · 423 阅读 · 0 评论 -
算法强化 —— 逻辑回归
逻辑回归线性回归、逻辑回归直观感受以身高举例,直觉告诉我们爸爸妈妈的身高会共同影响子女的身高,为了同时考虑到父母双方的身高的影响,可以取其两者的平均值作为因素进行研究。这里父母的平均身高就是自变量x,而我们的身高就是因变量y,y和x之间存在线性关系。y=wx+by = wx+by=wx+b那么我们如何求出w 和 b 呢,需要收集足够多的x,y,然后通过线性回归算法就可以拟合数据,帮助我们...原创 2020-03-07 14:37:54 · 180 阅读 · 0 评论 -
算法强化 —— 双指针 two pointer
双指针 two pointer1.对撞指针2.快慢指针LeetCode 167two sum Input array is sorted给定一个有序整型数组和一个整数target,在其中寻找两个元素,使其和为target返回这两个数的索引例 nums = [2,7,11,15] target = 9return [1,2]解决问题最直接的思考,暴力解法,双层遍历O(n^2)暴...原创 2020-03-06 21:48:57 · 189 阅读 · 0 评论 -
算法强化 —— 堆排序
堆排序二叉堆二叉堆本质上是一种完全二叉树,它分为两个类型:1.最大堆:最大堆任何一个父节点的值,都大于等于它左右两个孩子节点的值2.最小堆:最小堆任何一个父节点的值,都小于等于它左右两个孩子节点的值二叉堆的根节点叫堆顶最大堆和最小堆的特点,决定了在最大堆的堆顶是整个堆中的最大元素;最小堆的堆顶是整个堆中的最小元素堆的自我调整插入节点以最小堆为例,二叉堆是如何自我调整看插入节点是...原创 2020-03-05 22:49:33 · 109 阅读 · 0 评论 -
算法强化 —— 快速排序
快速排序快速排序(Quick Sort),是冒泡排序的一种改进,由C.A.R.Hoare在1960年提出。快速排序的主要思想是通过一排排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最终使整个数据编程有序序列。算法介绍原理1.在数据集之中,选择一个元素作为“基准”(pivot...原创 2020-03-04 20:45:26 · 214 阅读 · 0 评论