自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关键短语提取的典型方法

随着互联网文本相关数据呈指数级增长,如何快速有效地抽取和整理相关关键信息成为一个重要的研究课题。与关键词不同,关键短语可能由多个词组成,其文本语义描述更为丰富,表达更为完整。除此之外,关键短语构成了一个简洁的概念性文档摘要,有助于语义索引、文档聚类和分类等多个任务的效果提升。...

2022-07-28 14:56:07 1336 1

原创 二维数组按数字大小选取前top k个数字

题目描述二维数组,每行是降序的,且每行的长度不固定,综合选取去重后的前top-k大的数字。输入:[[10,9,7,5,2][8,6,3][10,9,8,5]]选取前top-5大的数字输出:[10,9,8,7,6]做法思想选取top-k大(小)这种问题,首先想到用最大(小)堆解决,本题中考虑构建k个最大堆进行比较,若某个堆顶元素被选取了,则将指针往后移。具体代码import heapqdef run(nums, k): m = len(nums) list1 = [0

2022-05-25 15:45:17 685

原创 git代码回滚

git回退历史,有以下步骤:1.已push后回退:(1) 使用git log命令,查看分支提交历史,确认需要回退版本的<commit_id>(2) 使用git reset --hard <commit_id>命令或者git revert <commit_id>,进行版本回退(此时本地已回退)(3) 在git commit后,再次使用git push origin <分支名> --force命令,推送至远程分支(此时线上版本已回退)快捷命令:

2021-10-16 00:06:17 11578 1

原创 linux中的“~”,“./”,“/“具体含义

1.“~” 表示主目录,也就是当前登录用户的用户目录比如用户是“zheng”,则mac电脑的用户目录就是/users/zheng;2.“/”是指根目录,所有目录最顶层的目录;3.“./”表示当前目录,一般和其他文件夹或者文件结合使用,指当前目录下的东西....

2021-08-05 21:25:38 6740

原创 git常用命令记录(随时遇到,随时记录~)

git常用命令总结1. git status 用于查看在你上次提交后是否有对文件进行再次更改 git status -s 可以获得简短的输出结果2. git pull 用于从远程获取代码并合并本地的代码 eg: git pull origin master: brantest 表示将远程主机origin的 master分支拉取过来,与本地的brantest分支合并3. git checkout 切换分支 git checkout -b 创建并切换分支...

2021-08-05 21:05:32 114

原创 Linux程序后台运行命令nohup

程序后台运行nohup python -u run.py > output.log 2>&1 &0代表标准输入、1代表标准输出、2代表标准错误信息输出run.py > output.log 2>&1含义是:标准输出重定向到output.log,而错误又重定向到标准输出,这两个位置不可换-u参数可以将输出及时地存在log文件中查看程序进程情况cat output.log查看进程号ps -ef 彻底杀死进程kill -9 进程号

2021-04-07 20:57:23 330

原创 【力扣第九题】-- 回文数(python版本)

题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。题目解析本题可以考虑使用两种方法:第一种方法是直接将整数的前半部分与后半部分比较是否一样,若相同,则为回文数;

2021-01-27 15:24:42 532 3

原创 【力扣第八题】-- 字符串转换整数(python版本)

题目描述请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个32位有符号整数(类似 C/C++ 中的 atoi 函数)示例1:输入: str = “42”输出: 42示例2:输入: str = " -42"输出: -42解释: 第一个非空白字符为 ‘-’, 它是一个负号。我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42.示例3:输入: str = “4193 with words”输出: 4193解释: 转换截止于数字 ‘3’ ,因为

2021-01-23 18:15:43 253

原创 【力扣第七题】-- 整数反转(python版本)

题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21思路解析用 res 变量记录反转的整数数字,对当前数字取对 10 的余数,再将余数与 res 变量加和,即可完成 数字 翻转;int 取值范围为 [-2^(31), 2^(31) - 1],如果翻转数字溢出,则立即返回 0。具体代码def reverse(x): # 将

2020-12-29 11:57:00 333 2

原创 互联网公司是如何变现的?

你觉得互联网公司是如何变现的呢?在如今互联网+的时代,互联网公司有许多免费的软件供人们使用,比如:微信、QQ、淘宝、支付宝等等,用户只需下载注册一下,就可立即使用。那么问题来了,这些软件是如何盈利的呢? 毕竟如果不盈利,那些搞软件开发的程序猿便没有工资可以拿,也便不会有这些方便人们日常生活的软件的存在。。。个人愚见看了刘鹏老师的计算广告这本书,使我受到启发,其实互联网公司有三项可变现的核心资产:流量、数据、影响力。(1) 流量:流量的价值是:有人使用你的产品,你便可以在产品本身的功能之外夹带

2020-12-28 17:49:00 757 8

原创 【力扣第六题】-- Z字形变换(python版本)

题目描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。思路解析字符串 s 是以 Z 字形为顺序存储的字符串,按顺序遍历字符串 s 时,每个字符 c 在 Z 字形中对应的行索引先增大再减小;解决思

2020-12-28 16:59:19 649 5

原创 【力扣第五题】-- 最长回文子串(python版本)

题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”解题思路本题考虑使用动态规划求解,有以下两种情况需要考虑:(1) 如果一个字符串是回文串,那么在它左右分别加上一个相同的字符,那么它一定还是一个回文串;(2) 如果在一个不是回文字符串的字符串两端添加任何字符,或者在回文串左右分别加不同的字符,得到的一定

2020-12-26 17:13:58 358

原创 【力扣第三题】-- 无重复字符的最长子串(python版本)

题目描述给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。注意,你的答案必须是子串的长度,"pwke"是一个子序列,不是子串。题目解析本题考虑使用双指针滑动窗口计算最长子串的长度,利用集合的无重复性来存储滑动窗口的字符具体代码

2020-12-22 17:14:27 289 1

原创 【力扣第二题】--两数相加(python版本)

题目描述给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以0开头。示例:输入:(7 -> 4 -> 3) + (5 -> 6 -> 4)输出:2 -> 1 -> 8原因:347 + 465 = 812具体代码class ListNode(object): de

2020-12-21 21:22:22 1025 2

原创 【力扣第一题】--两数之和(python版本)

题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9返回 [0, 1]具体代码def twoSum(nums, target): for i, j in enumerate(nums): chazhi = target - j

2020-12-17 11:16:08 312

原创 手写TF-IDF 【python版】

import mathclass Solution(): def word_count(self, word_list): countlist = [] for list1 in word_list: dict1 = {} for j in list1: if j not in dict1: dict1[j] = 0

2020-09-22 08:48:13 492

原创 特征选择的方法

当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练,通常来说,从两个方面考虑来选择特征:特征是否发散特征与目标的相关性特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用;特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。根据特征选择的形式又可以将特征选择方法分为3种:Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征.

2020-09-11 11:02:43 1897

原创 数据预处理的方法

去除唯一属性唯一属性通常是一些id属性,这些属性并不能刻画样本自身的分布规律,所以简单地删除这些属性即可处理缺失值缺失值处理的三种方法:直接使用含有缺失值的特征;删除含有缺失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的);缺失值补全常见的缺失值补全方法(1) 均值插补:如果样本属性的距离是可度量的,则使用该属性有效值的平均值来插补缺失的值(2) 同类均值插补:首先将样本进行分类,然后以该类中样本的均值来插补缺失值(3) 建模预测(4)

