机器学习
文章平均质量分 79
机器学习在一些项目中的应用,以及一些机器学习算法的原理
Scc_hy
不断进取的攻城狮
展开
-
机器学习_预测概率校准
我们在建模时通常根据准确性或准确性来评估其预测模型,但几乎不会问自己:“我的模型能够预测实际概率吗?但是,从商业的角度来看,准确的概率估计是非常有价值的(准确的概率估计有时甚至比好的精度更有价值)。来看一个例子。AB两个模型的AUC一样。但是根据模型A,你可以通过推荐普通马克杯来最大化预期的利润,然而根据模型B,小猫马克杯可以最大化预期的利润。在像这样的现实应用中,搞清楚哪种模型能够估算出更好的概率是至关重要的事情。原创 2023-06-14 22:31:21 · 3122 阅读 · 4 评论 -
机器学习_LightGBM callback示例
lightgbm在train的时候有callback的接口,我们需要将训练过程的损失下降情况进行记录就需要这个接口。本文笔者就是以记录训练迭代过程的损失为出发点,写一个简单的lightgbm中callback的使用方法。原创 2022-10-18 22:05:31 · 4596 阅读 · 5 评论 -
机器学习_kedro+mlfow使用简单示意
kedro用来构建可复用,易维护,模块化的机器学习代码。相比于Notebook的超级灵活性,便于探索数据和算法, Kedro 定位于解决版本控制,可复用性,文档,单元测试,部署等工程方面的问题。原创 2022-10-15 16:52:56 · 808 阅读 · 0 评论 -
机器学习_kedro框架使用简单示意
kedro用来构建可复用,易维护,模块化的机器学习代码。相比于Notebook的超级灵活性,便于探索数据和算法,Kedro 定位于解决版本控制,可复用性,文档,单元测试,部署等工程方面的问题。原创 2022-09-05 23:42:58 · 1344 阅读 · 1 评论 -
机器学习_LGB调参汇总(开箱即食)
在数据层面的一些正负采样,业务层面一些数据筛选,以及异常值的处理后。我们进行模型训练,同时需要对模型进行参数的调整,以提升模型的精度。笔者就一些现有的调参框架进行汇总。原创 2022-08-08 23:20:22 · 3455 阅读 · 5 评论 -
机器学习_XGB模型训练内存溢出解决方案
在我们的机器学习任务之中,当数据量非常之大的时候。我们会在两个地方遇到内存溢出的情况。数据读取与处理模型训练之前笔者有写过数据读取与处理解决内存溢出的相关处理方案(核心是用生成器分批处理)可以看笔者之前的文章:机器学习预处理效率及内存优化(多进程协程优化)本文主要讲解如何处理xgb模型训练的时候内存溢出的情况一、内存数据转libsvm文件主要是将数据转成生成器,然后分批以csr_matrix形式压缩写入相应文件。import xgboost as xgbimport osfrom t原创 2021-11-15 23:55:18 · 2869 阅读 · 0 评论 -
机器学习_LGB自定义huber loss函数
很多时候为了达到更好的训练效果我们需要改变损失函数原创 2021-11-08 22:50:27 · 2561 阅读 · 0 评论 -
机器学习_特征重要性之Shapely Value
很多时候我们输出的特征重要性gain值和cover值不一致,会导致些许困惑(到底那个特征最为重要,那个特征重要性要靠前)。所以,我们考虑用shapely value 来衡量特征的重要性,它即考虑了特征的cover,同时也考虑了gain值,且输出结果更加的符合业务直觉。在XGB中预测接口同样配置了样本shap值的输出选项(xgb_model.predict(te_mt, pred_contribs=True))。因此本文主要简单梳理下树模型的Shap value值计算一、Shapely Valuesha原创 2021-09-12 23:45:10 · 4549 阅读 · 0 评论 -
机器学习_Xgboost手推重温
近段时间和同事交流XGB的时候,突然发现自己对它的一些细节居然已经记不清楚了。好歹几年的挖掘人,生感惭愧,于是就准备将xgboost 重新手推一遍。一、XGB手推1.1 xgb核心框架0- 定义损失函数1- 计算损失函数导数g0, h02- 基于Gain值,贪婪生成树(这里简单用了一层决策树)3- 计算分支的平均预测值w4- 计算当前迭代的预测值 y_hat = y_hat_before_cumsum + w * lr5- 计算更新g0, h06- 重复1-51.2 损失函数与Gain原创 2021-09-07 01:56:50 · 375 阅读 · 0 评论 -
机器学习_Adaboost(重温&手推)
笔者这次是温习和回顾集成算法,所以又自己手推实现了一遍Adaboost。之前有两篇关于Adaboost的文章:一篇是初学的时候的手推:机器学习_手写算法:Adaboost简单实现一篇是基于《机器学习实战》一书写的:机器学习_AdaBoost(机器学习实战)本次的不同之处有两点:温习而非初学sklearn接口方式推导一、集成学习及AdaBoost的优缺点1.1 关于集成学习在《多样性团队》一书提及了一个研究领域——感知盲点。每个人都通过某种参照框架来感知和理解世界,但我们看不到自己的参原创 2021-07-25 14:39:45 · 1076 阅读 · 1 评论 -
机器学习_基于arctan的逻辑回归
一、主要内容最近看到两篇文章,写用arctan 来优化relu激活函数的文章。《基于Arc-LSTM的人职匹配研究》《基于ArcReLU函数的神经网络激活函数优化研究》就想着其实可以将逻辑回归的sigmoid函数换成标准化后的arctan函数,同样可以进行二阶求导,梯度下降。二、主要思路详细的简单脚本可以参考笔者的 github:Arctan_logistic 逻辑回归简单讲就是单层全连接层,所以激活函数可以进行替换def activation(linear_x, method='sig原创 2021-06-29 01:54:53 · 735 阅读 · 0 评论 -
机器学习预处理效率及内存优化(多进程协程优化)
一、目的在我们进行机器学习数据预处理的时候,为了加快数据的预处理,我们很多时候会用并行来进行加速。但是同时会增大内存的开销(甚至引起OOM)。本文的目的就是为了解决在资源有限的情况下,加速数据预处理。二、为什么最终优化效率要用并行一个流程、或者一个函数或者一个项目,可以划分成2部分,可优化部分和不可优化部分。按照Amdal's Law 可以依据上图计算出加速比。S=Told/Tnew=1(1−a)+akS=T_{old}/T_{new} = \frac{1}{(1-a) + \frac{a}{k原创 2021-04-18 15:59:37 · 950 阅读 · 2 评论 -
时间序列_python自相关系数(ACF)绘图
一、概述自相关函数,用来度量同一事件在不同时期之间的相关程度,或者说是一个信号经过类似于反射、折射等其它情况的延时后的副本信号与原信号的相似程度。R(τ)=E[(Xt−μ)(Xt−τ−μ)]σ2R(\tau) = \frac{E[(X_t - \mu)(X_{t-\tau} - \mu)]}{\sigma ^ 2}R(τ)=σ2E[(Xt−μ)(Xt−τ−μ)]简单讲就是比较不同时间延迟两个序列的相似程度,就好比下图蓝色框内序列和红色框内序列之间的相关性。二、python实现&s原创 2021-04-11 01:45:36 · 11306 阅读 · 0 评论 -
机器学习_高偏差(High bias)与高方差(High vars)
笔者之前写过篇有关学习曲线和过拟合的,里面表述不是非常清晰。最近刚刚刷完吴恩达老师2017的机器学习课程,又看到吴恩达老师的深度学习中1.5节。 所以,就来了兴致,准备把高偏差和高方差梳理下记录下来。一、模型训练过程中的高偏差和高方差一、模型结果的高偏差和高方差本质是衡量可以用两个图来非常直观的感受一下高偏差(High bias)对于高偏差的模型增加训练数据并不会改善模型的效果高方差(High vars)对于高方差的模型增加训练数据会在一定程度上改善模型的效果二、改善策略改善高方差.原创 2021-01-20 01:56:20 · 4211 阅读 · 0 评论 -
机器学习_sklrean-决策树_iris数据详解
0、基础构建利用sklearn 的鸢尾属植物数据编写简单决策树。首先是获取数据(干净数据不需要处理),然后需要对规则进行可视化。这一步需要配置 搭建Graphviz环境1、鸢尾属植物数据集描述这个数据集大家肯定熟悉的不能在熟悉了, 但是这三类植物图片不是所有人看过的(笔者也是)。所以笔者将几个预测目标的图片汇总如下:从图片就可以看出 Iris Setosa(山鸢尾) 和 Iris Ve...翻译 2018-11-03 19:49:34 · 1402 阅读 · 0 评论 -
机器学习技巧_绘制简单分类器边界(决策树&SVM)
该绘制方法仅适用于因变量个数为两类的分类器。可以用该绘图方法,直观的了解sklearn中分类器的参数的作用1 准备工作提取 iris数据中的有效特征from sklearn.datasets import load_irisfrom sklearn.tree import DecisionTreeClassifierdtree = DecisionTreeClassifier(m...原创 2019-06-13 17:27:32 · 7277 阅读 · 0 评论 -
机器学习_手写算法:Adaboost简单实现
Adaboost 是基于错误率迭代,增加错误分类的权重,加重优分类器的权重。统计学习方法Adaboost例题假设分类器有 x <v 或者 x>v产生,其阈值v使该分类器在训练集上分类误差最低。试用Adaboost算法学习一个强分类器1、首先观察数据(由于是二维的可以直接画图)import matplotlib.pyplot as pltplt.style.use('g...原创 2018-09-27 17:47:50 · 1211 阅读 · 0 评论 -
机器学习_一般降维思路
1、业务角度业务 从业务角度角度梳理因变量(x),提取几个重要变量2、相关性算法 计算pearson相关系数计算相关矩阵,将十分弱相关的因变量去除# R 3.4#state.x77自带数据包数据 states <- state.x77[,1:6]cor(states,method = 'pearson')# python 3.6import pandas as pd#载入数据d原创 2018-04-07 19:44:58 · 343 阅读 · 0 评论 -
机器学习_SMOTE:简单原理图示_算法实现及R和Python调包简单实现
一、SMOTE原理SMOTE的全称是Synthetic Minority Over-Sampling Technique 即“人工少数类过采样法”,非直接对少数类进行重采样,而是设计算法来人工合成一些新的少数样本。SMOTE步骤__1.选一个正样本红色圈覆盖SMOTE步骤__2.找到该正样本的K个近邻(假设K = 3)可以是正样本也可以是负样本绿色圈覆盖SMOTE步骤__3.随机...原创 2018-11-17 22:09:05 · 26446 阅读 · 8 评论 -
机器学习_Logistic回归简单交叉验证
# ================ 关于泰坦尼克号乘客的生还率 ================# 加载包import pandas as pdfrom sklearn.linear_model import LogisticRegression # Logistic 回归模型 包from sklearn.linear_model import LogisticRegressionCV原创 2018-04-29 20:54:58 · 5790 阅读 · 0 评论 -
机器学习实战_Kaggle泰坦尼克号(1探索及特征工程)
Titanic 作为经典的入门二分类Kaggle比赛,最近抽时间对这个比赛重新再做了一遍数量。一、 数据探索思维导图二、特征工程原创 2019-10-31 23:30:07 · 557 阅读 · 1 评论 -
机器学习_学习曲线(过拟合与欠拟合)
1. 多项式线性拟合# 多项式import numpy as npx = 6*np.random.rand(100,1) -3y = 2 + 0.5 * x ** 2 + x + np.random.rand(100, 1)import matplotlib.pyplot as pltplt.style.use('ggplot')plt.scatter(x, y, s=2, c=...翻译 2018-08-31 22:49:59 · 2998 阅读 · 0 评论 -
机器学习技巧_不平二分类交叉验证及模型评估指标选择
该篇侧重点在于不平二分类的评估指标选择 1、数据说明数据 为 MNIST 有70000张图片,每张图片有784个特征。 每个图片都是28*28像素的,并且每个像素的值介于0~255之间2、模型训练# 将数据集改为一个二分类的,分为5和非5y_train_5 = (y_train == 5)y_test_5 = (y_test == 5)# 用SGDClassif...原创 2018-08-18 18:18:49 · 1926 阅读 · 0 评论 -
机器学习_Scikit-Learn 设计原则(API设计)
一、一致性:所有对象的接口一致且简单1. 估计器(estimator)任何可以基于数据对一些参数进行估计的对象都被称为估计器(比如,imputer是个估计器)。估计本身是通过fit()方法,只需要一个数据集作为参数(对于监督学习算法,需要两个数据集;第二个数据集包含标签)。任何其他用来指导估计过程的参数都被当做超参数(比如imputer的strategy),并且超参数要被设置成实例变量...翻译 2018-07-22 17:04:33 · 743 阅读 · 0 评论 -
机器学习_拆分测试集与训练集(基础)
1、自编函数简单随机抽取#!/usr/bin/python# 加载包import numpy as np import pandas as pddef split_train_test(data, test_ratio,seed = 1234): np.random.seed(seed) # 使得生成的测试训练集具有可重复性 index = np.random....原创 2018-07-14 23:25:49 · 1095 阅读 · 2 评论 -
机器学习_Logistic回归(机器学习实战)
1、一般流程 1)收集数据:采用任意方法收集数据 2)数据准备:由于需要进行距离计算,因此要求数据类型为数据型。 3)分析数据:采用任意方法对数据进行分析 4)训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数。 5)测试算法:一旦训练完成了,分类将会很快 6)使用算法:首先,需要输入一些数据,将其转换为对应的结构化数值;接着,基于训练...翻译 2018-05-20 08:05:37 · 366 阅读 · 0 评论 -
机器学习_决策树-ID3(机器学习实战)
ID3算法的缺点:1. 偏向于选择多值属性2. 本身并未给出处理连续数据的方法3. 算法不能处理带有缺失值的数据集翻译 2018-04-25 19:45:49 · 485 阅读 · 0 评论 -
机器学习_手写算法:随机梯度下降实现线性回归
1、数据准备# 生成随机散点import numpy as npx = 2 * np.random.rand(100, 1)y = 6 + 5 * x + np.random.rand(100,1) # 添加噪声# 图示import matplotlib.pyplot as pltplt.style.use('ggplot')plt.scatter(x, y, s=2, c=...原创 2018-08-30 00:46:08 · 1597 阅读 · 0 评论 -
机器学习_sklearn-支持向量机
支持向量机的基本思想是找到一条"线",使得分类间距最大。一、线性分类器(线性核)很多时候由于数据不可能完全分为两类,所以需要设置一定范围,允许分类错误。即设置软间隔,在sklearn 中用超参数 C (惩罚系数)来控制这种平衡:C 比较小,即脾气较小,度量大容忍度高,其对于的软间隔就大;反之则小。1. Iris数据集试验一个线性核SVM一下为十分简单的试验# 加载包from skl...翻译 2018-10-14 17:32:48 · 898 阅读 · 0 评论 -
机器学习_sklearn-SVM实现手写数字识别
1、 数据准备from sklearn.model_selection import StratifiedShuffleSplitimport pandas as pdimport numpy as npfrom sklearn.datasets import fetch_mldataclass Data_need(): def __init__(self, percent, da...原创 2018-10-15 23:19:40 · 3799 阅读 · 2 评论 -
机器学习_sklearn-集成学习(1)
集成学习的目的是同个几个若分类器以提升或者并行投票的方式得到一个强的集成分类器。一、简单集成可以用 moons 数据集制造数据对这个数据分别用Logistic 、decisionTree 和 svm 进行分类, 再用VotingClassifier 集成这几个分类器用 make_moons 生成随机数据后:def Vot_clf(voting_type): log_clf = Lo...翻译 2018-11-04 19:54:50 · 462 阅读 · 0 评论 -
机器学习_sklearn-集成学习(2)
将多个决策树,通过Bagging 的方法进行集成,便是常用的随机森林了。三、随机森林Bagging 和 RandomForestfrom sklearn.ensemble import RandmForestClassifier## 比较 BaggingClassifier + Decision 和 RandomForestClassifierif __name__ == '__ma...翻译 2018-11-10 13:04:53 · 269 阅读 · 0 评论 -
机器学习_AdaBoost(机器学习实战)
1、一般流程1)收集数据:可以使用任意方法2)准备数据:依赖于所使用 的弱分类器类型,本次使用单层决策树,这种分类器可以处理任何数据类型。当然也可以使用任意分类器作为弱分类器。作为若分类器,简单分类器的效果更好。3)分析数据:任何方法4)训练算法: AdaBoost的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器5)测试算法:计算分类器的错误率6)使用算法:同SVM...翻译 2018-12-05 23:14:44 · 356 阅读 · 0 评论 -
机器学习技巧_拆分训练集测试集(进阶)和下采样
笔者比较推荐分层抽样,进行拆分数据,这样训练和测试集的比例就会保持一致。所以以下的变形都是基于分层抽样的。1 简单分层抽样直接用的是 sklearn.model_selection.StratifiedShuffleSplit 。经常会用这个方式拆分数据进行交叉验证,由于这里仅仅用作二拆分,所以仅需要一次拆分(即设定n_splits= 1)StratifiedShuffleSplit...原创 2019-05-31 18:14:07 · 4052 阅读 · 0 评论 -
机器学习技巧_决策树规则输出成SQL
将sklearn的决策树规则输出成SQL主要使用sklearn.tree._tree 读取决策树的信息1、输出成SQL的主要函数import numpy as npfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.tree import _treedef tree_to_code(tree, feature_...原创 2019-07-21 23:19:57 · 1625 阅读 · 1 评论 -
机器学习_KNN(机器学习实战)
1、一般流程1)收集数据:可以使用任何方法 2)准备数据:距离计算所需要的数值,最好是结构化的数据格式 3)分析数据:可以使用任何方法 4)训练算法: 此步骤不适用于k-近邻 5)测试算法:计算错误率 6)使用算法:首先需要输入样本数据和结构化的输出结果,然后运用k-近邻算法 判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理2、kNN的优缺点优点:精度高、对异常翻译 2018-04-18 14:17:33 · 461 阅读 · 0 评论