决策树

面试中的 10 大排序算法总结

社会主义新天地 提交于 2020-08-09 21:13:10
分享分享自己收藏的学习资料,有需要的朋友可以找我获取 根据自身面试经历整理以及不断收集的(珍藏版) 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> https://www.cnblogs.com/xiaogeng88/p/12692306.html 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。面试官对于这些排序可能会要求比较各自的优劣、各种算法的思想及其使用场景。还有要会分析算法的时间和空间复杂度。通常查找和排序算法的考察是面试的开始,如果这些问题回答不好,估计面试官都没有继续面试下去的兴趣都没了。所以想开个好头就要把常见的排序算法思想及其特点要熟练掌握,有必要时要熟练写出代码。 接下来我们就分析一下常见的排序算法及其使用场景。限于篇幅,某些算法的详细演示和图示请自行寻找详细的参考。 冒泡排序 冒泡排序是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡向上升一样,因此而得名。举个栗子

XGBoost类库使用小结

半腔热情 提交于 2020-08-09 13:59:49
    在 XGBoost算法原理小结 中,我们讨论了XGBoost的算法原理,这一片我们讨论如何使用XGBoost的Python类库,以及一些重要参数的意义和调参思路。     本文主要参考了 XGBoost的Python文档 和 XGBoost的参数文档 。 1. XGBoost类库概述     XGBoost除了支持Python外,也支持R,Java等语言。本文关注于Python的XGBoost类库,安装使用"pip install xgboost"即可,目前使用的是XGBoost的0.90版本。XGBoost类库除了支持决策树作为弱学习器外,还支持线性分类器,以及带DropOut的决策树DART,不过通常情况下,我们使用默认的决策树弱学习器即可,本文也只会讨论使用默认决策树弱学习器的XGBoost。     XGBoost有2种Python接口风格。一种是XGBoost自带的原生Python API接口,另一种是sklearn风格的API接口,两者的实现是基本一样的,仅仅有细微的API使用的不同,主要体现在参数命名上,以及数据集的初始化上面。 2. XGBoost类库的基本使用方式     完整示例参见我的 Github代码 。 2.1 使用原生Python API接口     XGBoost的类库的2种接口风格,我们先来看看原生Python API接口如何使用。    

八皇后||算法

杀马特。学长 韩版系。学妹 提交于 2020-08-08 20:42:08
一、背景 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8个格子的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后, 为了达到此目的, 任两个皇后都不能处于同一条横行、纵行或斜线上 (中国象棋,车可以走横线,纵线),问有多少种摆法,高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以编程解决此问题。 八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。 当且仅当 n = 1 或 n ≥ 4 时问题有解. 皇后可攻击范围如图所示:图中蓝色区块不允许放其他皇后 力扣(leetcode)原题链接: https://leetcode-cn.com/problems/n-queens-ii/ 该题官方提供了2种方式,但是官方讲解的并不容易理解,且在主对角线和次对角线描述反了,利用位运算的方法只提供了方法,我通过自己的理解画了图形,所谓有图有真相,方便理解一些,在参考其他题解后,我再添加了一种利用斜率判断安全位置的解法。 二、思路 1.穷举法 时间复杂度:O(n^n) 如八皇后:8^8 = 16777216 进行暴力穷举: n个for循环嵌套遍历,找出所有合适的摆放方式,效率低下,不推荐! 2.递归和回溯法 时间复杂度: O(n!

集成学习之Adaboost算法原理小结

ぐ巨炮叔叔 提交于 2020-08-08 18:03:39
    在 集成学习原理小结 中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系。前者的代表算法就是是boosting系列算法。在boosting系列算法中, Adaboost是最著名的算法之一。Adaboost既可以用作分类,也可以用作回归。本文就对Adaboost算法做一个总结。 1. 回顾boosting算法的基本原理     在 集成学习原理小结 中,我们已经讲到了boosting算法系列的基本思想,如下图:     从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。       不过有几个具体的问题Boosting算法没有详细说明。     1)如何计算学习误差率e?     2) 如何得到弱学习器权重系数$\alpha$?     3)如何更新样本权重D?     4) 使用何种结合策略?    

简析市场营销中的 六 大数据科学用例

