Logistic Regression算法

在之前的《常见线性回归模型》一文中,介绍了机器学习中比较简单但又非常常用的线性回归模型,今天来介绍另外一个模型:Logistic Regression,这又是机器学习中用的非常多的一个模型。虽然Logistic Regression(后简称LR)里面带了回归字样(Regression),但它实际是一个分类模型(关于回归和分类的区别见《机器学习介绍》),更准确的说是一个二分类模型(0、1或者true、false之类,当然通过一些手段也可以实现多分类),比如预测一份邮件是不是垃圾垃圾邮件、一个人是否患了某种病等。它的基本思想是:假设一份邮件为垃圾邮件的概率为$p$,我们根据一些特征计算出这个$p

Hive的分桶和采样

Hive除了有分区(Partition),还有分桶(Bucket),上一篇文章《Hive的分区》中介绍了分区,本文接着介绍分桶,以及和分桶经常一起使用的采样(Sampling)。其实不管是分区还是分桶都是为了更好的管理数据。分区将表的数据分到不同的目录存储,从而在查询的时候可以通过where条件过滤一部分数据,减小查询的数据量从而提高性能。但分区的这种机制往往在数据符合以下条件时才会表现的比较好:分区数目为有限个:一般也不能太大,不然太多的文件和目录对于HDFS的NameNode会造成比较大的内存压力。各个分区的数据量比较均衡:这个好理解,如果90%的数据跑到一个分区去,那分区的意义就不是很大

Hive的分区

Hive提供了分区的概念,对应到后台就是不同的目录,主要是为了在查询的时候可以提高性能。而分区分为两种:静态分区(Static Partition,以下简称SP):用户指定分区列的值,数据中不包含分区列的值,所以分区与数据没有关系。举个例子比如分区名字为ds=20180922,并不代表分区内的数据都是这天的,这个需要由用户自己保证。静态分区在编译阶段确定。动态分区(Dynamic Partition,以下简称DP):分区列的值从数据中获取,所以数据列中包含分区列的值。比如数据中有一列数据为日期,如果指定该列为分区列的话,那将根据该列的值创建分区。动态分区在运行阶段才可以确定。今天就来介绍这两种

Hive架构介绍

《Hive安装使用》介绍了一下Hive的安装和数据模型,本文主要介绍Hive的架构及查询流程。架构总览先来一张官网的架构图:这幅图清楚的展示了Hive和Hadoop的关系,并且展示了Hive一些重要的组件:UI:主要是Hive的各种客户端。这是用户使用Hive的窗口,包括我们之前使用的HiveCli、Beeline等CLI,以及一些Web GUI接口。用户通过UI来提交自己的操作请求。Driver:接收用户查询,并且实现了会话处理,基于JDBC/ODBC实现了执行、拉取数据等API。Compiler:解析查询语句,做语义分析,最终借助在Metastore中查询到的表和分区的元数据生成执行计划(

Hive安装使用

Hive最初由Facebook开发,最后贡献给Apache基金会,最后成为了Apache的顶级项目。Hadoop的出现虽然解决了海量数据的存储,并且提供了MR计算框架。但MR的使用门槛还是比较高,所以Facebook便开发了Hive,底层依旧使用HDFS存储数据,但操作数据却不用自己写MR程序,而是使用类似SQL的语法操作数据(在Hive里面称为HQL),后台自动转换为MapReduce,极大的降低了用户的使用难度。一句话概括就是:Hadoop提供了海量数据的存储、计算方案,而Hive使得该方案实施起来更加方便。官方对于Hive的介绍如下:The Apache Hive™ data wareh

Python中的global和nonlocal关键字

在进入正题之前先简单说明一下:局部变量:函数或者方法里面定义的变量;全局变量:本文指module级别的变量(一个python文件就是一个module)。关于Python的作用域这里推荐一篇文章:A Beginner's Guide to Python's Namespaces, Scope Resolution, and the LEGB Rule,有兴趣的可以看一下。global先看个例子:a = 1 def func1(): print("func1:", a) def func2(): a = 10 print("func2:&q

朴素贝叶斯分类器

贝叶斯定理是概率论中非常有名的一个定理,而朴素贝叶斯(Naive Bayes)则是贝叶斯理论下非常有名的一个算法,在ML和NLP领域里面应用非常多。之前做过一些学习笔记,今天把原来的笔记再梳理了一下,发到博客上面来。如有不对之处,欢迎指正。另外,因为过的时间比较久了,当时整理时参考的一些出处已经记不得了,后面就不附出处了,开始正题。贝叶斯公式先看一下贝叶斯涉及到的一些概率论的概念:$$ P(A|B) = \frac{P(AB)}{P(B)} $$上面的公式是条件概率(conditional probability)的通用定义,介绍以下三个概念:边缘概率(marginal probability

Python中的finally解析

结论简单结论:在Python和Java里面,不要在finally里面使用return语句。C#里面如果写了直接会报语法错误,其它有finally的语言里面应该也差不多,但没用过就不说了。如果你信了,也懒得往下看,那记住上面的结论就行了。如果有耐心,那就接着往下看吧。先简单总结下try语句块,Python中的异常处理使用try...except...[else]...[finally]的方式,其中的方括号表示是可选的。所以一个最全的try语句块如下所示:try: statement1 except A: // A异常处理 statement2 except: //
|