上一篇我们介绍了Fisher线性判别分析的原理及实现,而在判别分析中还有一个很重要的分支叫做二次判别,本文就对二次判别进行介绍: 二次判别属于距离判别法中的内容,以两总体距离判别法为例,对总体G1,,G2,当他们各自的协方差矩阵Σ1,Σ2不相等时,判别函数因为表达式不可化简而不再是线性的而是二次的,这时使用的构造二次判别函数进行判别类别的方法叫做二次判别法,下面分别在R和Python中实现二次判别: R 在R中,常用的二次判别函数qda(formula,data)集成在MASS包中,其中form…
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 进程是计算机系统中资源分配的最小单位,也是操作系统可以控制的最小单位,在数据科学中很多涉及大量计算.CPU密集型的任务都可以通过多进程并行运算的方式大幅度提升运算效率从而节省时间开销,而在Python中实现多进程有多种方式,本文就将针对其中较为易用的几种方式进行介绍. 二.利用multiprocessing实现多进程 multiprocessin…
上一篇中我们详细介绍推导了主成分分析法的原理,并基于Python通过自编函数实现了挑选主成分的过程,而在Python与R中都有比较成熟的主成分分析函数,本篇我们就对这些方法进行介绍: R 在R的基础函数中就有主成分分析法的实现函数princomp(),其主要参数如下: data:要进行主成分分析的目标数据集,数据框形式,行代表样本,列代表变量 cor:逻辑型变量,控制是否使用相关系数进行主成分分析 scores:逻辑型变量,控制是否计算每个主成分的得分 我们使用了R中自带的数据集USJudgeR…
主成分分析(principal component analysis,简称PCA)是一种经典且简单的机器学习算法,其主要目的是用较少的变量去解释原来资料中的大部分变异,期望能将现有的众多相关性很高的变量转化为彼此互相独立的变量,并从中选取少于原始变量数目且能解释大部分资料变异情况的若干新变量,达到降维的目的,下面我们先对PCA算法的思想和原理进行推导: 主成分即为我们通过原始变量的线性组合得到的新变量,这里假设xi(i=1,2,...,p)为原始变量,yi(i=1,2,...,p)为主成分,他们…
DBSCAN算法是一种很典型的密度聚类法,它与K-means等只能对凸样本集进行聚类的算法不同,它也可以处理非凸集. 关于DBSCAN算法的原理,笔者觉得下面这篇写的甚是清楚练达,推荐大家阅读: https://www.cnblogs.com/pinard/p/6208966.html DBSCAN的主要优点有: 1) 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集. 2) 可以在聚类的同时发现异常点,对数据集中的异常点不敏感. 3) 聚类结果没有偏…
kmeans法(K均值法)是麦奎因提出的,这种算法的基本思想是将每一个样本分配给最靠近中心(均值)的类中,具体的算法至少包括以下三个步骤: 1.将所有的样品分成k个初始类: 2.通过欧氏距离将某个样品划入离中心最近的类中,并对获得样品与失去样品的类重新计算中心坐标: 3.重复步骤2,直到所有的样品都不能在分类为止 kmeans法与系统聚类法一样,都是以距离的远近亲疏为标准进行聚类的.但是两者的不同之处也很明显:系统聚类对不同的类数产生一系列的聚类结果,而K均值法只能产生指定类数的聚类结果.具体类…
上一篇笔者以自己编写代码的方式实现了重心法下的系统聚类(又称层次聚类)算法,通过与Scipy和R中各自自带的系统聚类方法进行比较,显然这些权威的快捷方法更为高效,那么本篇就系统地介绍一下Python与R各自的系统聚类算法: Python cluster是Scipy中专门用来做聚类的包,其中包括cluster.vq矢量量化包,里面封装了k-means方法,还包括cluster.hierarchy,里面封装了层次聚类和凝聚聚类的方法,本文只介绍后者中的层级聚类方法,即系统聚类方法,先从一个简单的小例…
一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原生ggplot2图像进行美化,掌握它之后你就可以创作出更具特色和美感的数据可视化作品. 二.基础内容 2.1 安装 不同于常规的R包,ggthemr并没有在CRAN上发布,因此我们需要使用devtools中的install_github()直接从github上安装它,参照github上ggthemr…
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文章中我们只介绍了如何利用urllib.requests这样的请求库来将我们的程序模拟成一个请求网络服务的一端,来直接取得设置好的url地址中朴素的网页内容,再利用BeautifulSoup或pyspider这样的解析库来对获取的网页内容进行解析,在初级篇中我们也只了解到如何爬取静态网页,那是网络爬虫…
一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹配的基本格式如下: data match { case ... => 执行语句 case ... => 执行语句 case _  => 执行语句 } 其中,data表示将要进行模式匹配的对象,match是模式匹配的关键字,后面紧跟的{}中包含若干条匹配的方向,且只会匹配其中满足条件的第一条:…
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集实战 2.1 数据要求 这次我们需要采集的数据是知名旅游网站马蜂窝下重庆区域内所有景点的用户评论数据,如下图所示: 思路是,先获取所有景点的poi ID,即每一个景点主页url地址中的唯一数字: 这一步和(数据科学学习手札33)基于Python的网络数据采集实战(1)中做法类似,即在下述界面: 翻页…
一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度学习框架中的sklearn,本文就将基于Keras,以手写数字数据集MNIST为演示数据,对多层感知机(MLP)的训练方法进行一个基本的介绍,而关于多层感知机的相关原理,请移步数据科学学习手札34:https://www.cnblogs.com/feffery/p/8996623.html,本文不再…
一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些基本示例来展开说明: 二.处理GeoJSON和TopoJSON数据 2.1 GeoJSON数据 GeoJSON是语法规则符合JSON文件的,专用于表示地理信息的一种JSON文件,其在JSON语法的基础上,内部又有着一套固定的语法规则.在folium中我们使用folium.GeoJson()方法来为已…
一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完成任务,若你对RNN及LSTM不甚了解,请移步上一篇数据科学学习手札39; 二.数据说明及预处理 2.1 数据说明 我们本文使用到的第一个数据来自R中自带的数据集AirPassengers,这个数据集记录了Box & Jenkins航空公司1949-1960年共144个观测值(对应每个月的国际航线乘…
一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.neural_network中的MLP来实现多层感知机之外,利用tensorflow来实现MLP更加形象,使得使用者对要搭建的神经网络的结构有一个更加清醒的认识,本文就将对tensorflow搭建MLP模型的方法进行一个简单的介绍,并实现MNIST数据集的分类任务: 二.MNIST分类 作为数据挖掘工…
一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供了一系列方法来完成几乎全部类型的文本信息的处理工作,下面一一介绍: 二.re.compile() 在前一篇文章中我们使用过这个方法,它通过编译正则表达式参数,来返回一个目标对象的匹配模式,进而提高了正则表达式的效率,主要参数如下: pattern:输入的欲编译正则表达式,需将正则表达式包裹在''内传…
*从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方便简洁的方法,用于对单列.多列数据进行批量运算或分组聚合运算,熟悉这些方法后可极大地提升数据分析的效率,也会使得你的代码更加地优雅简洁,本文就将针对pandas中的map().apply().applymap().groupby().agg()等方法展开详细介绍,并结合实际例子帮助大家更好地理解它们…
一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于Python的网络数据采集-selenium篇),xpath中还存在着非常之多的进阶用法,本文将对笔者日常使用中积累的xpath进阶用法进行总结并举例说明: 二.xpath进阶用法 本文以http://quotes.toscrape.com/示例页面,首先抓取网页源码并利用etree解析: impor…
一.简介 经常利用Python进行数据可视化的朋友一定用过或听说过plotly这样的神器,我在(数据科学学习手札43)Plotly基础内容介绍中也曾做过非常详细的介绍,其渲染出的图像以浏览器为载体,非常精美,且绘制图像的自由程度堪比ggplot2,其为R也提供了接口,在plotly包中,但对于已经习惯用ggplot2进行可视化的朋友而言,自然是不太乐意转向plotly的学习,有趣的是plotly的R包中有着函数ggplotly(),可以将ggplot2生成的图像转换为交互式的plotly图像,且…
1 简介 在数据分析任务中,从原始数据读入,到最后分析结果出炉,中间绝大部分时间都是在对数据进行一步又一步的加工规整,以流水线(pipeline)的方式完成此过程更有利于梳理分析脉络,也更有利于查错改正.pdpipe作为专门针对pandas进行流水线化改造的模块,为熟悉pandas的数据分析人员书写优雅易读的代码提供一种简洁的思路,本文就将针对pdpipe的用法进行介绍. 2 pdpipe常用功能介绍 pdpipe的出现极大地对数据分析过程进行规范,其主要拥有以下特性: 简洁的语法逻辑 在流水线…
本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的数据结构展开了较为全面的学习,其中涉及到面积长度等计算的过程中提到了具体的计算结果与所选择的投影坐标系关系密切,投影坐标系选择的不恰当会带来计算结果的偏差,直接关乎整个分析过程的有效与否. 作为基于geopandas的空间数据分析系列文章的第二篇,通过本文你将会学习到geopandas中的坐标参考系管理.…
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会需要某个地区的道路网络及节点数据,而OpenStreetMap就是一个很好的数据来源(譬如图1柏林路网): 图1 通常我们可以在 https://www.openstreetmap.org/export 中选择矩形区域内的路网矢量数据进行下载,但这种方式对选择区域的大小有一定限制,想获取较大范围区域…
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 Kepler.gl作为一款强大的开源地理信息数据可视化工具,可以帮助我们轻松制作针对大规模矢量数据的可视化作品,从而辅助数据分析工作. Kepler.gl制作常规地图非常简单方便,稍微摸索一下仪表盘界面就可以get到用法,但有些特殊的地图则需要额外对数据进行处理或使用Kepler.gl中的一些隐藏功能,譬如之前写过的(数据科学学习手札85)…
本文示例代码.数据及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在本系列之前的文章中我们主要讨论了geopandas及其相关库在数据可视化方面的应用,各个案例涉及的数据预处理过程也仅仅涉及到基础的矢量数据处理.在实际的空间数据分析过程中,数据可视化只是对最终分析结果的发布与展示,在此之前,根据实际任务的不同,需要衔接很多较为进阶的空间操作,本文就将对geopandas中的部分空间计算进行介绍. 本…
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web应用开发的第十七期,在之前的各期教程中,我们针对Dash中各种基础且常用的概念展开了学习,但一直没有针对与数据库之间交互进行专门的介绍,只是在某些示例中利用pandas.SQLAlchemy等工具简陋地操作数据库. 而在今天的教程中,我就将带大家学习在Dash中利用简单好用的ORM库peewee,快…
一.简介 作为集成学习中非常著名的方法,随机森林被誉为“代表集成学习技术水平的方法”,由于其简单.容易实现.计算开销小,使得它在现实任务中得到广泛使用,因为其来源于决策树和bagging,决策树我在前面的一篇博客中已经详细介绍,下面就来简单介绍一下集成学习与Bagging: 二.集成学习 集成学习(ensemble learning)是指通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)等: 集成学习的一般结构如下: 可以看出,集成…
一.简介 ggplot2是R语言中四大著名绘图框架之一,且因为其极高的参数设置自由度和图像的美学感,即使其绘图速度不是很快,但丝毫不影响其成为R中最受欢迎的绘图框架:ggplot2的作者是现任Rstudio首席科学家的Hadley Wickham,ggplot2基于Leland Wilkinson在Grammar of Graphics(图形的语法)中提出的理论,取首字母缩写再加上plot,于是得名ggplot,末尾的2是因为Hadley写包的一个习惯——对先前的版本不满意便写一个新版本的名称不…
一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分类任务来说,在所有相关概率都已知的理想情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记结果. 二.贝叶斯决策论的基本原理 我们以多分类任务为例: 假设有N种可能的类别标记,即y={c1,c2,...,cN},λij是将一个真实类别为cj的样本误分类为ci的损失,基于后验概率P(…
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web应用开发的第九期,在之前三期的教程中,我们针对Dash中经常会用到的一些静态部件进行了较为详细的介绍,从而get到在Dash应用中组织静态内容的常用方法. 而从今天的教程开始,我将带大家来认识和学习Dash生态中非常实用的一些交互式部件,配合回调函数,可以帮助我们构建一个形式丰富的可接受输入,并反馈…
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常使用Python的过程中,我们经常会与json格式的数据打交道,尤其是那种嵌套结构复杂的json数据,从中抽取复杂结构下键值对数据的过程枯燥且费事. 而熟悉xpath的朋友都知道,对于xml格式类型的具有层次结构的数据,我们可以通过编写xpath语句来灵活地提取出满足某些结构规则的数据. 类似的,JSONPath也是用于从json数据…