- 博客(49)
- 资源 (2)
- 收藏
- 关注
转载 线性回归、lasso回归和岭回归(ridge regression)
线性回归很简单,用线性函数拟合数据,用均方差mean square error (mse) 计算损失(cost),然后用梯度下降法找到一组使 mse 最小的权重。lasso 回归和岭回归(ridge regression)其实就是在标准线性回归的基础上分别加入 L1 和 L2 正则化(regularization)。线性回归——最小二乘Lasso回归和岭回归Lasso回归和岭回归的同和异相同: 都可以用来解决标准线性回归的过拟合问题。 不同: lasso 可以用来做 f
2020-07-15 17:06:32
1803
转载 坐标轴下降 vs 梯度下降
坐标轴下降 vs 梯度下降梯度下降与坐标下降优化方法梯度下降法坐标下降法注意事项梯度下降与坐标下降优化方法梯度下降法在每次迭代更新时选择负梯度方向(最速下降的方向)进行一次更新.不断迭代直至到达我们的目标或者满意为止.坐标下降法当损失函数不可导,梯度下降不再有效,可以使用坐标轴下降法,坐标下降法属于一种非梯度优化的方法,它在每步迭代中沿一个坐标的方向进行搜索,通过循环使用不同的坐标方法来达到目标函数的局部极小值。求导时只对一个维度(坐标轴方向)进行求导,而固定其它维度,这样每次只优化一个分量.假设
2020-07-14 14:54:41
1056
原创 常用优化方法(optimizer):SGD、momentum、Adam、AdaGard等
optimizerSGD 和 BGD 和 Mini-BGDSGD 随机梯度下降BGD(batch gradient descent):批量梯度下降Mini - BGD(mini-batch gradient descent):批量梯度下降MomentumAdagrad:(adaptive gradient)自适应梯度算法RMSprop(root mean square propagation) 均方根传播Adam (adaptive moment estimation) 自适应矩估计机器学习几乎所有算法都
2020-07-14 14:22:46
3981
1
转载 集成模型Bagging和Boosting的区别
Bagging和Boosting的主要区别Bagging(套袋法)Boosting(提升法)Bagging,Boosting二者的区别总结基本概念为什么说bagging是减少variance,而boosting是减少bias?Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类器组装成强分类器的方法。Bootstraping,即自助法:它是一种有放回的抽样方法(可能抽到重复的样本)。Bagging
2020-07-04 18:07:30
1638
1
原创 leetcode算法学习(23)——最长有效括号
最长有效括号题目描述方法一:栈思路代码复杂度分析方法二:动态规划思路代码复杂度分析方法三:无需额外空间思路代码复杂度分析题目描述给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”示例 3:输入: “())((())”输出: 4解释: 最长有效括号子串为 “(())”方法一:栈思路始终保持
2020-07-04 11:45:07
3198
原创 leetcode算法学习(22)——有效的字母异位词
有效的字母异位词题目描述方法一:count()遍历中直接比较字符个数思路代码方法二:哈希表--记录每个字符的数量思路代码题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”,t = “nagaram”输出: true示例 2:输入: s = “rat”,t = “car”输出: false方法一:count()遍历中直接比较字符个数思路有效的字母异位词,两个字符串中的元素肯定是一致的首先判断
2020-07-02 20:56:32
112
原创 leetcode算法学习(21)——礼物的最大价值(动态规划)
礼物的最大价值题目描述思路空间复杂度优化:代码复杂度分析:题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1可以拿到最多价值的礼物思路设 f(i, j)为从棋盘左上角走
2020-06-29 16:27:47
3652
原创 leetcode算法学习(20)——表示数值的字符串
表示数值的字符串题目描述方法一:正则表达式思路代码方法二:条件判断思路代码题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、“0123”、".1"即"0.1"、“1.“即"1.0"都表示数值,但"12e”、“1a3.14”、“1.2.3”、“±5”、”-1E-16"及"12e+5.4"都不是。方法一:正则表达式思路符号"+" 或 " -“必须出现在首位或"e” 或 "E"的后面小数点"."前后可以无数字“
2020-06-29 13:17:33
3975
原创 leetcode算法学习(19)——股票的最大利润(动态规划)
股票的最大利润题目描述动态规划思路代码题目描述假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 =6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0
2020-06-27 17:30:50
571
原创 leetcode算法学习(18)——重建二叉树
重建二叉树举例题目描述方法一:递归--复制列表的形式思路代码方法二:递归--哈希表思路代码举例例如要重建的是如下二叉树。其前序遍历和中序遍历如下。preorder = [3,9,8,5,4,10,20,15,7]inorder = [4,5,8,10,9,3,15,20,7]前序遍历的第一个元素 3 是根节点,第二个元素 9 可能位于左子树或者右子树,需要通过中序遍历判断。中序遍历的第一个元素是 4 ,不是根节点 3,说明 9 位于左子树,因为根节点不是中序遍历中的第一个节点。同理,前序
2020-06-27 16:11:39
230
原创 leetcode算法学习(17)—— 将整数按权重排序
将整数按权重排序题目描述方法一:递归思路代码方法二:字典思路代码方法三:记忆化(字典+递归)思路代码题目描述我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数:如果 x 是偶数,那么 x = x / 2如果 x 是奇数,那么 x = 3 * x + 1比方说,x=3 的权重为 7 。因为 3 需要 7 步变成 1 (3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)。给你三个整数 lo,
2020-06-25 15:28:28
845
原创 leetcode算法学习(16)—— 链表中倒数第k个节点
链表中倒数第k个节点题目描述方法一:计算链表长度思路代码方法二:双指针思路代码题目描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.方法一:计算链表长度思路最直接的想法:遍历统计链
2020-06-23 19:36:46
131
原创 leetcode算法学习(15)—— 队列的最大值
队列的最大值题目描述方法一:暴力解决(时间复杂度不符合)思路代码方法二:添加辅助队列思路代码题目描述请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”][
2020-06-23 18:17:39
248
原创 leetcode算法学习(14)—— 顺时针打印矩阵
顺时针打印矩阵题目描述思路代码复杂度分析题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制: 0 <= matrix.length <= 100 0 <= m
2020-06-23 16:11:37
210
原创 leetcode算法学习(13)——不用加减乘除做加法
不用加减乘除做加法位运算(&、|、^、~、>>、<<)1.位运算概述2.位运算概览3.按位与运算符(&)#4.按位或运算符(|)5.异或运算符(^)6.取反运算符 (~)7.左移运算符(<<)8.右移运算符(>>)10.复合赋值运算符不用加减乘除做加法题目描述思路代码位运算(&、|、^、~、>>、<<)1.位运算概述从现代计算机中所有的数据二进制的形式存储在设备中。即0、1两种状态,计算机对二进制数据进行的
2020-06-22 21:01:21
559
原创 leetcode算法学习(12)——移除链表元素
移除链表元素Python 直接赋值、浅拷贝和深度拷贝解析字典浅拷贝实例深度拷贝需要引入 copy 模块解析更多实例题目描述思路代码Python 直接赋值、浅拷贝和深度拷贝解析直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。字典浅拷贝实例>>>a = {1: [1,2,3]}>>> b = a.copy()
2020-06-22 14:32:35
297
原创 leetcode算法学习(11)——查找常用字符
查找常用字符题目描述方法一:count函数(时间快)思路代码方法二:Counter函数思路代码题目描述给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。你可以按任意顺序返回答案。示例 1: 输入:[“bella”,“label”,“roller”] 输出:[“e”,“l”,“l”]示例 2: 输入:[“cool”,“lock”,“cook”]
2020-06-22 11:25:54
106
原创 leetcode算法学习(10)——按奇偶排序数组
按奇偶排序数组题目描述方法一:整体赋值思路代码方法二:新数组赋值思路代码题目描述给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例: 输入:[3,1,2,4] 输出:[2,4,3,1] 输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3]也会被接受。方法一:整体赋值思路变脸数组,找出所有的奇数和偶数,分别存放至odd和even数组先放偶数,在偶数后面放奇数代码class So
2020-06-20 16:49:03
144
原创 leetcode算法学习(9)——按奇偶排序数组 II
按奇偶排序数组题目描述方法一:全部遍历,整体赋值思路代码方法二:遍历奇数索引位思路代码题目描述给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。示例: 输入:[4,2,5,7] 输出:[4,5,2,7] 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。方法一:全部遍历,整体赋值思路遍历数组,查找所有的奇数
2020-06-20 16:29:39
121
原创 leetcode算法学习(8)——分割平衡字符串
分割平衡字符串题目描述方法一:字典思路代码方法二:标志位思路代码题目描述在一个「平衡字符串」中,‘L’ 和 ‘R’ 字符的数量是相同的。给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。示例 1: 输入:s = “RLRRLLRLRL” 输出:4 解释:s 可以分割为 “RL”, “RRLL”, “RL”, “RL”,示例 2: 输入:s = “RLLLLRRRLR” 输出:3 解释:s 可以分割为 “RL”, “LLLRRR”, “LR”
2020-06-20 15:54:26
255
原创 leetcode算法学习(7)——x的平方根:实现 int sqrt(int x) 函数
x的平方根题目描述方法一:二分查找思路代码方法二:牛顿迭代思路方法三:袖珍计算器题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1: 输入: 4 输出: 2示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…袖珍计算器:通过其它的数学函数代替平方根函数得到精确结果,取整数部分作为答案;二分查找,牛顿迭代:通过数学方法得到近似结果,直接作为答案
2020-06-17 19:54:16
973
原创 leetcode算法学习(6)——最佳观光组合
最佳观光组合题目描述简单粗暴的解法(超出时间限制)改进思路代码进一步优化时间题目描述给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。示例:输入:[8,1,5,2,6]输出:11解释:i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5
2020-06-17 10:48:42
222
原创 leetcode算法学习(5)——存在重复元素II:判断重复元素的索引差绝对值是否至多为k
存在重复元素II思路代码给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1: 输入: nums = [1,2,3,1], k = 3 输出: true示例 2: 输入: nums = [1,0,1,1], k = 1 输出: true示例 3: 输入: nums = [1,2,3,1,2,3], k = 2 输出: false思路首先判断是否存在重复元素,不存在返
2020-06-15 21:03:30
288
原创 leetcode算法学习(4)——存在重复元素:给定一个整数数组,判断是否存在重复元素
存在重复元素思路代码如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1: 输入: [1,2,3,1] 输出: true示例 2: 输入: [1,2,3,4] 输出: false示例 3: 输入: [1,1,1,3,3,4,3,2,4,2] 输出: true思路将数组转换为集合,判断长度是否一致代码class Solution: def containsDuplicate(self, nums: List[int])
2020-06-15 20:37:50
386
原创 leetcode算法学习(3)——反转链表:反转一个单链表
反转链表迭代思路代码递归思路代码迭代思路输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL中间变量temp存放原链表的next地址(1)、old_head:1->2->3->4->5->NULLnew_head:1->None(2)、old_head:2->3->4->5->NULLnew_head:2->1->Non
2020-06-15 20:10:29
213
原创 leetcode算法学习(2)——同构字符串:给定两个字符串 s 和 t,判断它们是否是同构的
字典的方法1.如果s[i]不在字典的key中,需要考虑两种情况,若t[i]在字典的value中,返回False,否则dic[s[i]] = t[i]2.如果s[i]在字典的key中,若dic[s[i]] != t[i]即判断s中的字符的value是否和当前t的字符一致,返回Falseclass Solution: def isIsomorphic(self, s: str, t: str) -> bool: dic = {} for i in range(
2020-06-15 15:58:59
1219
原创 leetcode算法学习(1)——计数质数:统计所有小于非负整数 n 的质数的数量
计数质数示例思路一:暴力法(超时)思路二:优化暴力(超时)思路三:厄拉多塞筛法思路四:综上一起优化示例输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。思路:质数就是除了 1 和本身找不到其他能除尽的数,思路请看题目的提示!思路一:暴力法(超时)for … else 的用法, 一般配合 break 使用class Solution: def countPrimes(self, n: int) -> int:
2020-06-15 11:40:29
610
原创 解决Google人机验证reCaptcha失效问题
安装Redirector插件1. 下载Firefox浏览器,并安装插件2. 打开Redirector插件的界面3. 弹出如下界面4. 按照如下形式填写1. 下载Firefox浏览器,并安装插件2. 打开Redirector插件的界面3. 弹出如下界面4. 按照如下形式填写Description:Google RecaptchaExample URL:https://www.google.com/recaptcha/api.jsInclude pattern:https://www.go
2020-06-08 20:34:01
15943
4
原创 配置SSH keys并且通过命令行将本地代码上传至GitHub
命令行上传代码至GitHub1.创建SSH KEY2.登录GitHub添加SSH3.设置username和email4.git本地仓库初始化5.将本地项目的所有文件添加到暂存区中6.将暂存区的文件提交到git本地仓库7.将本地仓库关联到Github上1.创建SSH KEYAdministrator@NZLO8670LSQ7S0Y MINGW64 ~/Desktop$ mkdir .sshAdministrator@NZLO8670LSQ7S0Y MINGW64 ~/Desktop$ cd .ss
2020-06-06 19:13:40
557
转载 主成分分析PCA原理以及代码实现
主成分分析数据降维问题基变换基基变换矩阵表示协方差矩阵及优化目标方差协方差协方差矩阵协方差矩阵对角化PCA算法实例总结PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。数据降维问题实际机器学习中处理成千上万甚至几十万维的情况也并不罕见,在这种情况下,机器学习的资源消耗是不可接受的,因此我们必须对数据进行降维。降维当然意味着信息的丢失,不过鉴于实际数
2020-05-15 19:44:33
1244
原创 python保存gif动图
1.安装imageio库2.首先读取静态图到列表,作为GIF的每一帧3.接着设置输入(静态图)、输出(动态图)和一些必要参数,我们这里设置每一帧间隔时间为0.2秒,默认是1秒,之后调用miageio.mimsave函数去保存结果。import imageiodef create_gif(image_list, gif_name, duration = 1.0): ''' :param image_list: 这个列表用于存放生成动图的图片 :param gif_name: 字
2020-05-15 00:41:35
2700
转载 遗传算法详解及代码实现
遗传算法定义相关术语交叉变异产生子代完整过程遗传算法应用问题的提出与解决方案“袋鼠跳”问题爬山法(最速上升爬山法)模拟退火遗传算法遗传算法实现过程遗传算法的一般步骤遗传算法图解进化细节编码方法二进制编码浮点编码法符号编码法袋鼠染色体编码评价个体的适应度--适应度函数(fitness function)射杀一些袋鼠--选择函数(selection)遗传--染色体交叉(crossover)变异--基因突变(Mutation)定义遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计
2020-05-14 21:34:28
85463
25
原创 关联规则----Apriori算法以及代码实现
关联规则概述关联规则中的几个概念频繁项集和强规则误区Apriori算法介绍Apriori核心思想Apriori流程算法步骤问题的关键---如何由频繁项集生成候选集详细例子生成规则概述数据挖掘是指以某种方式分析数据源,从中发现一些潜在的有用的信息,所以数据挖掘又称作知识发现,而关联规则挖掘则是数据挖掘中的一个很重要的课题,它是从数据背后发现事物之间可能存在的关联或者联系。关联规则(Association Rules)是反映一个事物与其他事物之间的相互依存性和关联性,是数据挖掘的一个重要技术,用于从大量数
2020-05-13 16:18:34
10499
4
原创 几种常用的聚类方法
聚类方法K-MeansSequential LeaderModel Based MethodsDensity Based Methods一般流程原始数据在经过不同的变换后会产生不同的聚类结果。当数据分布不是球形分布式,也易造成分类错误。上图的横坐标表示距离s(最大值为1,会小于0),纵坐标为所有点。一个点画一条线:s越大,线越长。K-Means缺点:数据点很大,会导致效果较慢;K值的确定很困难;会收敛至局部最优;噪点敏感(因为均值对噪点敏感);对非球形分布的数据聚类效果不太好
2020-05-12 21:38:44
3826
原创 支持向量机(Support Vector Machine,SVM)算法原理
SVM简介支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。SV...
2020-05-05 21:28:51
2309
原创 Boosting算法族——AdaBoost算法原理
Bagging、Stacking和BoostingBoosting算法族的两个核心问题(1)、迭代训练过程中如何降低模型的偏差?(2)、如何将训练好的弱学习器组合为强学习器?AdaBoostAdaBoost算法是Boosting算法的典型代表,它是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二分类算法。它对两个核心问题的回答是:(1)、迭代训练过程中如何降低模型的偏...
2020-05-05 16:39:57
576
原创 逻辑回归(Logistic Regression)原理及代码实现
原理逻辑回归原理梯度下降法代码实现import numpy as npimport mathfrom matplotlib import pyplot as pltfrom sklearn.linear_model import LogisticRegression#用现成的库进行对比试验from sklearn.preprocessing import StandardScal...
2020-05-03 13:30:40
1793
Ensemble Learning.pdf
2020-05-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人