自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

guoziqing506的博客

记录学习点滴,享受算法乐趣

  • 博客(239)
  • 收藏
  • 关注

原创 MySQL基本操作四:数据的查询

之前我介绍了MySQL中,数据记录的增、删、改操作。本文我们看查询操作。为方便后面举例,还是先建立一个表,并插入一些数据。我在这里依旧建立一个学生信息表,建表的代码如下:CREATE TABLE tab_student( StuID CHAR(4), Name VARCHAR(20), Sender CHAR(1), Age INT, Math INT,...

2018-12-02 21:15:59 6325 26

原创 MySQL基本操作三:数据的插入、更新、删除

介绍MySQL中数据的插入,更新,删除操作前,我先建一个表。方便后面举例子。这是一个学生信息表:CREATE TABLE tab_student( Name CHAR(20), StuID VARCHAR(20), Rank INT);建好以后,长成这样: 1. 插入数据1.1 插入完整数据记录语法形式如下:INSERT INTO t...

2018-08-17 22:14:03 33733 3

原创 CART-分类和回归树

之前在博文 决策树归纳 中,我介绍了用决策树进行分类的算法,包括ID3和C4.5。然而决策树不仅可以用来做数据分类,也可用于做数据回归。1984年Breiman,Friedman,Olshen等人出版了著作《Classification and Regression Trees》(简称CART)介绍了二叉决策树的产生。他们给出了用二叉决策进行树数据分类和回归的方法。在阅读本文之前,我假设读者已...

2018-08-15 20:28:19 3100 3

原创 概率检索模型

概率检索模型是当前信息检索领域效果最好的模型之一,它基于对已有反馈结果的分析,根据贝叶斯原理为当前查询排序。我在之前的博客 SVM解释:二、SVM的数学基础 中介绍了如何用朴素贝叶斯算法对数据进行分类,其实概率检索模型的基本原理与朴素贝叶斯分类是一样的。先回忆一下朴素贝叶斯算法的原理:对于测试元组XXX,最终目的是要计算对于不同的类CiCiC_i,计算后验概率p(Ci|X)p(Ci|X)p(C...

2018-08-13 21:30:26 7595 1

原创 海量数据处理技巧

数据时代来临,数据量的爆炸式增长是最为显著的特征。当高性能硬件的普及还跟不上这样的数据大潮时,如何在有限的时空资源内处理海量数据成为了计算机科学以及数理统计等领域最大的挑战。所谓“数据处理”,在本文中特指通过计算机技术,对海量数据进行存储、统计、查询等操作。我将在下面介绍一些基本的海量数据处理的方法,供大家参考。需要明确的一点是,现实情况复杂多变,所以对于海量数据处理这样大的主题,是不可能用一...

2018-08-02 20:07:18 15655

原创 逻辑回归(logistic regression)原理详解

机器学习解决的问题,大体上就是两种:数值预测和分类。前者一般采用的是回归模型,比如最常用的线性回归;后者的方法则五花八门,决策树,kNN,支持向量机,朴素贝叶斯等等模型都是用来解决分类问题的。其实,两种问题从本质上讲是一样的:都是通过对已有数据的学习,构建模型,然后对未知的数据进行预测,若是连续的数值预测就是回归问题,若是离散的类标号预测,就是分类问题。这里面有一类比较特殊的算法,就是逻辑回归...

2018-08-01 12:34:18 99049 5

原创 最大化期望算法(EM)详解

我们知道最大似然估计的根本目的是根据抽样的到的样本(即数据),反推出最有可能的分布参数(即模型),这是一个非常典型的机器学习的思想。所以在很多领域最大似然估计有着极为广泛的应用。然而,如果已知的数据中含有某些无法观测的隐藏变量时,直接使用最大似然估计是不足以解决问题的。这个时候就要依靠最大化期望(EM)算法了。简单的说,EM算法是在依赖于无法观测的隐藏变量的概率模型中,寻找参数最大似然估计或者...

2018-07-30 09:15:53 34333 8

原创 SVM解释:五、SMO算法

SMO算法是John C. Platt在1998年提出的。论文的题目是”Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines”。它很快便成为最快的二次规划优化算法,特别是在针对线性SVM和数据稀疏时性能更优。当然了,SMO优越性能的背后是其相当复杂的数学推导,所以,我也把这块最...

2018-07-23 08:42:47 12810 9

原创 SVM解释:四、线性不可分的情况

之前的博客介绍了在数据为线性可分的情况下,如何用SVM对数据集训练,从而得到一个线性分类器,也就是超平面WX+b=0WX+b=0WX + b = 0. 但是我已经强调过多次,线性可分的情况有相当的局限,所以SVM的终极目标还是要解决数据线性不可分的情况。解决这种线性不可分的情况基本的思路有两种:加入松弛变量和惩罚因子,找到“最好”超平面,这里的“最好”可以理解为尽可能地将数据正确分类;使用...

2018-07-23 08:41:42 18834 4

原创 SVM解释:三、线性可分的情况

在之前的博客 拉格朗日乘子法和KKT条件 中,我已经大致介绍了支持向量机(SVM)的数学理论基础。从本文开始,我将逐步推导SVM是如何运用于数据分类的。由简入难,我先来介绍最简单的,通过训练线性可分的数据分类。在我写的SVM的第一篇博客中,已经大致介绍了SVM是做什么的,大概是怎样一个思路,所以本文我们直接进入正题,从介绍最大边缘超平面的计算方法开始。1. 最大边缘超平面一个给定的...

2018-07-23 08:41:26 11788 4

原创 SVM解释:二、SVM的数学基础

本节所述的内容为与支持向量机(SVM)相关的数学基础知识。总的来说,我先介绍了凸优化问题求最优解的思路,介绍了拉格朗日乘子法和KKT条件,随后根据KKT条件给出了求解有不等式约束的凸优化问题的一种解法,即拉格朗日对偶。我的学习体会是,如果不理解上面说的这些数学基础知识,学习SVM会寸步难行。所以我把基础知识部分当做学习SVM的第一站。当然,如果你已经了解这些,也可以直接跳到我的下一篇博客。。去...

2018-07-23 08:41:07 4068 3

原创 SVM解释:一、SVM的整体框架

支持向量机(Support Vector Machine)是一种非常重要的分类方法,大的范畴上讲,属于监督学习。它最早由Vapnik等人在1992年提出,已经发展了近30年。尽管它的训练速度偏慢,但是由于其对复杂非线性数据的强大的建模能力,依然在很多领域,包括手写数字识别,对象识别,基准时间序列预测检验等有着非常广泛的应用。可以说,任何一种二分类的问题都在理论上都可以用SVM解决。当然,SVM...

2018-07-23 08:40:36 5596 1

原创 隐性语义索引(LSI)原理与实现

隐性语义索引(Latent Semantic Idexing, LSI),也叫Latent Semantic Analysis(LSA),是信息检索领域一类非常重要的技术思想。它通过对词项-文档矩阵的奇异值分解,在理论上成功地解决了潜在语义(或者叫隐性语义)的检索问题。本文将介绍关于LSI的原理和实现方法。隐含语义问题基于关键词的文档检索是IR中最简单,也是最普遍的技术手段。一般来说,...

2018-07-11 21:55:52 4939 1

原创 C++:继承和多态

C++中类之间的关系,一共分为以下三种:has-a:包含关系。表示类A的一个成员是类B,比如类Student中,有数据成员score,而score是属于类Score的;use-a:使用关系。表示类B会用到类A的成员,比如类State会用到类Region中的成员函数getArea(),我们可以通过定义友元类来实现快捷编程;is-a:继承关系。表示类B是类A的一个子集,比如类Student是...

2018-07-10 14:26:03 1528 1

原创 C++:指针的应用

指针是C++的一个非常强大的特性,它能使我们直接访问计算机的内存,指针可以用来引用一个数组,一个字符串,一个整数或者任何其他变量。这种强大的功能使得指针在C++程序设计中是非常普遍的,而同时,指针的知识又显得有那么些“繁杂”,有必要清晰地做个总结。什么是指针指针,就是内存地址。我们一般会声明一个变量是整数int,浮点double,或者字符char等等,指针变量(通常简称指针)和他们本质...

2018-07-01 20:44:22 3687 1

原创 MySQL基本操作二:索引的操作

索引创建在数据库的表对象上,由表中的一个或多个字段生成的键组成,这些键被数据结构(例如B树)组织起来,目的是通过索引快速地定位与键值相关的数据对象。MySQL支持6种索引:普通索引;唯一索引;全文索引;单列索引;多列索引;空间索引。本文,我将分别介绍关于这6种索引创建,查看,删除的基本操作。普通索引1. 创建表时创建普通索引语法形式如下:CREATE TABLE tab...

2018-06-29 11:32:09 993 2

原创 主成分分析(PCA)原理与实现

主成分分析(PCA)是最重要的数据降维的方法之一。针对高维数据的处理时,往往会因为数据的高维度产生大量的计算消耗,为了提高效率,一般最先想到的方法就是对数据降维。与“属性子集选择”的方法(即选择一部分有代表意义的属性直接替代原数据)不同,PCA是通过创建一个由原数据中的属性“组合”而成的,数量较小的变量集合来替代原数据。PCA的基本思想可以这样描述:找出数据的所有属性中最主要的部分,用这个部分...

2018-06-27 14:16:19 1789

原创 奇异矩阵及广义逆矩阵

再介绍奇异矩阵以及矩阵的广义逆之前,先复习几个概念,然后我一步步给出奇异矩阵和广义逆的介绍。伴随矩阵1. 余子式定义1 余子式:在nnn阶行列式|A||A||A|中,划去元素aijaija_{ij}所在的行和列,剩下的元素(显然,剩下了(n−1)2(n−1)2(n - 1)^2个元素),按照原先的排列生成的新行列式的值称为元素aijaija_{ij}的余子式,记为MijMijM...

2018-06-03 17:00:26 12429 2

原创 线性方程组解的分析:唯一解,无穷多解以及无解

本文将总结关于线性方程组解的知识点。线性方程组定义1 线性方程组:我们将形如下式的方程组称为线性方程组。a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2…am1x1+am2x2+⋯+amnxn=bm(21)(21)a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2…am1x1+am2x2+⋯+amnx...

2018-06-03 16:50:20 118421 9

原创 矩阵的分解:满秩分解和奇异值分解

满秩分解定义与性质定义1 满秩分解:对于m×nm×nm \times n的矩阵AAA,假设其秩为rrr,若存在秩同样为rrr两个矩阵:Fm×rFm×rF_{m \times r}(列满秩)和Gr×nGr×nG_{r \times n}(行满秩),使得A=FGA=FGA = FG,则称其为矩阵AAA的满秩分解。定理1:满秩分解有两个性质,满秩分解不唯一:假设存在rrr阶可逆方阵...

2018-06-02 01:41:39 37720 5

原创 MySQL基本操作一:数据库和表

本章,主要就数据库和表的基本操作作以总结。需要事先说明的一点是,我写的所有MySQL的代码将采用大写形式。虽然说至少在MySQL环境下,SQL语句的大小写并不会影响代码运行结果,但是,有同行讲到,SQL语句大写比是一个更好地习惯。因为在执行程序的时候,如果你用的是小写,会先转化为大写字母然后执行,而如果大写,那就可以省一个转化的时间。在大型的ERP系统开发时,往往会这么要求。所以,我也就尽量规...

2018-05-23 21:55:49 45911 6

原创 聚类分析:基于密度聚类的DBSCAN算法

对于簇形状不规则的数据,像k-means(聚类分析: k-means算法)这种基于划分的方法就不再适用了,因为划分方法(包括层次聚类算法)都是用于发现“球状簇”的。比如下面两个图中,Fig.1所示的数据分布用k-means作聚类是没有问题的,但是对于Fig.2就不行了,会把大量的噪声或者离群点也包含在簇中。解决这种任意簇形状的聚类问题,就要采用一种与划分聚类或者层次聚类不同的聚类方法——基于密...

2018-05-15 10:09:15 18980 5

原创 装袋,AdaBoost和随机森林

装袋,AdaBoost和随机森林都属于组合分类方法的例子,用于改善单个分类模型的学习效果。我们知道,在很多情况下,面对大量复杂的训练元组,如果只使用一种分类模型构造分类器,很可能对于某些元组是有“硬伤”的,预测结果很不准确。所以最直接的思路是将多种分类模型组合起来,通过得到的多个分类器投票判断。好比是有个消息你不知道,去问别人,如果只问一个人,那这个人说的也不一定对吧。但是如果问很多人,以多数...

2018-04-17 20:44:30 1160 1

原创 惰性学习法与kNN分类

惰性学习法我们接触比较多的分类方法,例如决策树,关联规则挖掘,支持向量机,贝叶斯分类,后向传播等等,都可以被称为“急切学习法”,他们接受训练集的信息,在对新的元组(测试集中)进行检验之前,就已经构造好了泛化模型(即分类器),然后根据分类器,直接对新元组分类。所以“急切学习法”的名字很形象:赶紧学(训练之后立即得到分类器),学完之后,直接用(对新元组分类)。现在我要说一种新的分类方法,最近邻...

2018-04-13 11:53:35 2774

原创 lintcode - Reach a Number

题目描述:我简单将题目用汉语描述一下。说初始位置在0,给定一个目标值target(target是一个整数),现在让你每次走一步,每次走的步长和已经走的步数相等(第一次走1,第二次走2,。。。),每次可以向左或者向右走(也就是加正数或者负数),问最少走多少次可以走到target.解题思路:一开始想到的自然是广度优先搜索,但是我的运行时间出了问题。所以想到要优化算法。其实就我目前接触的算法而言...

2018-04-09 21:38:32 453 2

原创 lintcode - 循环单词

题目描述:The words are same rotate words if rotate the word to the right by loop, and get another. Count how many different rotate word sets in dictionary.E.g. picture and turepic are same rotate words....

2018-03-21 17:08:05 346 2

原创 lintcode - 把二叉搜索树转化成更大的树

题目描述:给定二叉搜索树(BST),将其转换为更大的树,使原始BST上每个节点的值都更改为在原始树中大于等于该节点值的节点值之和(包括该节点)。样例: Given a binary search Tree `{5,2,13}`: 5 / \ 2 13Return the root of new tree ...

2018-03-20 13:36:24 356

原创 lintcode - 插入区间

题目描述给出一个无重叠的按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。样例插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。解题思路这道题所涉

2018-01-12 16:02:19 503

原创 Python--matplotlib绘图

用Python绘制图表在工作中是一项非常有用的技能,虽然说强大的matlab基本可以满足我们所有的绘图需求,但是在有些情况下,使用Python绘图,让图表直接可以直接随着Python程序的运行而产生。那这种便捷,也是非常有价值的。本文中,我将简单介绍使用Python的pyplot模块绘制图表的基本操作。当然绘图是一个细活,不同的实际需求,对图表的要求也是千变万化,所以,要把所有的绘图操作一一道来,

2018-01-04 21:29:22 85269 12

原创 并查集(Union-Find)算法详解

并查集(Union-Find)是解决动态连通性问题的一类非常高效的数据结构。本文中,我将尽我所能用最简单,最清晰的逻辑展示出并查集的构造过程,同时还将对其中的关键步骤给出相应的Python代码。动态连通性可以想象一张地图上有很多点,有些点之间是有道路相互联通的,而有些点则没有。如果我们现在要从点A走向点B,那么一个关键的问题就是判断我们能否从A走到B呢?换句话说,A和B是否是连通的。这是动态连通性最

2017-12-08 16:15:05 55484 6

原创 Trie树的构建和应用

Trie树又叫“字典树”,是一种在字符串计算中极为常见的数据结构。在介绍Trie树的具体结构之前,我们首先要搞明白的就是Trie树究竟是用来解决哪一类问题的,为什么这类问题可以用Trie树高效的解决。我们为什么用Trie树1. 节约字符串的存储空间假设现在我们需要对海量字符串构建字典。所谓字典就是一个集合,这个集合包含了所有不重复的字符串,字典在对文本数据做信息检索系统时的作用我想毋庸赘述了。那么现

2017-11-17 16:48:11 2600 3

原创 索引压缩

当待搜索的数据量极为庞大时,数据所对应的索引的数据量也会非常大。就拿最常见的倒排索引来说,特别是当用户查询的关键词是常用词时,这些词所对应的倒排列表可以达到几百兆,而将这样庞大的索引由磁盘读入内存,势必会严重增加检索响应时间,影响用户的搜索体验。为了解决这样的问题,学者们提出了一系列的索引压缩技术。实际上,我们所要处理的数据类型多如牛毛,根据不同的要求,为这些数据设计的索引更是千变万化,最常见

2017-08-10 16:59:27 4596 1

原创 Python--Numpy基础

Numpy是Python的一个能快速处理矩阵运算的数学库,如果你从事的是数据科学,或者机器学习领域的话,Numpy是一项最基本的技能。他不仅简化了我们在处理矩阵运算时需要编写的代码,而且,许多Numpy的底层函数用C编写,我们能获得在用普通Python自带的列表结构时,所无法达到的运算速度。下面,我将就Numpy的一些基本用法,做个简单的介绍,当然,一来Numpy库本身会不断更新,二来,我本人

2017-05-02 11:00:39 3766

原创 浅谈PageRank

1996年,两位还在斯坦福大学攻读计算机理学博士学位的研究生,开始了一项研究:如何对互联网上“成万上亿”的网页进行排序。在当时看来,这只是发生在斯坦福的一个普通课题研究而已,然而包括其研究者在内,都没有意识到,这项研究最后的成果,会引发互联网搜索引擎领域一个划时代的变革。这两位博士的名字相信大家都很熟悉了,他们正是后来大名鼎鼎的Google公司的创始人:拉里佩奇(Larry Page)和谢尔盖

2017-04-25 18:00:09 27445 7

原创 朴素贝叶斯分类

之前,我探讨过“决策树归纳”的分类方法,本文我将介绍另一中比决策树更加简单的,用概率方法分类的技术——“朴素贝叶斯分类”。贝叶斯定理贝叶斯定理是概率论中非常简单基础的定理,其解决的核心点在于根据已有信息,对未知事物发生结果的概率计算。就拿分

2017-03-28 20:02:55 1118

原创 决策树归纳

分类与监督学习现实中,我们经常会遇到这样的问题:银行收到用户的信用卡申请表。当然,这是一张带有用户丰富信息的申请表,比如年龄,学历,收入,信用记录等等。那么银行的工作人员如何根据这些信息判别这个用户是否是诚信的,是否应该通过他的信用卡申请呢?人工的判断显然耗时耗力,且不一定准确,比较靠谱的办法是通过已有的,大量用户的使用记录,分析得到一个模型(或一个方程,一种工具),利用这个模型,可以判别出大

2017-03-26 10:16:04 8517

原创 B树与B+树

B树是为实现高效的磁盘存取而设计的多叉平衡搜索树。这个概念在文件系统,数据库系统中非常重要。当然,有关于B树的产生,发展,结构等等方面的介绍已经非常详细,所以本文只是介绍有关于B树和B+树最核心的知识点,也算是我本人的学习笔记。至于详细的资料,因为毕竟有着太多,所以不再赘述。可以向大家推荐一篇博客:从B树、B+树、B*树谈到R 树,这篇文章中,作者对于B树系列数据结构的讲解非常详细,我的这篇博客,

2017-03-20 15:59:33 67246 22

原创 Apriori算法解析

背景介绍维克多迈尔在《大数据时代》中,提出了大数据时代跟传统的信息时代相比,最本质的三个思维变革:1. 要全体数据,而不仅是样本;2. 要混杂,而不要效率偏低的精确;3. 要相关关系,而不是因果关系。这第三条说的就是数据挖掘中,最基础,最简单,也是最为重要的应用——数据相关关系的挖掘。相关关系,其实是数据中蕴含的最直接的知识,而对这种相关关系的挖掘,如今也早已应用到推荐系统,个性化检索,机器学

2017-03-09 10:46:22 13633 5

原创 聚类分析: k-means算法

k-means算法聚类分析是数据分析中,非常重要的一类课题。他的作用是将大量的无标签数据通过计算,自动为其标注标签。众所周知,这一点是区别于数据分类技术的。而现实的场景中,无标签的数据显然多于有标签数据,因此,我在这里也是先说聚类,后面的博文,再说分类。聚类的目的,是要将数据归为不同的类,基本原则是要相近的数据尽量归为一类,而不同类之间的数据则要尽量有比较大的差别。说到聚类,当然最先想

2017-03-02 15:52:33 27328

原创 Kd-tree原理与实现

数据应用当中,最近邻查询是非常重要的功能。不论是信息检索,推荐系统,还是数据库查询,最近邻查询(Nearst Neighbor Search)可谓无处不在。它要实现的是帮助我们找到数据中和查询最接近的一个或多个数据条目(前者叫NN search, 后者也叫kNN),其实本质上是一样的,我在这篇博客中讲的Kd-tree主要是针对NN问题的。其实,这种问题本来是很容易解决的,只要设计好了数据相似度

2017-02-24 17:24:37 20924 6

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除