2020-09-11 10:43:11 264

原创 word2vec损失函数

以CBOW为例,利用softmax层计算出字典V中每个词的概率,再构建交叉熵损失函数然而直接对词典里的V个词计算相似度并归一化显然是极其耗时的,为此作者提出了层次Softmax和负采样两种损失层交叉熵损失函数参考文章参考文章1...

2020-09-10 11:08:53 3129

原创 基尼系数、熵、信息增益、信息增益率

熵熵是事件不确定性的度量,如果事件无不确定性,则熵为0,不确定性越大,熵越大条件熵在一个条件下,随机变量的不确定性信息增益信息增益 = 熵 - 条件熵表示在一个条件下,信息不确定性减少的程度缺点:信息增益偏向取值较多的特征信息增益率本质:是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。惩罚参数:数据集D以特征A作为随机变量的熵的倒数,即:将特征A取值相同的样本划分到同一个子集中缺点:信息增益比偏向取值较少的特征原因:

2020-09-09 11:34:00 1007

原创 GBDT、Xgboost、LightGBM对比

LightGBM 与 XGBoost 的不同点1. 由于在决策树在每一次选择节点特征的过程中,要遍历所有的属性的所有取值并选择一个较好的。XGBoost 使用的是近似算法,先对特征值进行预排序 Pre-sort,然后根据二阶梯度进行分桶,能够更精确的找到数据分隔点;但是复杂度较高。LightGBM 使用的是直方图算法,这种只需要将数据分割成不同的段即可,不需要进行预先的排序。占用的内存更低,数据分割的复杂度更低。2.决策树生长策略,XGBoost 采用的是 Level-wise 的树生长策略,Ligh

2020-09-09 11:08:00 645

原创 xgboost面试常问

