- 博客(61)
- 资源 (7)
- 收藏
- 关注
转载 数据归一化
多时候,如果不对数据进行归一化,会导致梯度下降复杂或是xgboost中的损失函数只能选择线性,导致模型效果不佳。下面我结合各类我看到的资料总结一下几种方式的归一化,并有python的实现。从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。如下有个形象的图...
2018-06-28 21:21:14 1335
转载 过拟合的原因和解决方案
一、过拟合的原因 1. 训练集的数量级和模型的复杂度不匹配。训练集的数量级要小于模型的复杂度; 2. 训练集和测试集特征分布不一致; 3. 样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系; 4. 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征。二、过拟合的解决方案 1. 调小模型...
2018-06-28 21:19:34 8329 2
原创 逻辑斯蒂回归(Logistic)
一、线性回归1、线性回归的概念 如果特征值之间存在线性关系就可以使用线性回归建模对其预测结果。(1)函数模型(2)最小二乘法求解 何为最小二乘法,其实很简单。我们有很多的给定点,这时候我们需要找出一条线去拟合它,那么我先假设这个线的方程,然后把数据点代入假设的方程得到观测值,求使得实际值与观测值相减的平方和最小的参数。对变量求偏导联立便可求。 如果矩阵不满...
2018-06-28 20:55:25 11577 1
原创 朴素贝叶斯法(Naive Bayes)
一、全概率公式和贝叶斯公式1、全概率公式 2、贝叶斯公式二、朴素贝叶斯算法1、算法简介 贝叶斯分类算法是统计学的一种分类方法,其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率,然后选择具有最大后验概率的类作为该对象所属的类。之所以称之为”朴素”,是因为贝叶斯分类只做最原始、最简单的假设:所有的特征之间是统计独立的(假设某样本x有a1,…,aM个属性,...
2018-06-28 19:55:51 4364
原创 C/C++常见错误集锦
1、error LNK2005:“已经在*.obj中定义” (1) 变量或者函数的定义放到cpp文件中,不要放到.h中。(2) #ifndef MY_H_FILE //如果没有定义这个宏 #define MY_H_FILE //定义这个宏 ……. //头文件主体内容 ……. #endif (3...
2018-06-28 16:22:51 3435
原创 K近邻法(KNN)
1、KNN算法简介 KNN(K-Nearest Neighbor)算法即K最邻近算法,是实现分类器中比较简单易懂的一种分类算法。K临近之所以简单是因为它比较符合人们直观感受,即人们在观察事物,对事物进行分类的时候,人们最容易想到的就是谁离那一类最近谁就属于哪一类,即俗话常说的“近朱者赤,近墨者黑”,人们自然而然地把这种观察方式延伸到数据分类处理领域。K-NN算法就是基于欧几里得距离推断事物类...
2018-06-24 16:46:24 508
原创 统计学习方法概论
1、统计学习 统计学习是基于数据构建统计模型从而对数据进行预测和分析,统计学习由监督学习(有用于学习的训练数据)、无监督学习、半监督学习和强化学习组成。 统计学习三要素:模型+策略+算法(MSA)。实现统计学习方法的步骤: 1. 得到一个有限的训练数据集合; 2. 确定包含所有可能模型的假设空间,即学习模型的集合; 3. 确定模型选择的准则,即学习的策略; 4. 实...
2018-06-24 16:11:57 365
转载 机器学习中正则化项L1和L2的直观理解
正则化(Regularization)机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1” role=”presentation” style=”position: relative;”>ℓ1ℓ1-norm,中文称作L1正则化和L2正则化,或者L1...
2018-06-24 11:05:59 579
转载 极大似然估计详解
极大似然估计 以前多次接触过极大似然估计,但一直都不太明白到底什么原理,最近在看贝叶斯分类,对极大似然估计有了新的认识,总结如下:贝叶斯决策 首先来看贝叶斯分类,我们都知道经典的贝叶斯公式:...
2018-06-24 11:01:06 1867
原创 优化算法之梯度下降法、牛顿法、拟牛顿法和拉格朗日乘数法
在机器学习中,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解最优化问题。 - 无约束最优化问题:梯度下降法、牛顿法、拟牛顿法; - 有约束最优化问题:拉格朗日乘数法。一、梯度下降法1、算法简介 梯度下降法是最早最简单,也是最为常用的最优化方法。梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是...
2018-06-24 10:58:44 6396
转载 卡特兰数相关问题总结
一、什么是Catalan数说到Catalan数,就不得不提及Catalan序列,Catalan序列是一个整数序列,其通项公式是递推公式是C(n) = C(1)*C(n-1) + C(2)*C(n-2) + … + C(n-1)C(1),n>=2我们从中取出的就叫做第n个Catalan数,前几个Ca...
2018-06-23 10:59:22 813
转载 常用正则表达式
一、校验数字的表达式1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 至少n位的数字:^\d{n,}$4 m-n位的数字:^\d{m,n}$5 零和非零开头的数字:^(0|[1-9][0-9]*)$6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2...
2018-06-23 10:55:30 244
转载 傅里叶变换和小波变换分析
一、前言 我们经常接触到的信号,正弦信号,余弦信号,甚至是复杂的心电图、脑电图、地震波信号都是时域上的信号,我们也成为原始信号,但是通常情况下,我们在原始信号中得到的信息是有限的,所以为了获得更多的信息,我们就需要对原始信号进行数学变换,得到变换域的信号,通常接触到的变换主要有傅里叶变换、拉普拉斯变换、Z变换、小波变换等等,今天主要讨论下...
2018-06-23 10:32:04 31949 8
转载 教你彻底学会动态规划——进阶篇
在我的上一篇文章中已经详细讲解了动态规划的原理和如何使用动态规划解题。本篇文章,我将继续通过例子来让大家更加熟练地使用动态规划算法。 话不多说,来看如下例题,也是在动态规划里面遇到过的最频繁的一个题,本题依然来自于北大POJ: &nbs...
2018-06-22 22:01:43 545
转载 教你彻底学会动态规划——入门篇
动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当自己做题的时候又会觉得无所适从...
2018-06-22 22:00:53 2859 2
转载 浅谈二叉查找树、AVL树、红黑树、B树、B+树的原理及应用
一、二叉查找树1、简介二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质:任意节点左子树不为空,则左子树的值均小于根节点的值.任意节点右子树不为空,则右子树的值均大于于根节点的值.任意节点的左右子树也分别是二叉查找树.没有键值相等的节点.2、局限性及应用一个二叉查找树是由n个节点随机构成,所以,对于某些情况,二叉查找树会退化成一个有n个...
2018-06-22 21:42:19 4548
转载 B树和B+树
一、为什么要有B树? 学习任何一个东西我们都要知道为什么要有它,B树也一样,既然存储数据,我们为什么不用红黑树呢? 这个要从几个方面来说了:(1)计算机有一个局部性原理,就是说,当一个数据被用到时,其附近的数据也通常会马上被使用。 (2)所以当你用红黑树的时候,你一次只能得到一个键值的信息,而用B树,可以得到最多M-1个键值的信息。这样来说B树当然更好了。 (3)另外一方...
2018-06-22 21:40:49 882
转载 红黑树(RB-Tree)
1、定义 红黑树是一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是red或black。红黑树满足以下五个性质: 1. 每个结点或是红色或是黑色; 2. 根结点是黑色; 3. 每个叶结点是黑的; 4. 如果一个结点是红的,则它的两个儿子均是黑色; 5. 每个结点到其子孙结点的所有路径上包含相同数目的黑色结点。 当对红黑树进行插入和删除操作时,可能...
2018-06-22 21:39:04 2248
原创 字典树(Trie)
1、定义 在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。 核心思想是空间换时间,利用字符串...
2018-06-22 21:34:12 331
转载 ACM模板之二
0.头文件#define _CRT_SBCURE_NO_DEPRECATE#include <set>#include <cmath>#include <queue>#include <stack>#include <vector>#inclu...
2018-06-22 21:32:42 224
转载 ACM模板之一
ForeWord六月六开始(话说,开始的日子真是个吉利的日子)到七月廿六,五十天整,终于将ACM在线模版整理完毕,想想还有点小激动呢~话说,我为什么执着于整理这个模板呢?既费时又费力,差不多,五十天都在忙这个。 想来,原因挺多的,毕竟网上模版那么多,如果单单只是其中任何一条存在,我一定不会这样卖力整理。最...
2018-06-22 21:31:45 421
转载 C语言小结-输入型参数和输出型参数
1、函数为什么需要传参和返回值(1) 函数的作用就是处理数据,传入的参数就是被加工的数据,返回值就是输出的结果。 (2)函数名就是这个函数的入口,在内存中表示就是一个函数代码段的首地址,实质是一个指针常量,所以在程序中使用函数名都是当地址来用的,用来调用这个函数。再理解指针函数的实质就比较简单了。 (3) 如果...
2018-06-22 21:30:10 2999
转载 经典算法总结
一、递归1、基本思想 递归算法将一个不好解决的大问题转化为若干小问题,再把这些小问题进一步分解为更小的小问题,直至每个小问题可以直接解决为止。【Note】: (1)递归体:使问题向边界条件转化的过程; (2)边界条件:程序终止的条件,也称为递归出口。2、应用 示例:阶乘、斐波纳契数列、汉诺塔问题。二、分治1、基本思想 待解决复杂的问题能够简化为几个若干个小...
2018-06-21 20:59:24 379
原创 经典算法之动态规划(Dynamic Programming)
1、动态规划的定义 动态规划,dynamic Programming,是一种高效解决问题的方法,使用与具有重复子问题和最优子结构的问题。2、动态规划的思想 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这...
2018-06-21 20:40:45 2829
原创 经典算法之分治(Divide)
1、分治的定义 分治即分而治之。分治算法就是把一个大的问题分为若干个子问题,然后在子问题继续向下分,一直到base cases,通过base cases的解决,一步步向上,最终解决最初的大问题。分治算法是递归的典型应用。 2、分治的思想分治法的设计思想是: 1. 分–将问题分解为规模更小的子问题; 2. 治–将这些规模更小的子问题逐个击破; 3. 合–将已解决的子问题合并...
2018-06-21 20:14:04 1726
原创 经典算法之回溯(BackTracking)
1、回溯的定义 回溯算法的定义:回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。一个典型的应用是走迷宫问题,当我们走一个迷宫时,如果无路可走了,那么我们就可以退一步,再在其他的路上尝试一步,如果还是无路可走,那么就再退一步,尝试新的路,直到走到终点或者退回到原点。2、回溯的思想 回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 1. 定义一个...
2018-06-18 16:59:55 1570
原创 经典算法之贪心(Greedy)
1、贪心的定义 贪心算法是什么意思?举个例子就很清楚了:现在你有一个能装4斤苹果的袋子,苹果有两种,一种3斤一个,一种2斤一个,怎么装才能得到最多苹果?当然我们人考虑的话当然是拿两个2斤的苹果,就刚好装满了,但是如果按贪心算法拿的话,首先就要把最重的苹果拿下(是不是很符合贪心两个字?),但并没有得到最多苹果。 贪心算法在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最...
2018-06-18 16:26:44 8994
原创 经典算法之递归(Recursion)
1、递归的定义 递归:你打开面前这扇门,看到屋里面还有一扇门(这门可能跟前面打开的门一样大小(静),也可能门小了些(动)),你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开,。。。, 若干次之后,你打开面前一扇门,发现只有一间屋子,没有门了。 你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这钥匙开了几扇门。 循环:你打开面前...
2018-06-18 16:06:50 6865
原创 双指针法及其应用
一、双指针法简介 所谓双指针,指的是在遍历对象的过程中,不是普通的使用单个指针(索引、游标、指针或可迭代对象皆可)进行访问,而是使用两个相同方向或者相反方向的指针进行扫描,从而达到相应的目的。 换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。二、双指针法的应用(1)和为sum的两个数#include <iostream>#incl...
2018-06-17 20:07:45 976
转载 cin与scanf cout与printf效率问题
在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中很不...
2018-06-17 17:02:15 566
转载 字符串算法之Manacher(最长回文子串)
一、背景 在介绍算法之前,首先介绍一下什么是回文串,所谓回文串,简单来说就是正着读和反着读都是一样的字符串,比如abba,noon等等,一个字符串的最长回文子串即为这个字符串的子串中,是回文串的最长的那个。 计算字符串的最长回文字串最简单的算法就是枚举该字符串的每一个子串,并且判断这个子串是否为回文串,这个算法的时间复杂度为O(n^3)的,显然无法令人满意,稍微优化的一个算法是枚举回文...
2018-06-17 16:50:16 1029
转载 字符串算法之KMP(字符串匹配)
一、背景 给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题。 Knuth-Morris-Pratt 算法(简称 KMP)是解决这一问题的常用算法之一,这个算法是由高德纳(Donald Ervin Knuth)和沃恩·普拉特在1974年构思,同年詹姆斯·H·莫里斯也独立地设计出该算法,最终三人于1977年联合发表。 在继...
2018-06-17 16:15:34 23605 9
原创 STL详解及常见面试题
1、各种容器的特点和适用情况2、各种容器的底层机制(1)vector vector就是一个动态数组,里面有一个指针指向一片连续的内存空间,当空间不够装下数据时,会自动申请另一片更大的空间(一般是增加当前容量的50%或100%),然后把原来的数据拷贝过去,接着释放原来的那片空间;当释放或者删除里面的数据时,其存储空间不释放,仅仅是清空了里面的数据。(2)list 以结点为...
2018-06-17 10:41:05 30430 8
原创 查找算法之哈希查找
哈希也称散列,哈希表是一种与数组、链表等不同的数据结构,与他们需要不断的遍历比较来查找的办法,哈希表设计了一个映射关系f(key)= address,根据key来计算存储地址address,这样可以1次查找,f既是存储数据过程中用来指引数据存储到什么位置的函数,也是将来查找这个位置的算法,叫做哈希算法。1、相关名词 1. 桶:哈希表中存储数据的位置,每一个位置对应唯一的一个地址,桶就好...
2018-06-11 21:04:22 7541 1
原创 查找算法之二分查找
如果要查找的数据已经事先排序好了,则可以使用二分查找法来进行查找。1、算法描述 二分查找法是将数据分割成两等份,再比较键值与中间值的大小,如果键值小于中间值,可确定要查找的数据在前半段,如果键值大于中间值,可确定要查找的数据在后半段。2、算法图解3、算法demo#include <bits/stdc++.h>using namespace std;...
2018-06-11 20:13:29 277
转载 排序算法总结
1、算法分类 常见排序算法可以分为两大类: 1. 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 2. 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。 2、算法复杂度3、相关概念稳定:如果a原本在...
2018-06-11 19:59:01 237
原创 排序算法之桶排序和基数排序
一、桶排序 桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。 假设你有五百万份试卷,每份试卷的满分都是100分,如果要你对这些试卷按照分数进行排序,天噜啦,五百万份试...
2018-06-11 19:43:25 2182
原创 排序算法之堆排序
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。1、算法描述 快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下: 1. i =L; j = R; 将基准数挖出形成第一个坑a[i]; 2. j–由后向前找比它小的数,找到...
2018-06-11 09:30:42 238
原创 排序算法之快速排序
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。1、算法描述 快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下: 1. i =L; j = R; 将基准数挖出形成第一个坑a[i]; 2. j–由后向前找比它小的数,找到...
2018-06-11 09:30:09 317
原创 排序算法之归并排序和外部排序
一、归并排序 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,即分而治之)。1、算法描述 1. 把长度为n的输入序列分成两个长度为n/2的子序列; 2. 对这两个子序列分别采...
2018-06-11 09:29:12 6026 1
visio2007教程
2018-07-30
凸优化经典书籍(Stephen Boyd和Lieven Vandenberghe)
2018-07-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人