- 博客(29)
- 资源 (1)
- 收藏
- 关注
原创 用栈轻松解决基本计算器
实现计算器是很经典的题目,包括之前在数据结构课上也遇到过。 这次又在leetcode上刷到了基础计算器的一系列题,做个总结。 首先先看看最简单的一种情况:字符串中只有加减号,还有非负整数 举个栗子,“1+14-5” 定义三个变量,分别为num(保存当前的操作数),op(保存数字前的运算符号),用res记录累加结果。 具体操作步骤如下: 遍历字符串的每个元素。 如果指针指向数字,则更新num值。...
2020-03-15 09:27:32
390
原创 为什么l1, l2正则能降低过拟合?(贝叶斯先验概率角度)
在开始正题之前,我们先来谈谈什么是正则化和过拟合(已经有了解的同学可以直接跳到第三节) 1. l1, l2正则化 简单来说,l1-范数, l2-范数正则化就是在原有的Loss Function的基础上,加上一些正则化项(也可以叫惩罚项?) 回归问题原有的Loss Function: 加了l1正则后(也被称为lasso回归): 加了l2正则后(也被称为岭回归): 其中,w的p-范数为: 2. 过拟合 从左到右分别是 欠拟合,正常拟合,过拟合(图片来自吴恩达机器学习课程) 所谓过拟合,指在机器学习模型
2020-07-28 22:21:07
810
原创 我是怎么用编程思想来数数的?
作为一名理工科院校的学生,我对我校的男女比例是有充分自信的。 但今早官微的一篇推送把我吓到了…内容大致是建校71周年,有30多位同学分别代表所在的省份给学校送上祝福,附照片的那种。 于是我就发现了: 怎么有那么多小姐姐!这严重不符合我校基本校情啊! 而更奇妙的是,在看小姐姐计算男女比的过程中,我发现原来算法的思想也能用来数数~ 你可能会疑惑了,计算男女比不就是先数有多少个女生,再数一共有多少人就可...
2020-04-15 16:46:17
340
原创 一文带你了解二叉搜索树(面试向)
二叉搜索树作为一种特殊二叉树结构,在面试中出现的频次不可谓不高。 本文通过对leetcode上的8道二叉搜索树题进行整理,让你对二叉搜索树的掌握更进一步~ 首先,什么是二叉搜索树? 从严谨的数学定义上说,二叉搜索树是这样的: 二叉搜索树要么是空树,要么是具有下列性质的二叉树: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 ...
2020-04-14 17:02:31
479
原创 剑指offer复习系列:树题目一网打尽!(一)
首先上几道甜品,给大家伙开开胃: 1.BFS(广度优先搜索) 这道题的思路很简单: 初始化队列 queue=[root], 列表res=[] while 队列非空: 移除队列中第一个结点,并将其值加入到res中 将其左右子结点(如有)加入到队列中 返回res 这里主要有两个疑惑: 为什么要移除第一个结点? A:第一,因为这是我们正在操作的结点;第二,这里的“移除第一个”和“子结点加入队列尾...
2020-04-09 16:34:09
216
原创 剑指offer面试题22、23、25:关于链表的一些题目
链表和树是比较重要的数据结构(也是我掌握得很差的) 在剑指offer上刷了几道题,在这里做个总结: . 链表中倒数第k个节点 这是leetcode上的一道简单题。 第一时间的想法: 用一个while循环,计算出链表长度n 再用一个while循环,对头节点进行n-k次next操作,即可求解 但是看过题解之后,发现了一种更简洁的方法,该方法可以不用计算出链表长度,求解如下: 定义两个结点for...
2020-03-20 21:58:54
207
原创 pandas:重命名index、columns,分箱
上文说到了怎么对DataFrame中的值进行转换,那么如果想对索引进行转换,应该怎么做呢? 重命名轴索引 第一种方法:暴力地重定义 直接对index,columns属性进行重赋值即可: import numpy as np import pandas as pd a = pd.DataFrame(np.arange(12).reshape((3, 4)), in...
2020-03-19 10:21:38
3511
原创 pandas数据清洗:删除重复值、利用映射进行逐元素转换、值的替代
之前那篇博客讲了讲怎么处理缺失值,这一篇记录一下怎么对数据进行过滤和清洗。 删除重复值 删除重复行一般有三种方法: duplicated方法:返回一个布尔值Series。如果该行是重复行(与之前出现的行相同),则在Series中对应的值为True,反之为False drop_duplicates方法:返回duplicated方法中返回数组中为False的部分(即打印原对象中去掉重复行后的部分)。...
2020-03-18 10:44:47
541
原创 剑指offer:面试题NO.3-NO.6
听说剑指offer很有名,凑巧leetcode上又有可以白嫖的,就顺便刷一刷。 不过leetcode上的剑指offer都是简单题,不知道原书上面是不是都是这个难度?还是等到真正找工作的时候再去买一本叭。 废话不多说,下面对第三到第六题做个总结: 第三题:数组中重复的数字 这道题目讲真并不难,可能刚学编程一两天的人都会有思路。 这里大概有两种思路: 1、 用字典(哈希),遍历每个元素,如果没有出现...
2020-03-15 18:57:55
229
原创 pandas初探:DataFrame生成,索引与修改
DataFrame在形式上可以看作是Series的升级版,它可以有多个列,并且每一列都有列标签。 呐,DataFrame是长这个样子的: 构建DataFrame 一般有两种方式构建DataFrame 1.利用包含等长度列表或者数组 import pandas as pd data = {'state': ['Beijing', 'Beijing', 'Beijing', 'Shanghai', ...
2020-03-13 10:57:48
1431
原创 动态规划解决问题:编辑距离与解码方法
动态规划是解决很多算法的不二法宝。 它的思想可以概括为:根据上一个状态的值,来判断现在状态的值。 因此,在这类题目中,重点是在找出上一个状态和现在状态的联系。 具体的理论就不扯了,还是直接上题目叭 编辑距离 这道题目是leetcode上的一道困难题。 乍一看题目可能会感觉无从下手,因为word1和word2从直观上来看很难看出联系。 那么,我们尝试利用动态规划,找出状态之间的联系 我们令D[i]...
2020-03-12 21:59:55
1595
原创 pandas初探:Series生成与索引
Series Series是一种一维的数组型对象,它包括一个值序列,和它们的索引。 直观的来说,它更像一个字典。因为它的形式为索引:值 生成Series一般有两种方法,通过列表和通过字典 1.列表生成Series import pandas as pd from pandas import Series, DataFrame obj = pd.Series([1, 2, 4]) print(ob...
2020-03-12 12:04:21
1191
原创 python矩阵操作:dot、inv、det、eig
矩阵点乘 在numpy中,*号用来对矩阵进行逐元素乘积。 我们熟悉的矩阵点乘,用dot函数。 举个栗子: import numpy as np x = np.array([[1, 2], [2, 3]]) # 2*2矩阵 y = np.array([[4, 5], [6, 7]]) # 2*2矩阵 print(x * y) ...
2020-03-11 10:34:07
15154
2
原创 numpy: where函数、集合操作
where函数 where函数是三元表达式 x if condition else y的向量版本。 通过where函数,可以批量地或者单个地对数组中元素进行替换 举个栗子,有两个数值数组x, y。另外有一个布尔型数组cond。 我们想要建立一个新数组,当cond中元素为True时,取x中的对应元素的值,反之取y中对应的元素。 我们可以这样做: import numpy as np x = np.a...
2020-03-10 10:24:24
502
原创 numpy: meshgrid方法
meshgrid方法用于对两个一维数组生成一个数值对(x, y) 例如,对于数组[1, 2]和[3, 4],可以生成4个数值对,分别为: [1, 3], [2, 3], [1, 4], [2, 4] meshgrid方法返回两个二维矩阵,分别存储所有键值对中的x值和y值: import numpy as np a = [1, 2] b = [3, 4] c, d = np.meshgrid(a, ...
2020-03-10 09:44:29
409
原创 numpy之神奇索引
神奇索引是numpy中的术语,可以用来使用整数数组进行数据索引 它可以让你找到数组中任意位置的元素,并把它们按一定顺序输出 比如说,输出一个二维数组的第4,3,0,6行,并依次排列: import numpy as np x = np.arange(36).reshape(9, 4) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11] # [12...
2020-03-09 11:24:34
1064
原创 Sunday算法:查找字符串
Sunday算法是用于查找子串的一种算法,具体的应用场景看这里 相比于KMP,BM算法,Sunday算法更快,并且更好理解(自认为哈 下面用比较正式的语言介绍一下该算法: 原字符串为文本串,匹配的子串为模式串。 从前往后匹配,在匹配失败时,关注的是文本串中参加匹配的最末位字符的下一位字符。 —如果该字符没有在模式串中出现则直接跳过,即移动位数 = 匹配串长度 + 1; —否则,其移动位数 = 模...
2020-03-05 19:01:30
350
原创 numpy:生成ndarray,数据类型,数组算术,切片
生成ndarray 生成ndarray数组通常采用有三种方法: 使用array函数 使用zeros, ones来生成全0、全1数组 使用arange函数 接下来分别介绍: 1. array函数 array函数接受任意的序列型对象,生成一个新的包含传递数据的numpy数组。 另外,嵌套序列会自动转换成多维数组。 shape属性表征数组每一维度的数量 dtype属性描述数组的数据类型 import...
2020-03-05 10:48:59
608
原创 python序列函数:enumerate,zip,reversed
enumerate:追踪索引 在遍历一个序列的时候,我们往往想追踪该元素在序列中的索引。使用enumerate可以做到这点。 该方法一般用来构建一个字典 a = ['a', 'b', 'c', 'd', 'e', 'a', 'b'] mapping = {} for index, value in enumerate(a): mapping[value] = index print(map...
2020-03-03 12:28:36
616
原创 python学习笔记:列表操作
与元组不同,列表的长度是可变的,它包含的内容也是可以修改的。 定义列表 定义列表一般有两种方式: 使用中括号 a = [1, 2, 3] print(a) # [1, 2, 3] 使用list类型函数 list函数可以将元组,字符串等类型转换为list。 a = (1, 2, 3) b = "123" print(list(a), list(b)) # [1, 2, 3] ['1'...
2020-03-03 10:52:54
200
原创 python学习笔记:元组,乘拷贝,高级拆包
元组 元组是一种固定长度、不可变的python对象序列。 创建元组最简单的办法就是用逗号分隔序列值 a = 1, 2, 3, 5 print(a) # (1, 2, 3, 5) 元组一旦创建,各个位置上的对象是无法被修改的 但是,如果元组中的一个对象是可变的,则可以修改这个可变变量 tup = tuple(['foo', [1, 2], True]) # 显式转换类...
2020-03-01 10:56:22
260
原创 python学习笔记:强类型,判断类型
强类型 观察下列代码: print('5' + 5) 猜猜看,会输出什么? 事实上它会报错,这是为什么呢? TypeError: unsupported operand type(s) for +: 'int' and 'str' 在某些语言,例如VB中,字符串‘5’可能会隐式地转换为整数,然后得到10.而在另一些语言中,例如JS,数字5可能会转换成字符串,生成一个结合字符串‘55’。在这里...
2020-03-01 09:48:43
382
原创 python学习笔记:浅/深拷贝,切片,函数传参
前文讲了一点python的对象机制,其实是为了本文服务的。 浅/深拷贝 为变量赋值(其实是为对象建立引用)一般有三种方式:直接赋值,浅拷贝和深拷贝 直接赋值就是常见的"a=b"之类,将a作为b指向的对象的一个新的引用。 下面主要介绍浅拷贝和深拷贝以及两者之间的区别: 浅拷贝 在浅拷贝时,拷贝出来的新对象的地址和原对象是不一样的。 但是新对象里面的可变元素(如列表)的地址和原对象里的可变元素的地址是...
2020-02-29 23:42:18
425
原创 python学习笔记:对象,可/不可变对象, +=和=+
对象 先来看一个例子,解释一下python的对象机制 a = 1 print(id(a)) a = 2 print(id(a)) 不了解对象的同学可能会觉得,“a=1"的意思是将1赋值给变量a 但是不然,该语句的意思其实是:将变量a指向一个对象,该对象的值为1。 也就是说,a只是充当对象的一个引用。 再看语句"a=2”,同样地,该语句的意思是:将变量a指向另一个对象,该对象的值为2。并不是把2赋...
2020-02-29 11:59:36
323
原创 FP-growth:从FP树中挖掘频繁项集
https://editor.youkuaiyun.com/md/?articleId=104320588
2020-02-18 11:39:29
4039
原创 关于PCA的笔记(为什么要用协方差和特征向量?)
好不容易把PCA稍稍弄懂了,记一点笔记以防日后遗忘~ 主要记录对矩阵乘法到底是什么,还有PCA中为什么要用方差为什么要用协方差还有为什么要用特征向量的理解。 因为是写给自己看的所以难免有疏漏和错误,另外参考资料1是我见过最好的PCA文章~ 什么是降维 想象这样一个场景:有一台电视在播放足球比赛,显示器包含了100万个像素,而球只占1000个像素。在一场比赛中,观众当然会更关注比赛的情况——也就是球...
2020-02-17 22:59:47
1697
2
原创 FP-growth:FP树的构建
前言 FP-growth是一个非常好的频繁项集发现算法,广泛应用于搜索引擎中(找出经常在一起出现的词对)相对于Apriori算法,FP-growth算法只用对数据库进行两次扫描,因此更适用于处理大数据。 关于FP-growth的理解,请参照这个网址:https://www.cnblogs.com/pinard/p/6307064.html 我自认是没有这个能力写的这么好的哈哈。本文以代码为主。 F...
2020-02-15 17:55:13
10793
原创 数据预处理:处理缺失值
前言 本文参照《利用Python进行数据分析》一书,介绍了对Series和DataFrame对象进行缺失值处理的一些方法 缺失值处理 1. isnull方法 isnull方法用于判断哪些值为缺失值(NaN),并返回布尔值 举例如下: import pandas as pd from numpy import nan as NA data = pd.DataFrame([[1., 6.5, 3.],...
2020-02-13 18:48:39
1129
原创 决策树的理解及实现(小白版附代码)
前言 本文的代码部分均采用伪代码+代码的形式,帮助有些想挑战自己的小白同学可以自己通过伪代码敲出代码! 简介 决策树(Decision Tree)是一种十分常用的分类方法。作为一种有监督学习,它对特征属性和样本标签之间的映射关系进行建模。相对于K-近邻算法,决策树的主要优势在于数据形式非常容易理解。而决策树之所以称为树,是因为其处理数据的过程可以用树来表示。理论总是那么难以理解,那我们直接上例子吧...
2020-02-07 21:05:57
1474
1
Alien_Invasion.7z
2020-02-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