xgboost损失函数交叉熵损失函数xgboost目标函数xgboost的目标函数由训练损失和正则化项两部分组成,目标函数定义如下:xgboost怎么处理缺失值xgboost把缺失值当做稀疏矩阵来对待,本身在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树xgboost优缺点优点1. 精度更高GBDT 只用到一阶泰勒展开,而 XGBoost 对损失函数进行了二

2020-09-09 10:43:56 514

原创 LR与朴素贝叶斯对比

相同点朴素贝叶斯和逻辑回归都属于分类模型,当朴素贝叶斯的条件概率服从高斯分布时,它计算出来的 P(Y=1|X) 形式跟逻辑回归是一样的不同点1. 逻辑回归是判别式模型,朴素贝叶斯是生成式模型判别式模型估计的是条件概率分布,给定观测变量 x 和目标变量 y 的条件模型,由数据直接学习决策函数 y=f(x) 或者条件概率分布 P(y|x) 作为预测的模型。判别方法关心的是对于给定的输入 x,应该预测什么样的输出 y;而生成式模型估计的是联合概率分布,基本思想是首先建立样本的联合概率密度模型 P(

2020-09-09 10:12:07 881

原创 LR模型与SVM对比

LR模型与SVM对比相同点1. 都是线性分类器。本质上都是求一个最佳分类超平面。都是监督学习算法。2. 都是判别模型。通过决策函数,判别输入特征之间的差别来进行分类。不同点1.损失函数不同:LR的损失函数是交叉熵,SVM损失函数为合页损失函数SVM目标函数为损失函数加正则项:2. 两个模型对数据和参数的敏感程度不同:(1) SVM考虑分类边界线附近的样本, 在支持向量外添加或减少任何样本点对分类决策面没有任何影响;LR受所有数据点的影响。直接依赖数据分布,每个样本点都会影响决策

2020-09-09 10:02:34 504

原创 LR模型

LR模型逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降求解参数,来达到将数据二分类的目的逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层sigmoid激活函数,即先把特征线性求和,然后使用sigmoid函数来预测。将连续值映射到 0和1特征重要性每个特征都对应一个模型参数wi,该参数越大,那么该特征对模型预测结果的影响就会越大,我们就说该特征就越重要,因此LR模型的特征重要性评估方式就是wi的大小LR的损失函数LR的loss function称为lo

2020-09-09 09:35:23 830

原创 GBDT面试相关问题

GBDT基本原理GBDT基本原理是通过多轮迭代,每轮迭代产生一个弱分类器(利用CART回归树构建),每个分类器在上一轮分类器的残差基础上进行训练GBDT优点1.可以灵活处理各种类型的数据,包括连续值和离散值;2. 在相对少的调参时间情况下,预测的准确率也比较高 ;3. 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。GBDT缺点由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行GBDT分裂

2020-09-08 15:53:25 851 5

原创 为什么逻辑回归要用sigmoid函数

为什么逻辑回归要用sigmoid函数Sigmoid是推导出来的,不是假设出来的, LR的假设是两个类服从均值不等,方差相等的高斯分布,然后通过贝叶斯决策推导为什么假设服从高斯分布(1) 因为高斯分布是比较容易处理的分布(2) 从信息论的角度上看,当均值和方差已知时(尽管你并不知道确切的均值和方差,但是根据概率论,当样本量足够大时,样本均值和方差以概率1趋向于均值和方差), 高斯分布是熵最大的分布, 因为最大熵的分布可以平摊你的风险参考文章参考文章1...

2020-09-05 09:55:12 1295

原创 GBDT是否需要进行归一化操作?

概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、rf。而像adaboost、svm、lr、KNN、KMeans之类的最优化问题就需要归一化为什么GBDT需要进行归一化操作因为GBDT的树是在上一颗树的基础上通过梯度下降求解最优解,归一化能收敛的更快,GBDT通过减少偏差来提高性能,而随机森林本来就是通过减少方差提高性能的,树之间建立关系是独立的,不需要归一化对于线性模型,特征值差别很大时,比如说LR,我有两个特征,一个是(0,1)的,一个是(.

2020-09-05 09:45:09 4620 1

原创 多维数组删除某一行或者某一列【不用numpy】

删除某一行def run(matrix): for i in range(len(matrix)): if i == 0: # 删除第一行 del matrix[0] return matrixres = run([[2, 2, 3], [3, 4, 1], [4, 1, 5], [1, 3, 4]])print(res) 删除某一列def run(matrix): for i in matrix:

2020-09-04 08:32:20 1790

原创 多维数组按某一列进行排序

def takeSecond(elem): return elem[1]def run(random): # key表示按某一列进行排列,reverse = True表示降序排列,默认升序 random.sort(key=takeSecond, reverse = True) return randomres = run([[2, 2, 3], [3, 4,1], [4, 1, 5], [1, 3, 4]])print(res)...

2020-09-03 21:31:45 898

原创 激活函数比较

激活函数定义在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数激活函数作用我们决定引入非线性函数作为激活函数,这样深层神经网络表达能力就更加强大。如果不用激活函数,每一层节点的输入都是上层输出的线性函数,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机Sigmoid函数数学表达式:几何图像:导数图像:Sigmoid优缺点优点:把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大

2020-08-20 11:30:28 270

原创 【剑指第6题】从尾到头打印链表(自己输入链表) python

题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)示例1输入:head = [1, 3, 2]输出:[2, 3, 1]class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: def reversePrint(self, head): # # 法一 利用栈 # stack =

2020-08-17 19:40:57 160

原创 一组数的最大公约数和最小公倍数 python

最大公约数利用辗转相除法求得# 两个数的最大公约数def gcd_2(a,b): if a < b: a,b = b,a if a % b == 0: return b else: return gcd_2(b, a%b)# 多个数的最大公约数def gcd_many(list1): g = list1[0] for i in range(1, len(list1)): g = gcd_2

2020-08-12 13:03:06 326

原创 word2vec、Glove比较

Glove它是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。我们通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。word2vec vs glove1.word2vec是局部语料库训练的,其特征提取是基于

2020-08-07 12:47:00 4143

原创 简单理解ELMO

ELMO 本身是个根据当前上下文对 Word Embedding 动态调整的思路ELMO 采用了典型的两阶段过程,第一阶段是利用语言模型进行预训练;第二阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding 作为新特征补充到下游任务中。 上图展示的是其预训练过程,它的网络结构采用了双层双向LSTM,目前语言模型训练的任务目标是根据单词W的上下文去正确预测单词W, W之前的单词序列 Context-before称为上文,之后的单词序列 Context-after

2020-08-07 12:30:38 1089

原创 机器学习评价指标【准确率、精确率、召回率、F1值、ROC、AUC】

准确率(precision)在被判定为正样本的数据中,实际为正样本的个数精确率(accuracy)在所有数据中,正负样本判断正确的个数召回率(recall)在实际为正样本的数据中,被判定为正样本的个数F1值F1值是精确率和召回率的调和均值,相当于精确率和召回率的综合评价指标ROC接收者操作特征曲线(receiver operating characteristic curve),是反映敏感性和特异性连续变量的综合指标,ROC曲线上每个点反映着对同一信号刺激的感受性横坐

2020-08-07 09:49:31 1795

原创 Bert面试总结

bert两个预训练任务Task1:Masked Language ModelMLM是指在训练的时候随即从输入预料上mask掉一些单词,然后通过的上下文预测该单词,在BERT的实验中,15%的Token会被随机Mask掉。在训练模型时,一个句子会被多次喂到模型中用于参数学习,但是Google并没有在每次都mask掉这些单词,而是在确定要Mask掉的单词之后,80%的时候会直接替换为[Mask],10%的时候将其替换为其它任意单词,10%的时候会保留原始Token这么做的原因是:如果句子中的某个Tok

2020-08-06 23:28:34 905

原创 Transformer面试总结

1. Transformer的位置信息和bert的位置信息有什么不一样?Transformer计算token的位置信息这里使用正弦波↓,类似模拟信号传播周期性变化。这样的循环函数可以一定程度上增加模型的泛化能力。但BERT直接训练一个position embedding来保留位置信息,每个位置随机初始化一个向量,加入模型训练,最后就得到一个包含位置信息的embedding,最后这个position embedding和word embedding的结合方式上,BERT选择直接拼接2. Transf

2020-08-06 23:22:28 3592

原创 LSTM简单理解

RNNLSTM长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。遗忘门输入门更新cell状态输出门LSTM怎么解决梯度消失和爆炸的问题?首先三个门的激活函数是sigmoid,这也就意味着这三个门的输出要么接近于0, 要么接近于1。当门为1时,这就使得梯度能够很好的在LSTM中传递,很大程度

2020-08-06 18:55:59 322

原创 Transformer里layer-normlization的作用

当我们使用梯度下降法做优化时,随着网络深度的增加,数据的分布会不断发生变化,为了保证数据特征分布的稳定性,我们加入Layer Normalization,这样可以加速模型的收敛速度Normalization 有很多种,但是它们都有一个共同的目的,那就是把输入转化成均值为 0 方差为1的数据。我们在把数据送入激活函数之前进行normalization(归一化),因为我们不希望输入数据落在激活函数的饱和区,发生梯度消失的问题,使得我们的模型训练变得困难BN的主要思想是: 在每一层的每一批数据(一个ba

2020-08-06 11:05:14 8879 10

空空如也

空空如也

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

TA关注的人

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