
Machine Learning
文章平均质量分 77
ybdesire
Talk is cheap. Show me the code.
展开
-
不同文本相似性度量方法的效率测试与排名
本文测量strsimpy中的一些相似性度量方法的性能,排名从计算速度最快到最慢原创 2024-07-12 23:15:00 · 464 阅读 · 0 评论 -
conda create 报错 Connection to repo.anaconda.com timed out 的修复
conda create 环境时,报错 Connection to repo.anaconda.com timed out 的修复方法原创 2024-04-22 23:45:00 · 4166 阅读 · 1 评论 -
理解大模型训练中的 Pre-Training,Fine-Tuning,In-Context Learning,Reward Modeling,PPO,DPO,RLHF
大模型训练中的 Pre-Training,Fine-Tuning,In-Context Learning,Reward Modeling,PPO,DPO,RLHF的含义与区别。原创 2024-03-09 23:30:00 · 5846 阅读 · 0 评论 -
OpenAI接口Completion和ChatCompletion的区别与使用方法
OpenAI有两个重要的接口,一个是`openai.Completion.create`,另一个是`openai.ChatCompletion.create`。那么问题来了,这两个接口有什么区别呢?还有他们使用的参考代码是什么样呢?原创 2023-10-14 17:45:20 · 12828 阅读 · 1 评论 -
用pyinstaller打包LGBM模型为ELF/EXE可执行文件
写好的python代码和模型,如果需要做到离线部署、运行,就必须要将代码和模型打包为可独立运行的可执行文件,本文讲解具体步骤、两种打包方式的区别和相关经验。原创 2023-10-03 21:13:45 · 820 阅读 · 0 评论 -
详解EMBER数据集中对PE文件提取ByteEntropyHistogram特征
EMBER对PE文件提取了广泛被使用的 ByteEntropyHistogram 特征。这个特征的本质上是利用滑动窗口的过程,对各个窗口中二进制数据做模糊后,求取其直方图的信息熵,在不同信息熵值的维度下,对各个窗口中数据直方图向量值累加的结果。原创 2023-08-04 22:39:04 · 1024 阅读 · 0 评论 -
详解二进制文件信息熵Entropy的计算
详细讲解信息熵的计算过程细节,以及如何用python编程求取PE文件的entropy(熵,信息熵)原创 2023-02-07 22:18:45 · 4356 阅读 · 0 评论 -
FeatureHasher使用方法详解
FeatureHasher输入不同类型数据(dict,int,int list,string,string list,pair)的使用方法与代码示例。原创 2023-01-10 22:41:21 · 2273 阅读 · 0 评论 -
vaderSentiment实现文本情感分析
vaderSentiment(参考1)是一个`基于词典和规则`的情感分析工具,作者专门对社交媒体信息做过调优,并在2014年发表过一篇文章(参考2),目前文章的引用量已经高达2680了(截止到20211105)。原创 2022-02-14 23:06:53 · 8205 阅读 · 0 评论 -
sklearn的LinearRegression源码理解
sklearn的LinearRegression源码,会首先对数据做预处理(X,Y都减去列均值),然后再用numpy中lstsq求解线性回归原创 2022-01-26 21:28:52 · 3430 阅读 · 1 评论 -
用github的Actions来自动训练AI模型(包含YAML的详细配置过程)
github的Actions功能(见参考1),提供了CI的workflow功能,利用该功能训练模型。原创 2021-12-16 23:10:45 · 1852 阅读 · 0 评论 -
特征重要性计算之LOFO与FLOFO
1. 引入特征的重要性,即feature importance,使用sklearn自带的一些模型,就能计算出来。比如RandomForest取feature_importance的用法如下:from sklearn.ensemble import RandomForestClassifierfrom sklearn.datasets import load_breast_cancer, load_irisdata = load_iris()x_data = data.datay_data =原创 2021-11-03 23:25:07 · 1014 阅读 · 0 评论 -
F1,AUC的区别与选择
1. 引入评价一个分类器模型的效果,可以用交叉验证,也可以根据场景将数据切分为训练集、测试集,评价指标有Accuracy,F1-Value,AUC等。那我们该如何选择评价指标呢?不同场景下选择哪个指标更合理呢?2. 原理区别Accuracy准确率准确率高的模型,不一定是好模型比如癌症预测,100个人中只有一个病人,若分类器都输出0,准确率为99%,但我们都知道这无法找到任何一个癌症病人所以大部分场景,都不能直接根据Accuracy来评价模型F1-Value综合考虑了Prec原创 2021-10-06 23:14:37 · 4256 阅读 · 0 评论 -
LightGBM参数说明与参数调优建议
1. 引入从识别率上来说,LGBM并不逊色于XGB和RF;LGBM在笔者很多场景下都优于CatBoost。从工程化上来说,LGBM的模型size小、训练速度快、支持并发训练、兼容sklearn接口、支持GPU训练,这都使得LGBM的工程化能力更强。和RF比较,在准确率相当的前提下,LGBM的size也是比RF小很多倍(LGBM=4M,RF=100MB)。所以接下来写一下LGBM的调参思路, LGBM的参数以参考1中的接口LGBMClassifier命名为准(兼容sklearn的接口)。2. 调参重原创 2021-09-23 23:11:35 · 10271 阅读 · 0 评论 -
RandomForest中的包外误差估计out-of-bag (oob) error estimate
1. 引入从RandomForest的鼻祖Breiman的comments(参考1)中,可以看到他说过:对于RandomForest的validation,没有必要像其他模型一样做cross-validation了,可以直接用RandomForest在内部就提供了out-of-bag (oob) error estimate,用这种方法就可以看出RF的训练效果了。那我们该怎么理解out-of-bag (oob) error estimate呢?2. 原理:oob error estimate首先解释原创 2021-09-18 23:04:31 · 13766 阅读 · 9 评论 -
RandomForest的优点
1. 引入最近需要做表格数据(特征可读,特征多300+个,每个特征只有0/1两种值)分类,就尝试了比较适合表格数据的模型,比如RandomForest(后面缩写为RF), XGBoost(后面缩写为XGB), LightGBM, CatBoost。按理来说,1995年贝尔实验室提出的RandomForest是最老的模型;XGBoost是后来2014年出现的;2017年微软提出的LightGBM进一步提升了XGB的训练效率降低了内存消耗;2017年,俄罗斯最大的搜索引擎 Yandex也开发了CatBoos原创 2021-08-31 23:02:37 · 471 阅读 · 0 评论 -
自动机器学习框架auto-sklearn基础编程案例
1. 引入德国科学家在2015年时,在NIPS会议上发表了关于“自动机器学习框架”的方法(参考2),并开源了一个叫做auto-sklearn的项目(参考1)。在2020年,他们又对这个auto-sklearn框架进行了优化(参考3)。初步看来,auto-sklearn能自动选择sklearn中不同模型,并最终找出最优的ensemble多模型集成学习方案。2. 安装参考4中给出了安装方法,需要python3.6以上的版本。ubuntu上的安装步骤sudo apt-get install bui原创 2021-08-03 23:36:23 · 1305 阅读 · 1 评论 -
从keras中SGD源码理解基于时间的学习速率衰减decay策略
1. 引入在求解神经网络优化问题中,学习速率不应该是固定不变的。最好的学习速率,应该在训练开始时偏大,这样能加快训练速度,并在训练过程中逐步减小,这样能更好的逼近最优点。所以,在参考1中,我们知道了有SGD, Adam, Adadelta 等这些非常经典的优化算法。2. decay从参考2的中,我们能看到如何调节SGD, Adam等优化器的参数。同时我们也发现了一个参数叫做decay,它表示学习速率的衰减值。decay可以用于SGD, Adam, RMSprop, Adagrad, Adadel原创 2021-07-22 23:15:57 · 1403 阅读 · 1 评论 -
从源码理解pickle和joblib加载dict的性能不同
1. 引入最近有发现,pickle在加载(load)比较大的dict时,速度是比joblib快的。上网查了下pickle和joblib的区别,发现写这个主题的内容比较少。所以本文试对“pickle和joblib在加载dict时的快慢区别”这个主题进行了一些测试与研究。2. 验证 pickle 与 joblib 加载 dict 快慢测试使用如下代码,首先建立一个比较大的dict,并用pickle与joblib分别进行dump/load测试。import timeimport pickleimp原创 2021-06-21 22:06:36 · 1038 阅读 · 0 评论 -
详解如何获取深度学习模型中间层的输出值
1. 引入深度学习模型,大都是多层的网络,各个层可能各有不同(Dense, Dropout, Flatten, Activation, BatchNormalization, GlobalAveragePooling2D,Conv2D, MaxPooling2D, ZeroPadding2D,LSTM)。有时候我们需要获取多层网络中某一层的输出值,用于做可视化,或者Embedding。下面就以一个例子为例说明如何获取神经网络某一层的输出值。2. 构建网络,各层加上name本文构建的多层网络模型如下原创 2021-03-26 23:07:14 · 8073 阅读 · 4 评论 -
相似图片搜索中的均值哈希(aHash)
1. 引入参考1中介绍了相似图片搜索的基本原理,借助milvus(参考2)这样的相似性搜索引擎,我们可以非常快速的实现相似性搜索。但实现搜索之前,需要把图片转换为特征向量。本文介绍的均值哈希,就是图片的一种特征。2. 均值哈希的计算过程读入图片并转换为灰度图import numpy as npimport cv2img = cv2.imread('Alyson_Hannigan_200512.jpg', cv2.IMREAD_GRAYSCALE)# IMREAD_GRAYSCALE, IM原创 2021-02-23 22:01:59 · 1262 阅读 · 0 评论 -
使用keras.layers.Reshape实现不同维度任意层之间的对接
1. 引入keras提供了很多不同的layer给我们使用,常用的比如Dense, Dropout, Flatten, Activation, BatchNormalization, GlobalAveragePooling2D,Conv2D, MaxPooling2D, ZeroPadding2D,LSTM等等。我们使用这些layer,像搭积木一样逐层链接,就能实现深度学习模型。但是,keras提供的layer都是传统的layer。有一些比较新的layer,keras是不能那么快提供给我们用的。所以一些原创 2021-02-18 23:31:59 · 13689 阅读 · 2 评论 -
Seq2Seq模型中的集束搜索(Beam Search)
1. 引入用Seq2Seq模型开发翻译系统时,假设输入一句法语,输出英文。在Decoder输出部分,选择不同的单词,输出(翻译)的结果也会不同。这里用下图来举例说明:一个法语句子,被Seq2Seq模型翻译为不同的4句英文,我们该选择哪个结果作为最终结果呢?上图中,给了一个公式,式中的x表示法语句子,y表示各个单词组成的最终的英文句子,不同的y的组合表示不同的翻译,即y1~yn表示单词序列。解决这个问题的关键,就在于找到合适的y值,使得图中的公式值最大化。但是具体怎么做呢?下面我们介绍一种方法原创 2021-01-23 23:13:43 · 555 阅读 · 0 评论 -
详细解读Google论文:Google在Malware Hunting领域的新成果
引入最近仔细通读了Google最新的paper,《Spotlight: Malware Lead Generation at Scale》,这是Google在2020年12月份发表在Annual Computer Security Applications Conference (ACSAC) 会议上的论文。ACSAC是计算机安全领域的很好的会议,看到有的分析说是计算机安全排第二梯队的顶会。这是个比较有个性的会议,它上面的论文和学术界的其他会议区别很大。这里论文都是以应用为主的,文章内容注重实践性、工程原创 2021-01-01 23:11:25 · 602 阅读 · 0 评论 -
大规模向量相似度检索方案
1. 引入有很多指标可以用来衡量向量的相似度,比如余弦距离、汉明距离、欧氏距离等。在图像、视频、文本、音频领域,做向量的相似性搜索,有很多应用点,比如:图像识别,语音识别、垃圾邮件过滤。这种基于相似度检索的方案,不同于机器学习模型的方案。比如用有监督学习模型来做人脸识别,模型的可解释性较低,而基于相似度搜索来做人脸识别,可解释性就更高。但是,当数据量很大,比如几千万张图片,要做相似度搜索,就比较困难了。穷举法固然可行,但非常耗时。针对这种场景,本文主要介绍方案级别的信息。2. 常用方案通用的向量原创 2020-12-21 23:07:43 · 2936 阅读 · 0 评论 -
Seq2Seq模型中的贪心搜索(Greedy Search)
1. 引入用Seq2Seq模型开发翻译系统时,假设输入一句法语,输出英文。在Decoder输出部分,选择不同的单词,输出(翻译)的结果也会不同。这里用下图来举例说明:一个法语句子,被Seq2Seq模型翻译为不同的4句英文,我们该选择哪个结果作为最终结果呢?上图中,给了一个公式,式中的x表示法语句子,y表示各个单词组成的最终的英文句子,不同的y的组合表示不同的翻译,即y1~yn表示单词序列。解决这个问题的关键,就在于找到合适的y值,使得图中的公式值最大化。但是具体怎么做呢?下面我们介绍一种方法:原创 2020-12-06 23:13:29 · 1506 阅读 · 0 评论 -
理解词嵌入除偏
1. 引入机器学习已经被用到各行各业做辅助决策了,甚至是制定极其重要的决策。所以,我们应该尽可能的确保它不受非预期形式偏见的影响,比如性别歧视、种族歧视等等。下面介绍一种减少或消除这些偏见的影响,以消除“性别偏见”为例来说明算法的具体过程。2. NLP中性别偏见的例子在NLP中,由于语料的原始作者写作时,可能会自带自己的偏见,所以训练模型得到的词嵌入也会学到这种偏见。比如下图中的一些NLP任务,通过词嵌入,得到的结果(红框中)是具有明显的偏见的。训练集中的原始语料,是词嵌入带有性别歧视、种族歧视原创 2020-11-08 23:40:35 · 768 阅读 · 0 评论 -
Word Embedding与analogy reasoning(词嵌入与类比推理的过程)
1. 引入Word Embedding是"词嵌入"的意思,这是语言表示的一种方式。它可以让算法理解一些类似的词。简单理解,就是词向量,代替one-hot编码做词向量。词嵌入比one-hot编码有更多优点:词嵌入可以用一个低维向量来表示词向量,而one-hot编码一般维度一般都比较高词嵌入可以表征词的相似性,语义上相似的词,其词向量也比较接近通用性强,在分类,回归,NER等应用中,都可以使用词嵌入表示的词向量,还有一个很常见的应用,是 analogy reasoning (类比推理原创 2020-08-06 23:43:14 · 1016 阅读 · 0 评论 -
详解softmax
1. 引入在分类问题中,我们常用softmax和sigmoid作为神经网络输出层的激活函数,这样可以让网络输出样本属于各个类别的概率值。在二分类问题中,常用sigmoid。多分类问题中,使用softmax,它能把多个神经元的输出,映射到(0,1)区间内,可以把各个输出值看成概率来理解,即是样本属于某一个类别的概率,从而做到多分类。简单来说,softmax就是能把一组数据,转换为各个数据对应的概率值,如下所示:数据:[-1.1, -4.9, 1.2, -2.4, 2.2, 2.4]softmax输原创 2020-07-10 21:58:24 · 1322 阅读 · 0 评论 -
理解词嵌入WordEmbedding
1. 引入词嵌入,英文为 Word Embedding,这是语言表示的一种方式。它可以让算法理解一些类似的词。2. 词表示:one-hot我们可以用one-hot向量来表示词,如下图所示。这种表示方式,我们需要首先获取一个字典,比如字典中有100000个词。对每一个词,都得到一个向量,其中该词对应位置上置一,其他位置置零。比如man这个词位于字典的第5391个位置,则我们为这个单词创建一个100000维度的向量,其中第5391个位置处值为1,其他位置值为0.这种方法的缺点,是它把每个词孤立了原创 2020-06-19 23:19:31 · 561 阅读 · 0 评论 -
深层循环神经网络
1. 引入我们学过的序列模型,RNN, GRU, LSTM,以及双向的RNN, GRU, LSTM,他们每一个模型都可以独当一面。如果我们想学习更复杂的函数,通常我们就会把多个RNN堆叠到一起,构建更深层次的网络。接下来我们就讲述如何构建深层次的循环神经网络。2. 深层RNN原理见下图图中左边是传统的多个全连接层组成的深层网络,把RNN按照这种模式一层一层组合在一起,得到右边的深层RNN网络。在做计算时,比如下图中a22隐层,需要其他时刻与其他层的输出作为输入,所以计算量是很大的。3.原创 2020-05-19 23:01:12 · 706 阅读 · 0 评论 -
双向RNN原理
1. 引入我们之前已经了解了RNN中的GRU[2]和LSTM[3]。怎么样才能进一步优化RNN这样的模型呢?就是使用双向RNN,它能使得我们在序列的某点处,不仅获取之前的信息,还能获取将来的信息。将来的信息是什么意思呢?为什么根据之前的信息还不足够网络做决策?我们看下面的一个例子:用传统RNN做NER,判定某个单词是否为人名。例子中给出的两句话,第一句话中的Teddy不是人名(是泰迪熊...原创 2020-05-05 22:44:01 · 7563 阅读 · 1 评论 -
RNN中的门控循环单元GRU
1. RNN隐层单元结构可视化下面是一个基本的RNN隐层单元结构:其中,a是上一个时刻的激活函数输出值,x是当前时刻的输入,y是当前时刻的输出。要理解这个单元结构,需要注意2点:a与x结合,通过激活函数的作用后,有两个分支,一个分支作为下一个时刻的输入a另一个分支通过softmax作用后,作为当前时刻的输出y2. GRU单元中的符号GRU(Gated Recurrent Uni...原创 2020-04-07 21:52:24 · 1938 阅读 · 0 评论 -
RNN中的梯度消失与梯度爆炸
1. 引入我们可以在[1]中,看到RNN的结构,如下图所示。假设我们输入两个句子如下:The cat, which already xxx yyy zzz …, was full.The cats, which alrady xxx yyy zzz …, were full.这两句话中,“xxx yyy zzz …”表示句子中间有很长的文本,此处略去。我们只看单数与复数,最后一个逗...原创 2020-03-17 20:50:35 · 1667 阅读 · 1 评论 -
RNN的5种典型结构
引入我已经在文章[1]中介绍了一些序列模型的应用,比如“中文翻译为英文”,“NER命名实体识别”,“歌词生成”,“情绪识别”。也在文章[2]中介绍了RNN结构的基本原理。那问题来了,要实现“中译英”和“歌词生成”,我们选用的RNN结构是一样的吗?RNN有哪些典型的结构,分别对应哪些应用场景呢?RNN的5种典型结构首先,直接给出RNN的5中典型结构,如下图。然后我们依次讲解。1. O...原创 2020-01-27 21:49:03 · 4715 阅读 · 0 评论 -
理解RNN的结构+特点+计算公式
引入在某一些情况下,我们是无法使用标准的全连接神经网络的。比如,预测句子中哪几个单词是人名,如果使用标准的全连接神经网络,网络结构如下:如果使用这种结构,会存在两个问题输入句子长度和输出向量的维度,可能会不一样。对不同的样本,其输入/输出维度都不同。当然你可以采用zero padding,将每个句子都填充到最大长度,但仍然不是一种很好的方式改结构无法共享从文本不同位置上学到的...原创 2019-12-08 21:39:23 · 9650 阅读 · 3 评论 -
序列模型用途介绍及数学符号
1. 序列模型用途之所以要用到序列模型,是因为,在现实生活中,我们的很多数据都具有连续的关系,比如语音识别:根据音频数据,识别为语言文本音乐生成:给定0个或某几个音节,自动生成歌曲情感分析:根据一段文本,来判断其情绪DNA序列分析:从给定的DNA序列中,标记出值得关注的某一段序列机器翻译:德语文本转英文视频行为识别:根据视频中一段连续的画面,判断画面中人的行...原创 2019-11-07 21:52:30 · 1705 阅读 · 0 评论 -
快速搭建python机器学习开发环境(Windows)
一键安装python机器学习开发环境原创 2016-03-23 20:18:12 · 5251 阅读 · 2 评论 -
在stackoverflow回答被认可
自己在stackoverflow的回答被Accept原创 2016-07-11 22:26:41 · 1373 阅读 · 0 评论 -
Python大数据处理代码性能优化
如何加速你的python程序原创 2016-07-25 22:46:49 · 5455 阅读 · 0 评论