徘徊边缘 提交于 2020-08-08 15:00:17
前言: -更多关于数智化转型、数据中台内容请加入 阿里云数据中台交流群—数智俱乐部 (文末扫描二维码或 点此加入 ) -阿里云数据中台官网 https://dp.alibaba.com/index 前言 在市场营销中,数据科学的主要目标是将数据转化为可行的行动。大数据为销售提供了更好地了解目标受众提供的能力。 数据科学主要应用于概要分析,搜索引擎优化,客户参与,响应能力,实时营销活动等营销领域。而且,每天都会出现将数据科学和分析应用于营销的新方法。 六大数据科学用例用户分群 所有客户都是独立的个体。因此,「一刀切」的方法根本无效。 在这种情况下,用户分群可以帮助营销人员根据特定的特征将客户进行合理的划分。 有两种最常用的细分类型: 普通用户分群——通过分析用户属性与行为特征 预测用户分群——通过机器学习算法预测事件概率 用户分群的细分似乎在市场营销中呈现一种上升趋势。用户的细分有助于将人们划分为更精确的类别,尤其是与行为意图有关的类别。因此,即使是很少数量的客户群,也可以针对他们的喜好定制营销活动。 实时分析 实践证明,实时分析可立即反馈营销活动的成果。由于社交媒体和通信技术的普及,实时营销将被应用得越来越广泛。 高效的实时数据可以为公司带来可观的增长。 实时算法主要处理两组数据:客户数据和运营数据。客户数据可洞悉客户的需求,偏好和需求。运营数据反映了客户做出的各种交易,动作和决策

第四范式:分布式机器学习框架与高维实时推荐系统

荒凉一梦 提交于 2020-08-07 16:45:46
导读: 随着互联网的高速发展和信息技术的普及,企业经营过程中产生的数据量呈指数级增长,AI 模型愈发复杂,在摩尔定律已经失效的今天,AI 的落地面临着各种各样的困难。本次分享的主题是分布式机器学习框架如何助力高维实时推荐系统。 机器学习本质上是一个高维函数的拟合,可以通过概率转换做分类和回归。而推荐的本质是二分类问题,推荐或者不推荐,即筛选出有意愿的用户进行推荐。 本文将从工程的角度,讲述推荐系统在模型训练与预估上面临的挑战,并介绍第四范式分布式机器学习框架 GDBT 是如何应对这些工程问题的。 主要内容包括: 推荐系统对于机器学习基础架构的挑战 大规模分布式机器学习场景下,不同算法的性能瓶颈和解决思路 第四范式分布式机器学习框架 GDBT 面临的网络压力及优化方向 01 推荐系统对于机器学习基础架构的挑战 1. 海量数据+高维特征带来极致效果 传统的推荐系统中,我们只用简单的模型或者规则来拟合数据,就可以得到一个很好的效果 ( 因为使用复杂的模型,很容易过拟合,效果反而越来越差 )。但是当数据量增加到一定的数量级时,还用简单的模型或者规则来拟合数据,并不能充分的利用数据的价值,因为数据量增大,推荐的效果上限也随之提升。这时,为了追求精准的效果,我们会把模型构建的越来越复杂,对于推荐系统而言,由于存在大量的离散特征,如用户 ID、物品 ID 以及各种组合

2020年对话型人工智能将会如何发展?

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-07 04:26:25
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 对话人工智能是当今创新不可或缺的一部分,它将改变一些企业业务。 另一种人工智能将占领技术市场。这次不是别人,正是对话型人工智能。随着不时启动的新项目,它在企业业务中的使用以快速的速度显著增长。对话型AI是跨越各种其他商业类型的许多其他AI项目中不可分割的一部分。 随着企业在市场上开始成熟,并被更智能的对话式人工智能解决方案所吸引,这些解决方案将带来真正的价值,它们将把失败的解决方案抛在身后,并迁移到经验证的技术上,这些技术可以继续改进和构建跨企业的解决方案。 技术人员在市场上看到了巨大的成熟度,这是由开始意识到对话人工智能的价值的组织来衡量的,也来自于企业试用、测试和失败的不同解决方案。 2020年将见证聊天机器人向对话型人工智能机器人最彻底的转变。最基本的基于规则的聊天机器人不再让顾客高兴了。与聊天机器人不同的是,与AI对话的机器人是一种认知机器人,它可以破译复杂的场景,理解人类的情感。它的NLP功能使它能够与客户进行个性化对话,这涉及到理解人类情感并相应地采取行动。随着企业越来越注重取悦客户和获得优秀的净推广分数,聊天机器人在未来几年将很快被对话式人工智能机器人取代。 2020年的对话人工智能机器人将提供高度个性化和语境化的对话,给他们一种人性化的触感。例如

