自定义博客皮肤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)
  • 收藏
  • 关注

转载 学习笔记——随机森林

准确地说,随机森林的工作原理如下:从数据集(表)中随机选择k个特征(列),共m个特征(其中k小于等于m)。然后根据这k个特征建立决策树。重复n次,这k个特性经过不同随机组合建立起来n棵决策树(或者是数据的不同随机样本,称为自助法样本)。对每个决策树都传递随机变量来预测结果。存储所有预测的结果(目标),你就可以从n棵决策树中得到n种结果。计算每个预测目标的得票数再选择模式(最常见的目标变量)。换句话说,将得到高票数的预测目标作为随机森林算法的最终预测。针对回归问题,随机森林中的决策树会预测Y的值(

2021-02-27 19:27:43 484

原创 学习笔记——GBDT

GBDT梯度提升决策树,是一种典型的boosting的集成学习算法,也就采用的加法模型,通过若干个基学习器的结果进行相加得到最终的结果。一.GBDT的训练过程GBDT通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。GBDT的基学习器一般为cart树,也就意味着每一轮迭代都产生一颗cart树(针对分类问题有不同,后面讨论)。因为单颗cart树是一个

2021-02-26 16:22:47 300

原创 文本去重方法——SimHash

SimHash是一种文本表示的方法,和TF-IDF一样,但是TF-IDF需要遍历所有文本来计算得到文本的表示,计算量较大。一.SimHash的计算过程1.分词对于中文文本来说,一般都要先进行分词才能进一步得到文本的表示向量。首先按照一定粒度进行分词,比如‘我爱编程’这句话,可以切分为‘我/爱/编程’2.将分词结果映射为定长的二进制编码比如经过hash算法之后,得到的hash值为我 1 0 1 0爱 0 1 1 0编程 1 0 0 03.将二进制编码进行转换将二进制编码

2021-02-25 16:26:26 2037

原创 学习笔记——机器学习中怎么选择特征?

一.前言在机器学习中,特征往往对模型整体表现的影响非常大。而现实问题中,特征数量往往会非常大,而处理庞大的特征往往比较困难,所以就有了各种的降维方法。降维的方法主要分为特征抽取 (Feature Extraction) 和特征选择 (Feature Selection) 两种。特征抽取是指在原来特征的基础上,形成新的特征。抽取后的新特征是原来特征的一个映射。经典的特征抽取方法有主成分分析和线性评判分析。但是特征抽取后的新特征的空间结构被改变,因此无法进行后续预测模型的建立。特征选择是指直接删除不相关

2021-01-17 20:40:08 1450

原创 学习笔记——结巴分词

一.前言结巴分词是一种文本领域常用的分词方法,目前已经在github上开源。其主要利用统计词典和当前文本,来推出前缀词典。基于前缀词典来构造一个前缀树,利用前缀树可以构造出有向无环图。最后通过动态规划算法,来计算得到最大概率路径,从而推出最终的切分形式。二.分词步骤以‘去北京大学玩’这个句子为例1.统计词典:分别为词和对应的词频北京大学 1200北京 30000大学 3500去 12550玩 3000北 60000京 45000大 300

2021-01-02 09:28:35 259

原创 学习笔记——XGBoost理解

一.前言XGB的推导过程见:https://blog.csdn.net/weixin_44467105/article/details/111810895基于上述推导,可以得到cart回归树的分裂标准。但是在回归树分裂的过程中,如何利用分裂标准找到最优切分点实际上在论文中有两个方法:贪心算法近似算法二.贪心算法这里的贪心算法实际就是在之前决策树中利用到分裂方法。基于某种标准(GINI系数/均方误差/信息增益比等),每次依次遍历所有特征和所有特征的取值,通过线性扫描来找到最优分割点。其流程如

2020-12-28 22:15:51 446

原创 学习笔记——XGBoost(极端梯度提升)

一. XGBoost损失函数GBDT损失函数L(yi,ft−1(x)+ht(x))L(y_i,f_{t-1}(x)+h_t(x))L(yi​,ft−1​(x)+ht​(x))XGBoost在此基础上加入了正则化项Ω(ht)=γJ+λ2∑j=1Jwtj2\Omega(h_t)=\gamma J+\frac{\lambda}{2}\sum_{j=1}^J w_{tj}^2 Ω(ht​)=γJ+2λ​j=1∑J​wtj2​J为叶子节点个数,wtjw_{tj}wtj​为叶子节点的输出值。所以整体的损失函数就

2020-12-27 20:57:49 743 2

原创 学习笔记 ——GBDT(梯度提升决策树)

一.前言GBDT(Gradient Boosting Decision Tree)梯度提升决策树,通过多轮迭代生成若干个弱分类器,每个分类器的生成是基于上一轮分类结果来进行训练的。GBDT使用的也是前向分布算法,这一点和Adaboost类似,但不同的是,GBDT的弱分类器一般为Cart树(Adaboost一般不做限制)。在GBDT中,前一轮学习到的弱学习器为ht−1(x)h_{t-1}(x)ht−1​(x),组合得到的强学习器为ft−1(x)f_{t-1}(x)ft−1​(x),其损失函数为L(y,f

2020-12-25 16:25:16 503 1

原创 学习笔记——Adaboost

1. 提升方法的基本思路1.Kearns 和 Valiant首先提出了“强可学习” 和 “弱可学习”的概念。指出:在概率近似正确学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确的概率很高,那么就称这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。后来Schapire证明一个概念强可学习的充分必要条件是这个概念是弱可学习的。2.这样一来,问题便成为,在学习中,发现“弱可学习算法”,能否将它提

2020-12-24 18:18:20 635

原创 学习笔记——集成学习总结,包含: Bagging、Boosting、Stacking、Blending

一.基本思想在机器学习的问题中,我们目标是构建模型来作出准确的预测。但实际上,单个的模型往往难以有比较好的预测效果。所以我们通过学习多个弱学习器,并最终进行组合的方法,来构造强学习器,从而达到更好的预测效果。集成学习常见的种类:baggingboostingstackingblending其中bagging和boosting是最常见的两种。二.Stacking我们以两层的Stacking为例(实际可以多层),第一层为两个模型M1,M2,第二层为一个模型M3。对于整体的数据集划分为Tra

2020-12-23 17:27:56 529

原创 一文理清楚:熵,条件熵,KL散度(相对熵),交叉熵,联合熵,信息增益,信息增益比,GINI系数

熵熵是表示随机变量不确定性的度量。设XXX是一个有N个取值有限的随机变量,其概率分布为:P(X=i)=pi,i=1,2...N P(X=i)=p_i , i= 1, 2 ...NP(X=i)=pi​,i=1,2...N则随机变量X的熵为:H(X)=−∑i=1Npilog⁡piH(X)=-\sum_{i=1}^Np_i \log p_iH(X)=−i=1∑N​pi​logpi​在这里熵的大小与XXX取值的大小无关,只与XXX的分布有关。从H(x)H(x)H(x)的取值可以得出,0<=H(

2020-12-12 14:41:34 995

原创 深入浅出——网络嵌入算法Node2vec

Node2vec和Deepwalk算法类似,利用词嵌入的思想来做网络节点的嵌入。但不同点在于,Node2vec的随机游走方式发生了改变。

2020-12-10 22:01:21 1329

原创 深入浅出——网络嵌入算法DeepWalk

DeepWalk是一种利用的截断随机游走获得网络的结构信息,来进行网络嵌入的算法。将网络中的节点嵌入到一个潜在的连续空间中。一.随机游走DeepWalk是利用截断随机游走来获取节点的上下文信息(可以认为是网络的局部结构信息)。随机游走:从一个节点出发,随机选择它的一个邻居节点,接着从这个邻居节点出发到该邻居节点的邻居节点,重复这个步骤直到经过所有节点。在DeepWalk中是采用截断的方法,提取终止随机游走,得到一个比较短的随机游走序列。提前设置参数ttt为一次随机游走的长度,达到这个长度就会停止随机

2020-12-09 16:37:24 1586 1

原创 深入理解Hierarchical Softmax机制

Hierarchical Softmax是利用哈夫曼树结构来减少计算量的一种方式。由word2vec论文应用,能够加快模型的训练速度。原始计算原始在word2vec中提到的计算条件概率的公式为:P(v∣vi)=exp((v′)T∗vi)∑w=1Wexp(vw′∗vi) P(v| v_i) =\frac{exp((v')^{T} *v_i)}{\sum_{w=1}^{W} exp(v'_w*v_i)} P(v∣vi​)=∑w=1W​exp(vw′​∗vi​)exp((v′)T∗vi​)​但是,分母部

2020-12-09 16:01:50 1183

原创 推荐系统(一)协同过滤算法(CF)

协同过滤算法是典型的基于领域的算法,具体来说协同过滤算法分为两种,基于用户的协同过滤算法和基于物品的协同过滤算法。一.基于用户的协同过滤算法算法步骤:1.找到和目标用户兴趣相似的用户集合2.找到这个用户集合中用户喜欢的,而目标用户没用点击过的物品推荐给目标用户所以针对这个算法首先一个问题是如何找到和目标用户兴趣相似的用户集合。用户相似度衡量指标我们通过设定一个指标,来衡量其它用户和目...

2020-04-02 19:11:03 878 1

原创 比较 牛顿法与梯度下降法

这里主要是对比两者不同,和优缺点,具体的两者的推导过程可以参考https://blog.csdn.net/weixin_44467105/article/details/104841966一.对于一阶导和二阶导的理解。网上大部分都是说由于牛顿法用了二阶导,而梯度下降算法用了一阶导,所以牛顿法更快,基本都没说具体原因,这里我结合下自己对于数学的理解,谈谈对于这个点的理解,如果不对,希望也能有人指...

2020-03-18 21:20:23 727

原创 支持向量机(SVM)与逻辑回归(LR)对比

相同:1.本质都是线性分类器,都是要求一个最佳分类的超平面2.都是监督模型3.都是判别模型 判别模型有:KNN,SVL,LR, 生成模型:朴素贝叶斯, 马尔可夫不同点:1.损失函数不同,lr是交叉熵损失,SVM合页损失函数2.SVM考虑分类边界线附近的样本(决定分类超平面的样本)。在支持向量外添加或减少任何样本点对分类决策面没有任何影响;LR受所有数据点的影响。直接依赖数据分布,每...

2020-03-17 16:05:50 1981

原创 批量梯度下降(BGD),随机梯度下降(SGD),小批量梯度下降(MBGD)对比理解

1.批量梯度下降(BGD)我们所说的梯度下降算法一般都默认是批量梯度下降。我们用每个样本去计算每个参数的梯度后,要将这个梯度进行累加求和注意这里有一个求和符号,意思就是我们每次计算参数都是用全部的样本来计算这个参数的变化。优点:1.每次都使用全部全部数据,能更好的代表样本总体,从而更好的指示了正确的梯度下降的方向。2.对于凸最优化问题,一定能够收敛的全局最优缺点:每次都使用全部样本...

2020-03-15 17:09:05 890

原创 Python: sklearn库fit_transform()和transform()函数

fit_transform()和transform()都是做标准化用的。在做标准化时我们需要求到标准差和均值才能做标准化,而fit_transform()就是先求标准差和均值,再做标准化。对于transform()就没有求标准差和均值,直接做标准化,它用到的方差和均值是由前面的fit_transform()求来的。在transform()前必须有fit_transform(),因为transf...

2020-03-15 14:44:03 580

转载 通俗易懂理解牛顿法

机器学习算法中经常碰到非线性优化问题,如 Sparse Filtering 算法,其主要工作在于求解一个非线性极小化问题。在具体实现中,大多调用的是成熟的软件包做支撑,其中最常用的一个算法是 L-BFGS。为了解这个算法的数学机理,这几天做了一些调研,现把学习过程中理解的一些东西整理出来。目录链接(1) 牛顿法(2) 拟牛顿条件(3)&nbs...

2020-03-13 15:26:04 416

原创 关于逻辑回归的理解与笔记

以下为自己总结逻辑回归的一些点,字写的一般,请见谅。大致分为:1.两种推出损失函数的方法(本质相同)2.逻辑回归线性分类与非线性分类的理解3.逻辑回归如何做多分类4.逻辑回归正则化5.逻辑回归梯度下降的推导过程由于是总结,所以很多没有很细节,所以后面可能会关于细节问题细说...

2020-03-11 14:51:33 266

原创 xgboost与gdbt区别比较

1.从本质上看gbdt是机器学习算法的一种,xgboost是该算法的具体工程实现2.基分类器gbdt采用cart作为基分类器,而xgboost的基分类器可以是线性的3.防止过拟合xgboost在目标函数中显式的加入了正则化项来控制模型的复杂度4.数据的使用gbdt每轮迭代都使用全部数据,xgboost则可以对数据进行采用5.对缺失值处理XGBOOST可以自动学习出缺失值的分裂方向...

2020-03-09 00:00:47 958

原创 冒泡、简单选择、直接插入、快排(python实现)

冒泡排序l=[3,5,7,8,4,1,2,9,10]length=len(l)for i in range(length): for j in range(length-i-1): if l[j]>l[j+1]: temp=l[j] l[j]=l[j+1] l[j+1]=tempprin...

2020-03-03 15:50:45 262

原创 感知机学习算法(对偶形式)

2020-02-25 22:45:07 367

原创 理解K折交叉验证

k 折交叉验证第一步,不重复抽样将原始数据随机分为 k 份。第二步,每一次挑选其中 1 份作为测试集,剩余 k-1 份作为训练集用于模型训练。第三步,重复第二步 k 次,这样每个子集都有一次机会作为测试集,其余机会作为训练集。在每个训练集上训练后得到一个模型,用这个模型在相应的测试集上测试,计算并保存模型的评估指标,第四步,计算 k 组测试结果的平均值作为模型精度的估计,并作为当前 k...

2020-02-25 22:21:56 4468 2

原创 有效的数独(python)---leetcode36

判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。数独部分空格内已填入了数字,空白格用'.'表示。示例1:输入:[ ["5","3",".",".","7",".",".",".","."],...

2020-02-17 15:51:36 229

原创 在排序数组中查找元素的第一个和最后一个位置 (python)----leetcode34

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(log n) 级别。如果数组中不存在目标值,返回[-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]输入: nums = [5,7,7,8,8,10], tar...

2020-02-17 15:49:33 331

原创 二叉树的层次遍历(python的递归与非递归)----leetcode 102

非递归class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] res=[] q=[root] while q: temp1=[] ...

2020-02-16 16:10:00 592

原创 一文理清楚,准确率,精度,召回率,真正率,假正率,ROC/AUC

一.混淆矩阵如上图为一个混淆矩阵,True Positive (真正, TP)被模型预测为正的正样本;True Negative(真负 , TN)被模型预测为负的负样本 ;False Positive (假正, FP)被模型预测为正的负样本;False Negative(假负 , FN)被模型预测为负的正样本;相对应的,True Positive Rate(真正率 , TPR)或灵...

2020-02-14 15:53:24 2133

转载 社交网络中影响力传播模型

1.独立级联模型独立级联模型(Independent Cascade Mode,IC模型)是一种概率模型,当一个节点v被激活时,它会以概率p[v,w]对它未激活的出边邻居节点w尝试激活,这种尝试仅仅进行一次,而且这些尝试之间是互相独立的,即v对w的激活不会受到其他节点的影响。独立级联模型的信息传播过程为:(1)给定初始的活跃节点集合S,当在时刻t节点v被激活后,它就获得了一次对它的邻居节点w产...

2020-02-12 19:47:05 4736 1

原创 二叉树的前中后序遍历 递归/非递归(python版)

中序遍历(非递归):def inorderTraversal(self, root: TreeNode) -> List[int]: res=[] stack=[] if not root: return root while root or stack: while root: stack.appen...

2020-02-12 17:45:24 475 1

原创 聚类分析(三)——DBSCAN算法

一.简介DBSCAN算法是一种基于密度的聚类算法。基于密度的聚类算法会寻找被低密度区域分离的高密度区域。.该算法我们首先需要将所有的点分为:核心点,边界点,噪声点。区分这些点的依据是根据我们提前给出的MinPts和Eps,这里假设我们提前给定MinPts=7核心点:如果该点的给定邻域内点的个数超过给点的阈值MinPts。下图的点A,以A为圆心,Eps为半径的区域内共有7个点(包括点A和...

2020-02-11 21:51:28 1554

原创 聚类分析(二)——二分K均值

一般的K均值,所分成的簇往往是局部最优,而不是全局最优,比如下图,簇也不会再更新了,但显然没达到我们的要求。算法思想:顾名思义,二分k均值就是每次将数据集一分为二,即k均值算法中的k值为2,第一次是在整个数据集上划分,这里没什么异议,从第二次开始,每次划分的时候就要选取使整个数据集误差平方和最小的一个类进行一分为二了,以此进行下去直到分成我们想要的k类。二分k均值的伪代码如下:将所有点看...

2020-02-10 15:24:51 2792

原创 聚类分析(一)-K均值

一.K均值的过程首先,选择K个初始质心,其中K是用户指定的参数,即所期望的簇的个数。每个点指派到最近的质心,而指派到一个质心的点集为一个簇。然后,根据指派到簇的点,更新每个簇的质心。重复指派和更新步骤,直到簇不发生变化,或等价地,直到质心不发生变化。所以根据这个过程,我们需要在这个过程中关注两个问题:1.如何选择初始质心 2.怎么决定将点指派到哪个质心 3.怎么计算质心二.K均值需要注意的...

2020-02-10 14:48:53 3115

原创 关联分析(二)Apriori算法理解与介绍

Apriori算法理解与介绍一.基本概念1.基于先验原理的剪枝先验原理:如果一个项集是频繁的,则它的所有子集一定也是频繁的。相反,如果一个项集是非频繁的,则他的所有超集也是非频繁的。先验原理的理解也很简单,将支持度的公式列出来,我们可以发现,项集的支持度不会小于它的超集。基于这个原理,如果项集{x,y}是非频繁的,则我们不用去判断{x,y,z},因为肯定是非频繁的。这就是基于支持度的剪枝...

2020-01-29 22:43:02 1758

原创 关联分析(一)基本概念和内容简介

一基本概念

2020-01-27 16:13:42 1222

空空如也

空空如也

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

TA关注的人

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