![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
机器学习
文章平均质量分 81
胖胖大海
这个作者很懒,什么都没留下…
展开
-
BatchNorm与LayerNorm
BatchNorm批量归一化:批量归一化是对一个中间层的单个神经元进行归一化操作。计算第l层网络中每个神经元在Batch大小为N的样本上输出的N个结果,计算每个神经元输出的N个结果的均值和方差,然后使用均值和方差来对这N个输出结果做归一化,所以归一化的维度是在Batch上进行的LayerNorm层归一化:层归一化是对一个中间层的所有神经元进行归一化。计算第l层网络中的每个神经元在Batch中每个输入样本的输出,对于每个输入样本,计算所有神经元输出结果的均值和方差,使用均值和方差来归一化对于这个输..原创 2022-03-01 09:06:12 · 1564 阅读 · 0 评论 -
目标检测AP、mAP计算方法
关于AP和mAP的定义可以参考以下链接:参考:https://blog.csdn.net/qq_35916487/article/details/89076570参考:https://zhuanlan.zhihu.com/p/56961620代码来源:https://github.com/rbgirshick/py-faster-rcnn/blob/master/lib/datasets/voc_eval.pyAP(Average Precison)是计算具体某个类别的AP...原创 2021-09-03 19:44:18 · 7383 阅读 · 0 评论 -
分类模型confusion matrix混淆矩阵可视化
之前写过一篇关于在scikit-learn工具包中,可视化estimator分类模型分类结果的confusion matrix混淆矩阵可视化的方法,具体可以参考看这里,看这里。今天这篇介绍一下如何使用scikit-learn工具中提供的相关方法,可视化其他任意框架(比如深度学习框架)的分类模型预测结果的混淆矩阵。下面先说一下几个关键步骤:1、确定类别列表,类别列表和one-hot的编码顺序一致,这里使用cifar-10的类别列表作为演示的例子。classes =...原创 2021-08-28 10:41:38 · 15372 阅读 · 4 评论 -
Flask+Gunicorn部署深度学习Rest接口
使用Flask框架部署pytorch模型Rest接口是最简答快捷的方式,但如果服务要求服务具有更高的处理性能,比如高并发、低时延等,使用Flask部署可能就不太合适了。比如直接使用Flask框架提供的web服务启动Rest接口时,会有如下提示:提示说这个web服务可以用来开发测试,不要用来进行生产部署,生产部署可以使用WSGI服务进行替代。实际压测中也会发现,如果用Flask自带的web服务,性能极不稳定。对于上述问题,可以使用TorchScript对模型进行转换,然后使用C++进行调用,可原创 2021-04-20 09:02:34 · 602 阅读 · 0 评论 -
XGBoost算法个人理解
XGBoost算法仍然是一种使用加法模型和前向分布算法逐步逼近最优结果的Gradient boosting梯度提升方法。并且,XGBoost算法在目标函数中同时引入了正则化项(度量树模型的复杂度)用来降低模型过拟合的风险。损失函数其中,表示模型对于样本的预测损失,也叫经验误差。表示模型的复杂度,也叫结构误差,起到正则化的作用。这个损失函数的形式类似于加入L1或L2正则化的逻辑回归损失函数。二阶泰勒展开公式:对应用二阶泰勒展开公式,其中相当于,相当于 ,相当于,是一个函数.原创 2021-02-20 19:49:40 · 3794 阅读 · 0 评论 -
GBDT梯度提升之多分类算法个人理解
在之前的文章用已经介绍过了GBDT处理二分类问题的原理,也分析回答了包括如何将分类问题转换为回归问题来计算残差,GBDT残差拟合的是概率值还是学习的线性回归参数模型。详细关于GBDT解决二分类问题的原理推导详见GBDT梯度提升之二分类算法个人理解,建议在学习GBDT多分类之前先把GBDT进行二分类的原理弄懂,弄懂二分类之后多分类自然就理解了。GBDT解决多分类问题和解决二分类问题之间最主要的区别就在于损失函数,二分类使用的是逻辑斯蒂损失,多分类使用的是交叉熵损失函数。关于逻辑斯蒂损失和交叉熵损失的推导详原创 2021-01-29 21:34:27 · 2063 阅读 · 0 评论 -
交叉熵损失与极大似然估计
在训练分类模型时,通常使用交叉熵损失函数来定义模型的的预测概率与样本真实概率之间的差异。二分类1、二分类损失函数如下:其中是样本的真实概率标签0或1,是Sigmoid函数的计算结果,是样本的预测概率:是学习到的参数模型。2、由极大似然估计推导出二分类损失函数:计算参数使得取最大值。对上式进行对数变换,将乘法转换为加法:对上式取负号,将求最大值转换为求最小值,从而就可以用梯度下降等优化方法来求解。这也就是上面提到的二分类损失函数。多分类..原创 2021-01-28 16:23:32 · 1213 阅读 · 0 评论 -
GBDT梯度提升之二分类算法个人理解
未完待续原创 2021-01-27 17:39:58 · 2572 阅读 · 1 评论 -
GBDT梯度提升之回归算法个人理解
未完待续原创 2021-01-24 18:25:23 · 1708 阅读 · 3 评论 -
从提升树Boosting Tree过度到梯度提升Gradient Boosting
之前的文章提升树实例详解中说明了提升树方法有以下几个特点:1、损失函数:提升树方法使用平方损失或指数损失作为损失函数2、计算残差:提升树模型通过计算模型每一轮的残差,并将每一轮的残差作为新的训练集,在残差上训练新的模型参数,并使用加法模型得到最终的模型3、模型学习:加法模型和前向分布算法,提升树方法使用加法模型将学习到的各个子模型进行相加,并且使用前向分布算法将求解最优解的问题分解为若干部的迭代求解问题。提升树模型面临的问题:...原创 2021-01-23 21:55:42 · 637 阅读 · 0 评论 -
提升树Boosting Tree算法实例详解
在前面一片文章中展示了AdaBoost算法实例详解,这篇文章中来大致看一下提升树Boosting Tree算法的主要计算过程。提升树算法利用加法模型和前向分布算法实现迭代学习优化,当使用MSE或者指数损失函数时,通过计算第 K 轮迭代后的加法模型在训练集上的残差,优化损失函数在残差上的最小值,学习第 k + 1 轮新模型参数,并使用加法模型将新模型并入学习到的整个模型中。但是,当使用其他一般损失函数时,求解模型在训练集上的残差以及损失函数在残差的最优参数并不容易优化。然后提出梯度提升算法,这个在后面的文原创 2021-01-24 10:01:24 · 2033 阅读 · 0 评论 -
使用泰勒展开解释梯度下降方法参数更新过程
泰勒公式:一阶泰勒展开:梯度下降是逐步迭代,损失函数逐步降低的过程:为了满足上述不等式条件,取,则上式变为:因为是步长,,所以上述不等式成立。 从而得出梯度下降的参数更新公式:...原创 2021-01-17 16:37:20 · 1409 阅读 · 0 评论 -
使用scikit-learn中的metrics.plot_confusion_matrix混淆矩阵函数分析分类器的误差来源
在前面的文章中介绍了使用scikit-learn绘制ROC曲线和使用scikit-learn绘制误差学习曲线,通过绘制ROC曲线和误差学习曲线可以让我们知道我们的模型现在整体上做的有多好,可以判断模型的状态是过拟合还是欠拟合,从而确定后续的优化方向。但是绘制学习曲线的方法只能让我们从整体上了解模型的性能,并不能具体展示具体的误差来源。在吴恩达老师的视频中,多次强调误差分析的重要性,就是针对模型处理出错的样本进行重点研究分析,然后选择可能的优化方向。今天这篇短文就来讲一下针对分类问题,如何使用scikit-l原创 2020-07-12 11:09:09 · 15912 阅读 · 0 评论 -
kaggle波士顿房价预测,score=0.12986
作为一个机器学习小白,之前拿titanic数据集练过手,遇到波士顿房价数据集(81个特征)刚开始是有点懵,主要就懵在不知道如何下手处理数据,参考一些资料后,勉强跑通了流程,在此记录一下。大神请自动绕过。1、加载数据集数据集可以到kaggle官网下载%matplotlib inlineimport numpy as npimport pandas as pdfrom matplotlib import pyplot as pltdf_train = pd.read_csv("./dat原创 2020-07-04 12:53:16 · 1999 阅读 · 3 评论 -
文字检测算法CTPN网络模型及tensorflow版本代码介绍
网络结构:1、基础网络时VGG16,在conv5_3卷积之后的特征图上进行后续处理2、在conv5_3的特征图之上,使用3x3的卷积核进行滑窗处理,这就是Faster R-CNN中使用的RPN网络3、然后以特征图的行为单位,将每行内容分别输入到双向LSTM循环网络中,将双向循环网络的输出结果进行concat连接,每个LSTM输出的结果是128维向量,所以每个位置的输出结果是256维的向量,得到的特征图大小就是 H x W x 2564、在特征图上的每个(h, w)的位置上,后面连接一个全..原创 2020-06-25 14:02:17 · 1431 阅读 · 1 评论 -
pandas数据分析之绘图方法详解
之前介绍过matplotlib plot方法的详细用法,今天来介绍一下pandas中绘图方法,pandas中封装的绘图方法本质上还是调用了matplotlib的绘图方法。基础绘图方法plot,pandas中Series和DataFrame的plot方法是包装自matplotlib的plot方法# Series绘图ts = pd.Series( np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))原创 2020-06-25 12:39:21 · 7096 阅读 · 0 评论 -
使用scikit-learn计算分类器的ROC曲线及AUC值
在前面的博客中介绍了使用scikit-learn绘制分类器的学习曲线,今天介绍一下使用scikit-learn绘制分类器的ROC曲线,以及计算AUC的值。ROC曲线主要用于衡量二分类器的性能,当正负样本不均衡时,准确率和召回率不能合理度量分类器的性能。关于ROC曲线和AUC的计算scikit-learn工具包中主要提供了以下几个函数:1、roc_curve函数(只能用于二分类):根据模型预测结果(概率,置信度等)和样本真实标签,按照模型预测结果降序排序依次选择阈值,基于阈值计算fpr、tpr,基于f原创 2020-06-13 20:40:38 · 13277 阅读 · 1 评论 -
scikit-learn工具包中分类模型predict_proba、predict、decision_function用法详解
在使用sklearn训练完分类模型后,下一步就是要验证一下模型的预测结果,对于分类模型,sklearn中通常提供了predict_proba、predict、decision_function三种方法来展示模型对于输入样本的评判结果。说明一下,在sklearn中,对于训练好的分类模型,模型都有一个classes_属性,classes_属性中按顺序保存着训练样本的类别标记。下面是使用Logistic Regression分类器在为例,展示一下分类器的classes_属性。1、先看一下样本标签从0...原创 2020-06-13 12:33:29 · 48997 阅读 · 31 评论 -
scikit-learn工具包中常用的特征选择方法介绍
对于特征选择的作用在这里照搬《西瓜书》中的描述:常用的特征选择方法有以下三种(备注:以下代码采用Jupyter notebook编写,格式与传统稍有不同):1、过滤式特征选择简单理解就是过滤式特征选择通过选择与响应变量(目标变量)相关性度量(可能是相关系数,互信息,卡方检验等)高于设定阈值的特征。在scikit-learn工具包中,主要有以下几种过滤式特征选择方法:1)、移除方差小于指定阈值的特征特征的分布方差低,表示特征的分布集中度高,多样性较低,包含的信息量少...原创 2020-06-06 10:41:39 · 2954 阅读 · 0 评论 -
scikit-learn数值缩放、归一化、标准化常用方法
在训练机器学习模型时,为了均衡各类数值特征对于模型的影响程度,加快模型的收敛速度,通常要对数值特征进行缩放、归一化、标准化等操作,下面介绍一下scikit-learn工具包中常用的几种数值特征处理方法。1、normalize归一化normalize归一化可以沿着矩阵任意轴进行,如果选择l2归一化,axis=0,就是将每个元素除以元素所在列的l2范数。normalize函数的参数列表如下:参数 参数描述 X 需要归一化的矩阵 norm 使用哪种归一化方式,L1、L2、原创 2020-06-06 09:44:20 · 4319 阅读 · 0 评论 -
pandas透视表(pivot_table)和交叉表(crosstab)使用介绍
透视表pivot_table参数列表:透视表pivot_table实例:1.创建DataFramedf = pd.DataFrame({ "A": ["foo", "foo", "foo", "foo", "foo", "bar", "bar", "bar", "bar"], "B": ["one", "one", "one", "two", "two", "one", "one", "two", "two"], "C": ["small", "large", "l原创 2020-06-02 19:05:59 · 1761 阅读 · 0 评论 -
matplotlib plot函数使用详解
以上图片中的内容来自于plot函数的帮助文档。原创 2020-05-26 19:34:59 · 3229 阅读 · 0 评论 -
numpy随机数函数randn和rand使用方法
np.random.randn()使用方法:使用help(np.random.randn)查看randn方法的帮助文档如下:要点:1)、如果传入的参数为空,则randn返回一个浮点数2)、如果传入的参数不为空,则依据传入的参数,返回对应shape形状的随机浮点数矩阵,且矩阵元素服从标准正态分布(均值为0,方差为1)3)、当传入参数调用randn方法时,也可以调用与之等价的方法np.random.standard_normal((d0, d1, ...))示例一(randn只接受一原创 2020-05-25 19:34:57 · 3920 阅读 · 0 评论 -
AdaBoost算法实例详解
AdaBoost算法其实很精炼,算法流程也好理解,但是看了算法的解释版本之后,什么前向分布算法,什么指数损失函数之后有点迷糊了。抛开这些理论性的推导不谈(其实是因为能力有限),通过例子直观的了解AdaBoost算法的计算过程。简要叙述一下AdaBoost算法的主要过程:AdaBoost为每个数据样本分配权重,权重符合概率分布,初始权重符合均匀分布,串行训练M个模型,依据每轮训练的模型的错误率(被误分类样本的权重之和)确定当前模型在最终模型中的权重,以及更新训练样本的权重,误分类样本权重升高,分类正确原创 2020-05-23 14:15:10 · 23735 阅读 · 16 评论 -
matplotlib中cla/clf/close用法及相关清除效果
在使用matplotlib画图时,画完图之后需要进行一定的清理工作,否则后续画图的结果中可能混入前一幅图的数据,或者造成频繁创建绘图对象。下面解释一下matplotlib中的相关清理操作和效果。主要包括以下方法:1、gca获取当前的axes,cla清理当前的axes2、gcf获取当前的figure,clf清理当前的figure3、close,关闭figure1、使用matplotl...原创 2020-04-26 10:21:57 · 15941 阅读 · 0 评论 -
常用向量空间距离计算的几种方法
常用向量空间距离包括:1、欧式距离2、余弦距离和余弦相似度3、曼哈顿距离……下面介绍一下常用的计算方法:1、计算向量的余弦距离2、使用scipy计算常用向量空间距离3、使用sklearn计算常用向量距离...原创 2020-04-26 10:06:07 · 7234 阅读 · 0 评论 -
Numpy扩充矩阵维度(np.expand_dims, np.newaxis)和删除维度(np.squeeze)的方法
在操作矩阵的时候,不同的接口对于矩阵的输入维度要求不同,输入可能为1-D,2-D,3-D等等。下面介绍一下使用Numpy进行矩阵维度变更的相关方法。主要包括以下几种:1、np.newaxis扩充矩阵维度2、np.expand_dims扩充矩阵维度3、np.squeeze删除矩阵中维度大小为1的维度np.newaxis,np.expand_dims扩充矩阵维度:import n...原创 2020-04-26 09:52:06 · 37751 阅读 · 3 评论 -
Numpy实现矩阵转置的几种方法
在矩阵操作中,经常需要对矩阵进行转置,或者需要交换矩阵的轴,下面介绍一下使用Numpy完成矩阵轴数据交换的几种方法。主要包括以下几种方法:1、.T转置,适用于1-D,2-D矩阵2、np.transpose,适用于一次同时交换多个(大于两个)轴数据3、np.swapaxes,一次只能交换两个轴的数据下面通过一个具体例子感受以下具体的转换过程和转换结果。import numpy ...原创 2020-04-26 09:37:54 · 26991 阅读 · 0 评论 -
使用pandas和sklearn对分类特征进行OneHot编码的几种方法
进行OneHot编码常用的几种方法:首先介绍一下将分类属性数字化的方法。构造带有分类特征的数据集。方法一:使用sklearn中的LabelEncoder将分类特征数字化方法二:使用pandas的factorize()函数将分类特征数字化下面介绍一下将分类特征进行OneHot编码的几种方法。方法一:先LabelEncoder,再OneHotEncoder...原创 2020-04-17 19:44:49 · 6572 阅读 · 0 评论 -
nmslib完成大规模高维向量查找(如大规模人脸识别)
待续原创 2020-03-28 14:54:12 · 4036 阅读 · 5 评论 -
sklearn模型过拟合、欠拟合分析,learning_curve绘制学习曲线
以iris数据集合SVM分类器为例,使用sklearn的learning_curve函数绘制分类器的学习曲线,并根据学习曲线判断模型的状态,是欠拟合还是过拟合。1、加载iris数据集2、划分训练集和测试集3、设置超参数C=0.05, gamme=0.1训练SVM模型交叉验证结果准确率0.86,结果好像还不错!!!4、使用learning_curve绘制分类器学习曲线...原创 2020-03-17 15:51:22 · 6155 阅读 · 6 评论 -
sklearn决策树完成卫星数据集分类
1、加载卫星数据集2、分层采样划分训练集和测试集使用交叉验证,所以不单独划分验证集3、使用默认参数,交叉验证决策树的分类效果4、网格搜索决策树最佳超参数5、基于选择的最佳超参数,训练决策树模型,并在测试集上验证分类效果分类准确率由默认参数的0.79提升到0.85...原创 2020-03-16 16:38:14 · 641 阅读 · 2 评论 -
sklearn中cross_val_score、cross_val_predict的用法比较
cross_val_score:得到K折验证中每一折的得分,K个得分取平均值就是模型的平均性能cross_val_predict:得到经过K折交叉验证计算得到的每个训练验证的输出预测方法:cross_val_score:分别在K-1折上训练模型,在余下的1折上验证模型,并保存余下1折中的预测得分cross_val_predict:分别在K-1上训练模型,在余下的1折上验证模型,并将...原创 2020-03-12 11:02:36 · 28230 阅读 · 8 评论 -
python高效kmeans算法实现
本篇基础代码转载自天元浪子的技术博客。1、kmeans聚类,使用numpy计算向量之间欧氏距离def fast_kmeans_numpy(ds, k): """k-means聚类算法 k - 指定分簇数量 ds - ndarray(m, n),m个样本的数据集,每个样本n个属性值 """ m, n = ds.shap...转载 2020-02-18 14:10:17 · 1409 阅读 · 4 评论