决策树和随机森林

一个人想着一个人 提交于 2020-08-06 20:09:25
作者|PRATEEK JOSHI 编译|VK 来源|Analytics Vidhya 决策树与随机森林的简单类比 让我们从一个思维实验开始,它将说明决策树和随机森林模型之间的区别。 假设银行必须为客户批准一笔小额贷款,而银行需要迅速做出决定。银行检查此人的信用记录和财务状况,发现他们还没有偿还旧贷款。因此,银行拒绝了申请。 但问题是,对于银行庞大的金库来说,贷款数额非常小,他们本可以在非常低风险的情况下批准贷款。因此,银行失去了赚钱的机会。 现在,又一个贷款申请将在几天内完成,但这一次银行提出了一个不同的策略——多个决策过程。有时它先检查信用记录,有时它先检查客户的财务状况和贷款金额。然后,银行结合这些多个决策过程的结果,决定向客户发放贷款。 即使这一过程比前一个过程花费更多的时间,银行也可以利用这一方法获利。这是一个典型的例子,集体决策优于单一决策过程。现在,你知道这两个过程代表了什么吧? 这些分别代表决策树和随机森林!我们将在这里详细探讨这个想法,深入探讨这两种方法之间的主要区别,并回答关键问题,你应该使用哪种算法? 目录 决策树简介 随机森林简介 随机森林与决策树的冲突 为什么随机森林优于决策树? 决策树与随机森林—你什么时候应该选择哪种算法? 决策树简介 决策树是一种有监督的机器学习算法,可用于分类和回归问题。决策树仅仅是为了达到特定结果而做出的一系列顺序决策

第12章 决策树 学习笔记上

自闭症网瘾萝莉.ら 提交于 2020-08-06 13:50:43
目录 什么是决策树 12-2 信息熵 12-3 使用信息熵寻找最优划分 12-4 基尼系数 模拟使用基尼系数划分 对比信息熵和基尼系统 什么是决策树 取后两个维度 from sklearn import datasets iris = datasets.load_iris() X = iris.data[:,2:] y = iris.target plt.scatter(X[y==0,0], X[y==0,1]) plt.scatter(X[y==1,0], X[y==1,1]) plt.scatter(X[y==2,0], X[y==2,1]) plt.show() from sklearn.tree import DecisionTreeClassifier dt_clf = DecisionTreeClassifier(max_depth=2, criterion="entropy", random_state=42) dt_clf.fit(X, y) def plot_decision_boundary(model, axis): x0, x1 = np.meshgrid( np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1), np.linspace(axis[2], axis[3

矩阵补全(Matrix Completion)和缺失值预处理

好久不见. 提交于 2020-08-06 09:46:20
目录 1 常用的缺失值预处理方式 1.1 不处理 1.2 剔除 1.3 填充 1.3.1 简单填充 1.3.2 建模填充 2 利用矩阵分解补全缺失值 3 矩阵分解补全缺失值代码实现 4 通过矩阵分解补全矩阵的一些小问题 References 矩阵补全(Matrix Completion),就是补上一个含缺失值矩阵的缺失部分。 矩阵补全可以通过矩阵分解(matrix factorization)将一个含缺失值的矩阵 X 分解为两个(或多个)矩阵,然后这些分解后的矩阵相乘就可以得到原矩阵的近似 X',我们用这个近似矩阵 X' 的值来填补原矩阵 X 的缺失部分。 矩阵补全有很多方面的应用,如推荐系统、缺失值预处理。 除了 EM 算法、树模型,机器学习中的大多数算法都需要输入的数据是不含缺失值的。在 deep learning 模型中,通过梯度的计算公式就可以发现,如果 feature 中含有缺失值,那么梯度也会含缺失值,梯度也就未知了。对缺失值的处理是在模型训练开始前就应该完成的,故也称为预处理。 数据缺失在实际场景中不可避免,对于一个包含 \(n\) 个 samples,每个 sample 有 \(m\) 个 features 的数据集 \(D\) ,我们可以将该数据集 \(D\) 整理为一个 \(n×m\) 的矩阵 \(X\) 。 通过矩阵分解补全矩阵是一种处理缺失值的方式