自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

转载 剑指Offer[38]:字符串的排列

题目输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc, acb, bac, bca, cab和cba。题目来源于牛客网,对剑指Offer书中字符串排列问题做了小小修改,也就是需要按字典序打印出所有的排列。也就是说两个字符排列需要根据从左到右逐个比较对应的字符的先后来确定先后顺序。...

2020-02-20 18:05:23 280

转载 LeetCode-最长回文子串

题目链接:最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。解法一:暴力解法暴力解法就是判断原字符串的每一个substring是不是回文串,返回最长的回文子串。暴力解法的时间复杂度为O(n3)O(n^3)O(n3)。解法二:最长公共子串回文串的定义——正着和反着读一样。那么把原来的字符串 s 反过来得到 reverse_s,找到它们的最长公共子串是不是就是满足条件的回文子串...

2020-01-08 23:10:41 257

原创 Python简单搞定ndarray和DataFrame翻转

ndarray矩阵反转a = np.arange(1, 10).reshape(3, 3)b = a[::-1]print(b)会打印以下结果:[[7 8 9] [4 5 6] [1 2 3]]DataFrame数据反转df = pd.DataFrame({'height':[178,162,181],'weight':[58,49,63],'gender':['male',...

2020-01-05 16:39:22 1654

原创 [机器学习] 奇异谱分析(SSA)原理及Python实现

最近做时间序列分析的时候需要用到奇异谱分析,发现网上可以查到的资料很有限,看paper的时候发现大部分也说得有些简略,所以这里看完之后总结一下。  奇异谱分析(Singular Spectrum Analysis, SSA)是一种处理非线性时间序列数据的方法,通过对所要研究的时间序列的轨迹矩阵进行分解、重构等操作,提取出时间序列中的不同成分序列(长期趋势,季节趋势,噪声等),从而进行对时间序列进...

2019-11-22 22:06:20 34713 57

原创 [机器学习] Adaboost原理及实现

原理实现

2019-11-02 15:59:14 810

原创 python多进程并行的简单实现

  这两天在跑一个文件处理程序的时候想着利用多核并行处理实现节省时间,然后例程里用了threading.Thread来实现,结果依旧很慢,查看了一下cpu使用情况根本就是在单核上跑啊。查了一下才发现python中多线程存在PIL锁,什么意思呢,就是说这个锁使得同时只能有一个线程执行。。。。。这样的结果就是即使利用了多线程,多个线程仍旧是在单核上执行的,执行某一个线程的时候,余下的所有线程都吃瓜。...

2019-10-30 12:17:35 2385 2

原创 剑指Offer[31]:栈的压入、弹出序列

题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。LeetCode中也有相同的题目:验证栈序列解决思路  直观的想法就是构建一个栈,将第一个序列按顺序压入栈中,压入同时判断能否按照第二个序列的顺序弹出。整理一下这个思路,步骤如下:依次将第一个序列的元素压入栈中;判断这个元素是不是第二个序列中的将要pop的值;如...

2019-10-28 11:30:41 153

原创 [机器学习] EM算法

  在前面的朴素贝叶斯分类器推导中,我们是基于训练样本所有属性值都是已知的这个假设,但是实际应用中往往存在训练样本的某些属性值未知,此时就需要用到EM算法来进行参数估计。EM算法的全称为最大期望算法(Expectation-Maximization algorithm),它是基于最大似然估计理论的一种优化算法,通常用来对存在隐变量的概率模型进行参数估计。最大似然估计  假设我们在校园里随机找了...

2019-10-27 15:17:18 526 2

原创 [机器学习] 朴素贝叶斯分类器

基础知识  朴素贝叶斯分类器是基于贝叶斯决策理论的分类模型,首先来了解一下贝叶斯决策理论和概率论的相关知识。贝叶斯决策理论  概率决策是贝叶斯决策理论的核心思想。在执行分类任务的时候我们无法保证分类的结果总是正确的,贝叶斯决策理论的目的就是基于已有的相关概率来做出使得误判损失最低的决策。  对于一个多分类任务,假定样本总共有 mmm 类:c1,c2,...,cm{c_1, c_2,...,...

2019-10-20 16:08:44 484

原创 [机器学习] 决策树

决策树的基本概念  决策树是一类常用的机器学习方法,决策树实现决策的过程和我们平时做决定的过程很相似。想想如果自己马上要放假,要不要出去浪就是个大问题,首先考虑老板交代的接近deadline的项目有没有完成,如果完成了就可以放心大胆的浪了,否则就乖乖磕研吧;任务完成了,但是转念一想,最近剁手太多没钱,算了还是宅着省钱吧;突然发现发工资了,有钱浪了,赶紧看看天气预报,如果假期天气不错果断室外放飞自...

2019-10-12 13:14:28 525

原创 [机器学习]K-近邻算法

算法概述  自我感觉K-近邻(k-NearestNeighbor)算法是最简单最易理解的分类算法了。怎么个简单法呢?简单到没有一个训练分类器的过程,仅仅根据需要分类的样本到已知类别的样本之间的距离来进行分类。  简单来讲,如果存在一个训练样本集,并且训练集中每个样本对应的类别也已知;那么对于未知类别的新样本,我们计算它到每个训练样本的距离,然后选择距离最近的k个样本,这k个样本中计数最多的一类...

2019-10-09 15:11:09 259

原创 二叉查找树的基本实现

定义数组和链表数组和链表是两种使用频率非常高的数据结构,但两者的结构也决定了他们的应用场景。数组的元素在内存中的地址是连续的,而构成链表的结点在内存中的地址不连续,数组的元素可以通过索引进行随机访问,链表则需要遍历访问,因此数组的查询速度比链表快;另一方面链表的长度可变,插入和删除元素的效率非常高,因此在增删操作较多的情况下链表性能比数组好。二叉查找树二叉查找树(Binary Se...

2019-09-26 16:53:33 561

原创 剑指Offer[24]:反转链表

题目  定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。我们将链表的节点定义如下:class ListNode{ private int val; // 节点值 private ListNode next; // 下一个节点}  LeetCode中也有相应的题目解法迭代解法  迭代的方法很好理解:为了反转链表我们从前向后遍历链表,改变...

2019-09-18 22:18:22 239

原创 剑指Offer[16]:数值的整数次方

题目   实现函数 double Power(double base, int exponent), 求base的exponent次方,不使用库函数,同时不需要考虑大数问题。分析  书中作者已经分析的很清楚了,主要有两个方面去考虑:指数(exponent)为0和负数的情况;求解的效率问题。  第一个方面是容易被忽略的,还有需要考虑底数为0时指数小于等于0是没有意义的;第二个方面就是...

2019-09-18 22:16:27 186

原创 二分查找的递归和迭代实现

基本思想  在一个数组中查找某个特定元素的时候,直观的方法就是从头开始向后进行遍历。但是,如果数组一开始就是有序的,那么我们就可以有更快的查找方式——二分查找。二分查找是二分法思想的一个典型应用,具体来说,对于一个有序数组,我们如果要查找一个元素,那么首先用数组的中间元素将数组切分为两部分,若带查找元素大于中间元素则在前一部分找,小于则在后一部分找……以此不断地切分数组搜索待查找元素。  二分...

2019-09-16 21:22:57 679

原创 模糊c均值聚类及python实现

原理简介  模糊c均值聚类(Fuzzy C-Means)是引入了模糊理论的一种聚类算法,通过隶属度来表示样本属于某一类的概率,原因在于在很多情况下多个类别之间的界限并不是绝对的明确。显然,相比于k-means的硬聚类,模糊c均值聚类得到的聚类结果更灵活。  模糊c均值聚类通过最小化一下目标函数来得到聚类中心:(1)Jm=∑i=1N∑j=1Cuijm∥xi−cj∥2,1≤m<∞J...

2019-09-15 21:38:14 6251 1

原创 十大排序算法总结(附java实现)

定义  排序 是计算机内部经常进行的一项操作,目的是将一组无序的序列调整为一组有序的序列。Excel中将数据按照名称进行升序降序排列就是一种常见的排序操作。相关概念时间复杂度:反映操作次数(计算量)随数据长度的变化规律,是数据规模的函数,用O(⋅)O(·)O(⋅)表示。空间复杂度:用来度量执行算法所需的存储空间随数据规模的变化情况,也用O(⋅)O(·)O(⋅)表示。稳定性:对于两个相等...

2019-09-12 21:05:38 165

原创 排序算法(8):计数排序/桶排序/基数排序

  计数排序、桶排序和基数排序是三个线性时间非比较类排序算法,他们相同的特点在于不是通过比较元素的大小来确定他们的排列顺序,并且均能够达到线性时间复杂度O(n+k)O(n+k)O(n+k),之所以这样根本在于他们都使用了额外的桶(bucket, 不是某种特定数据结构,只是一种叫法)来辅助存储数据。但是这三种排序算法的应用场景都比较有限,下面具体来讲一下这三种排序算法。计数排序基本思想  以一...

2019-09-12 21:02:11 335

原创 排序算法(7):堆排序

基本思想  堆排序是基于堆这种数据结构的一种排序方法。首先将待排序的数组(或序列)构造成完全二叉树,然后利用完全二叉树中父节点和孩子节点之间的关系,每次从当前二叉树中找出最大节点并将其移出未排序部分,达到排序的目的。首先介绍一下一些相关概念:完全二叉树:对于一棵深度为 hhh 的二叉树,如果除了最后一层外,其他每层的节点数都达到最大,且第 hhh 层的节点都连续集中在最左边,那么这就是一棵...

2019-09-12 20:58:51 623

原创 排序算法(6):快速排序

基本思想  快速排序也是一种基于分治的排序算法,它的主要思想是将一个数组切分成两部分,将这两部分独立的进行排序。和归并排序不同的是:归并排序首先对两部分子数组进行排序,在子数组各自有序之后将他们合并为一个完整的有序数组;而快速排序在两个子数组均有序的时候整个数组也已经有序了。  快速排序的关键在于对数组的切分,这个过程通过一个切分元素(或者叫基准)来实现的,切分将数组划分为两部分,满足前一部分...

2019-09-12 20:57:15 588

原创 排序算法(5):归并排序

基本思想  用一句话描述归并排序就是:将两个有序的数组归并(Merge)为一个有序数组。归并排序是分治思想的一种典型应用。归并排序可以通过自顶向下的方式实现,也可以通过自底向上的方式实现。自顶向下自顶向下的归并排序首先将数组分成两个子数组,分别递归调用这两部分进行单独排序,最后合并子数组。下面的动图演示就是自顶向下的归并排序。自底向上和自顶向下的归并排序化整为零的思路不同,自底向...

2019-09-12 20:54:40 269

原创 排序算法(4):希尔排序

基本思想h有序数组一个数组中任意间隔为 hhh 的元素都是有序的,那这个数组就是h有序数组。如下图所示这个数组就是一个 hhh 有序数组,其中 h=4h=4h=4。可以看到,虽然整个数组是乱序的,但任意相隔 h=4h=4h=4 的元素都是有序的。希尔排序希尔排序的思想就是,首先让数组 hhh 有序,然后不断减小 hhh 的值。试想一下,当 h=1h=1h=1 的时候,数组 hh...

2019-09-12 20:52:41 416

原创 排序算法(3):插入排序

基本思想  在玩扑克牌的时候,每当抽到一张牌的时候,就将其插入到手中已经有序的拍中,插入排序和这种整理扑克牌的思路很像。每遍历到一个新的元素就将其插入到它之前的所有元素中的合适位置,保证其之前的序列有序。算法流程第一趟排序:将第二个元素插入到前一个元素的合适位置;第二趟排序:将第三个元素插入到前两个元素中的正确位置;第三趟排序:将第四个元素插入到前三个元素中的正确位置;……第 nn...

2019-09-12 20:49:22 208

原创 排序算法(2):冒泡排序

基本思想  冒泡排序是基于比较和交换的排序算法。它重复地比较两两元素,如果他们顺序错误就进行交换,直到没有交换发生表明数组已经有序。  之所以称为冒泡排序是因为在比较排序过程中,较小的元素会慢慢的前移,类似于碳酸饮料中二氧化碳的气泡上浮过程。算法流程比较相邻元素,如果第一个元素比第二个元素大则交换它们的位置;从开始第一对到最后一对的每一对相邻元素做步骤1同样的工作,这一步之后最后一个元...

2019-08-21 20:04:32 439

原创 排序算法(1):简单选择排序

基本思想  简单选择排序是一种简单并且非常直观的排序算法。它的思想是每次从未排序序列中找到最小值,然后将其放到已排序序列的末尾,重复这一过程直到不存在未排序元素。算法流程以长度为 nnn 的数组为例:第一趟排序:从第一个元素开始遍历整个数组,找出最小值,和第一个元素交换;第二趟排序:找出第二个元素到第 nnn 个元素中的最小值,和第二个元素交换;第三趟排序:找出第三个元素到...

2019-08-21 11:30:02 2088 1

原创 [深度学习-2.5] 梯度检验

实现神经网络的时候,如果不能确定反向传播计算梯度的时候有没有错误,这时候就可以进行梯度检验。简单来说梯度检验的目的就是检查程序反向传播部分有没有Bug。  首先来看导数的数学定义:(1)f′θ)=lim⁡ε→0f(θ+ε)−f(θ−ε)2εf^{\prime} \theta )=\lim_{\varepsilon \to 0}\frac{f(\theta+\varepsilon)-f(\th...

2019-07-23 11:12:00 336

原创 [深度学习-2.4] Dropout正则化

除了L2正则化之外,还有一个很常用的正则化技巧就是Dropout(随机失活)。它的主要思想就是随机丢弃网络每一层的一些神经元。原理和实现  首先从原理上来理解一下什么是Dropout正则化。如下图所示(图片来源于吴恩达老师深度学习课程课件),左图为一个正常的网络,进行Dropout正则化就是对于每一层的单元,根据一定的概率来“删除”掉他们,如下面右图所示,以0.5的保留概率(keep-prob...

2019-07-09 20:49:12 552

原创 [深度学习-2.3] 正则化减少过拟合

在开发一个分类器的时候如果出现了过拟合问题(高方差),其中一个有效的方法是增加更多的训练数据,但很多情况下无法获取到更多的数据,这时候就应该考虑另一个很有效的方法——正则化。正则化的原理  以Logistic回归分类器为例。使用单神经元和Logistic回归构建的分类器,损失函数(即需要优化的目标函数)为(1)min⁡J(w,b)=1m∑i=1mL(y(i),y^(i))\min J(w, b...

2019-06-09 15:59:45 583

原创 [深度学习-2.2] 方差和偏差的理解

高偏差对应欠拟合的情况,(模型对训练集都不能很好的拟合)高方差对应过拟合的情况(训练集误差很小,验证集误差较大)训练集误差较大,验证集误差更大,这时候是高方差和高偏差...

2019-05-22 20:26:57 1000

原创 [深度学习-2.1] 训练集、验证集和测试集

为什么要设置训练集、验证集和测试集  在训练一个神经网路的时候,通常我们最初并不知道怎么样的超参数配置才能让我得到一个高性能的网络,这些超参数包括神经网络的层数,每一层的神经元数量,每层的激活函数选择以及学习率等。所以一般的做法都是先构建一个具有特定结构的神经网络,然后编程实现,接下来根据程序的输出结果来更新自己方案以找到更好的神经网络。  也就是重复下面这样一个过程  因此更高效的循环能...

2019-05-17 15:41:51 1878

原创 [深度学习-1.4] 构建深层神经网络并实现MNIST手写数字识别

许多情况下浅层的神经网络(包括之前的逻辑回归和单隐层神经网络)效果可能并不理想,这就是为什么要用深层神经网络的原因,我个人觉得深层网络之所以表现好的原因可能随着隐藏层的增多,样本不同"Level"的特征能够被充分发掘和利用?  本文开始构建一个深层神经网络模型并实现MINIST手写数字的识别。MINIST数据集  MISIST数据集是一个手写数字图片数据集,可以在 http://yann.l...

2019-05-14 15:29:51 715

原创 [深度学习-1.3] 建立一个单隐层的神经网络

前面总结了利用单神经元和Logistic回归解决简单的二分类问题,接下来就是建立一个简单的BP神经网络模型了,也就是简单的输入层-隐藏层-输出层网络模型,相比起之前的模型仅仅多了一个隐藏层。  先给出直观的网络示意图(注:图来源于吴恩达老师深度学习课程JupterNotebok):模型解释  输入层 x⃗=[x1,x2,...,xn]T\vec{x}=[x_1, x_2,...,x_n]^T...

2019-05-01 19:43:10 1574

原创 [深度学习-1.2] 神经网络中常用的激活函数

激活函数的作用  对于一个神经网络中的神经元(节点),需要根据输入计算这个神经元的输出(节点激活值)。以下图表示的这个神经元为例,计算它的输出包括两步对输入值的线性加权,z=∑i=13wixi+bz=\sum_{i=1}^{3} w_{i} x_{i}+bz=∑i=13​wi​xi​+b;对加权和 zzz 进行非线性变换,y=f(z)y=f(z)y=f(z)这里 fff 是激活函数,一...

2019-04-14 16:13:48 1270

原创 [深度学习-1.1] 单神经元和Logistic回归解决二分类问题

开始短短续续看吴恩达老师的深度学习课程一段时间了,学习完了第一部分,不管是看视频还是做课后练习都让我有疯狂吹一下这个课程的冲动,是真的讲的很好啊!!看完也想着自己慢慢总结一下加深理解,嗯,希望我不是下一个从入门到放弃的案例单神经元(感知机)感知机听着高大上一点,但是单神经元还是通俗易懂,就是字面意思一个神经元,这个概念来源于生物学,当一个神经元受到刺激信号(输入),自身的电位就会发生变化,如...

2019-04-11 21:16:11 960 2

原创 快速排序算法——python实现

快速排序的思想首先在数组中任意选取一个数(通常选第一个数)作为标志数据,通过比较将有比它小的数全放到它前面,比它大的数全放到它后面,这样完成一趟排序。一趟排序的流程为:1. 初始时i=0, j=N-1。其中N为数组长度;2. 选择标志数据key,通常设置key = Array[0];3. 从数组尾部向前遍历(j --),找到第一个比key小的数A[j],交换A[i]和A[j]的位置;...

2019-03-21 12:23:30 317

原创 回环变位(Circular Rotation)

回环变位:如果字符串s中的字符循环移动任意位置之后能够得到另一个字符串 t,那么 s 称为 t 的回环变位(Circular Rotation)。例如,”ACTGACG” 就是 “TGACGAC” 的一个回环变位。一般的实现思想 利用循环的方式遍历字符串t,从循环次数i处将字符串t分成两个字串后交换顺序拼接成一个新的字符串,比较新的s和新的字符串是否相等。public static boole

2018-05-10 22:38:53 848

空空如也

空空如也

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

TA关注的人

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