随笔分类 - 0081. 机器学习

摘要: 异常点检测,有时也叫离群点检测,英文一般叫做Novelty Detection或者Outlier Detection,是比较常见的一类非监督学习算法,这里就对异常点检测算法做一个总结。 1. 异常点检测算法使用场景 什么时候我们需要异常点检测算法呢?常见的有三种情况。一是在做特征工程的时候需要对异常阅读全文
posted @ 2018-07-15 19:19 刘建平Pinard 阅读(15270) | 评论 (30) 编辑
摘要: 在机器学习用于产品的时候,我们经常会遇到跨平台的问题。比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环境比如Java,为了上一个机器学习模型去大动干戈修改环境配置很不划算,此时我们就可以考虑用预测模型标阅读全文
posted @ 2018-06-24 15:18 刘建平Pinard 阅读(11237) | 评论 (15) 编辑
摘要: 在贝叶斯个性化排序(BPR)算法小结中,我们对贝叶斯个性化排序(Bayesian Personalized Ranking, 以下简称BPR)的原理做了讨论,本文我们将从实践的角度来使用BPR做一个简单的推荐。由于现有主流开源类库都没有BPR,同时它又比较简单,因此用tensorflow自己实现一个阅读全文
posted @ 2018-06-10 17:29 刘建平Pinard 阅读(6077) | 评论 (22) 编辑
摘要: 在矩阵分解在协同过滤推荐算法中的应用中,我们讨论过像funkSVD之类的矩阵分解方法如何用于推荐。今天我们讲另一种在实际产品中用的比较多的推荐算法:贝叶斯个性化排序(Bayesian Personalized Ranking, 以下简称BPR),它也用到了矩阵分解,但是和funkSVD家族却有很多不阅读全文
posted @ 2018-06-03 16:22 刘建平Pinard 阅读(9234) | 评论 (12) 编辑
摘要: 在前面我们分别讨论了特征工程中的特征选择与特征表达,本文我们来讨论特征预处理的相关问题。主要包括特征的归一化和标准化,异常特征样本清洗与样本数据不平衡问题的处理。 1. 特征的标准化和归一化 由于标准化和归一化这两个词经常混用,所以本文不再区别标准化和归一化,而通过具体的标准化和归一化方法来区别具体阅读全文
posted @ 2018-05-26 20:23 刘建平Pinard 阅读(9491) | 评论 (45) 编辑
摘要: 在特征工程之特征选择中,我们讲到了特征选择的一些要点。本篇我们继续讨论特征工程,不过会重点关注于特征表达部分,即如果对某一个特征的具体表现形式做处理。主要包括缺失值处理,特殊的特征处理比如时间和地理位置处理,离散特征的连续化和离散化处理,连续特征的离散化处理几个方面。 1. 缺失值处理 特征有缺失值阅读全文
posted @ 2018-05-19 22:39 刘建平Pinard 阅读(9965) | 评论 (56) 编辑
摘要: 特征工程是数据分析中最耗时间和精力的一部分工作,它不像算法和模型那样是确定的步骤,更多是工程上的经验和权衡。因此没有统一的方法。这里只是对一些常用的方法做一个总结。本文关注于特征选择部分。后面还有两篇会关注于特征表达和特征预处理。 1. 特征的来源 在做数据分析的时候,特征的来源一般有两块,一块是业阅读全文
posted @ 2018-05-13 20:13 刘建平Pinard 阅读(16496) | 评论 (71) 编辑
摘要: EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断等等。本文就对EM算法的原理做一个总结。 1. EM算法要解决的问题 我们经常会从样本观察数据中,找出样本的模型参阅读全文
posted @ 2017-05-27 17:12 刘建平Pinard 阅读(40439) | 评论 (100) 编辑
摘要: 对于分解机(Factorization Machines,FM)推荐算法原理,本来想自己单独写一篇的。但是看到peghoty写的FM不光简单易懂,而且排版也非常好,因此转载过来,自己就不再单独写FM了。 Pinard注:上面最后一句话应该是"而$g_{\theta}(x)$则利用$\widehat{阅读全文
posted @ 2017-02-06 14:06 刘建平Pinard 阅读(21159) | 评论 (46) 编辑
摘要: 在矩阵分解在协同过滤推荐算法中的应用中,我们对矩阵分解在推荐算法中的应用原理做了总结,这里我们就从实践的角度来用Spark学习矩阵分解推荐算法。 1. Spark推荐算法概述 在Spark MLlib中,推荐算法这块只实现了基于矩阵分解的协同过滤推荐算法。而基于的算法是FunkSVD算法,即将m个用阅读全文
posted @ 2017-02-04 15:55 刘建平Pinard 阅读(12060) | 评论 (22) 编辑
摘要: 在协同过滤推荐算法总结中,我们讲到了用图模型做协同过滤的方法,包括SimRank系列算法和马尔科夫链系列算法。现在我们就对SimRank算法在推荐系统的应用做一个总结。 1. SimRank推荐算法的图论基础 SimRank是基于图论的,如果用于推荐算法,则它假设用户和物品在空间中形成了一张图。而这阅读全文
posted @ 2017-02-03 15:56 刘建平Pinard 阅读(8870) | 评论 (24) 编辑
摘要: 在协同过滤推荐算法总结中,我们讲到了用矩阵分解做协同过滤是广泛使用的方法,这里就对矩阵分解在协同过滤推荐算法中的应用做一个总结。(过年前最后一篇!祝大家新年快乐!明年的目标是写120篇机器学习,深度学习和NLP相关的文章) 1. 矩阵分解用于推荐算法要解决的问题 在推荐系统中,我们常常遇到的问题是这阅读全文
posted @ 2017-01-26 12:28 刘建平Pinard 阅读(22755) | 评论 (52) 编辑
摘要: 推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究。推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。 1. 推荐算法概述 推荐算法是非常古老的,在机器学习还没有兴起的时候阅读全文
posted @ 2017-01-25 15:12 刘建平Pinard 阅读(30761) | 评论 (31) 编辑
摘要: 在FP Tree算法原理总结和PrefixSpan算法原理总结中,我们对FP Tree和PrefixSpan这两种关联算法的原理做了总结,这里就从实践的角度介绍如何使用这两个算法。由于scikit-learn中没有关联算法的类库,而Spark MLlib有,本文的使用以Spark MLlib作为使用阅读全文
posted @ 2017-01-22 14:24 刘建平Pinard 阅读(6295) | 评论 (10) 编辑
摘要: 前面我们讲到频繁项集挖掘的关联算法Apriori和FP Tree。这两个算法都是挖掘频繁项集的。而今天我们要介绍的PrefixSpan算法也是关联算法,但是它是挖掘频繁序列模式的,因此要解决的问题目标稍有不同。 1. 项集数据和序列数据 首先我们看看项集数据和序列数据有什么不同,如下图所示。 左边的阅读全文
posted @ 2017-01-20 23:13 刘建平Pinard 阅读(11429) | 评论 (15) 编辑
摘要: 在Apriori算法原理总结中,我们对Apriori算法的原理做了总结。作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈。为了解决这个问题,FP Tree算法(也称FP Growth算法)采用了一些技巧,无论多少数据,只需要扫描两次数据集,因此提高了算法运行的效率。阅读全文
posted @ 2017-01-19 21:19 刘建平Pinard 阅读(15480) | 评论 (20) 编辑
摘要: Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合的模式有助于我们做一些决策。比如在常见的超市购物数据集,或者电商的网购数据集中,如果我们找到了频繁出现的数据集,那么对于超市,我们可以优化产品的位置摆放,对于电商,我们可以优化商品所在的仓库位置阅读全文
posted @ 2017-01-17 17:05 刘建平Pinard 阅读(32324) | 评论 (30) 编辑
摘要: 典型关联分析(Canonical Correlation Analysis,以下简称CCA)是最常用的挖掘数据关联关系的算法之一。比如我们拿到两组数据,第一组是人身高和体重的数据,第二组是对应的跑步能力和跳远能力的数据。那么我们能不能说这两组数据是相关的呢?CCA可以帮助我们分析这个问题。 1. C阅读全文
posted @ 2017-01-16 17:19 刘建平Pinard 阅读(9072) | 评论 (18) 编辑
摘要: 在局部线性嵌入(LLE)原理总结中,我们对流形学习中的局部线性嵌入(LLE)算法做了原理总结。这里我们就对scikit-learn中流形学习的一些算法做一个介绍,并着重对其中LLE算法的使用方法做一个实践上的总结。 1. scikit-learn流形学习库概述 在scikit-learn中,流形学习阅读全文
posted @ 2017-01-11 16:32 刘建平Pinard 阅读(3495) | 评论 (0) 编辑
摘要: 局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法。和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由于LLE在降维时保持了样本的局部特征,它广泛的用于图像图像识别,高维数据可视化等领域。下面我们就对L阅读全文
posted @ 2017-01-10 12:34 刘建平Pinard 阅读(20463) | 评论 (61) 编辑
摘要: 奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石。本文就对SVD的原理做一个总结,并讨论在在PCA降维算法中是如何运用运用SV阅读全文
posted @ 2017-01-05 15:44 刘建平Pinard 阅读(107165) | 评论 (81) 编辑
摘要: 在线性判别分析LDA原理总结中,我们对LDA降维的原理做了总结,这里我们就对scikit-learn中LDA的降维使用做一个总结。 1. 对scikit-learn中LDA类概述 在scikit-learn中, LDA类是sklearn.discriminant_analysis.LinearDis阅读全文
posted @ 2017-01-04 17:04 刘建平Pinard 阅读(14258) | 评论 (23) 编辑
摘要: 在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结。这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结。LDA在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了阅读全文
posted @ 2017-01-03 16:47 刘建平Pinard 阅读(116291) | 评论 (116) 编辑
摘要: 在主成分分析(PCA)原理总结中,我们对主成分分析(以下简称PCA)的原理做了总结,下面我们就总结下如何使用scikit-learn工具来进行PCA降维。 1. scikit-learn PCA类介绍 在scikit-learn中,与PCA相关的类都在sklearn.decomposition包中。阅读全文
posted @ 2017-01-02 20:55 刘建平Pinard 阅读(55265) | 评论 (44) 编辑
摘要: 主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。一般我们提到降维最容易想到的算法就是PCA,下面我们就对PCA的原理做一个总结。 1. PCA的思想 PCA顾名思义,就是找出数据里最阅读全文
posted @ 2016-12-31 21:07 刘建平Pinard 阅读(77068) | 评论 (139) 编辑
摘要: 在谱聚类(spectral clustering)原理总结中,我们对谱聚类的原理做了总结。这里我们就对scikit-learn中谱聚类的使用做一个总结。 1. scikit-learn谱聚类概述 在scikit-learn的类库中,sklearn.cluster.SpectralClustering阅读全文
posted @ 2016-12-30 17:16 刘建平Pinard 阅读(13442) | 评论 (23) 编辑
摘要: 谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也不复杂。在处理实际的聚类问题时,个人认为谱聚类是应该首先考虑的几种算法之一。下面我们就对谱聚类的算法阅读全文
posted @ 2016-12-29 11:11 刘建平Pinard 阅读(86707) | 评论 (162) 编辑
摘要: 在DBSCAN密度聚类算法中,我们对DBSCAN聚类算法的原理做了总结,本文就对如何用scikit-learn来学习DBSCAN聚类做一个总结,重点讲述参数的意义和需要调参的参数。 1. scikit-learn中的DBSCAN类 在scikit-learn中,DBSCAN算法类为sklearn.c阅读全文
posted @ 2016-12-24 18:54 刘建平Pinard 阅读(37731) | 评论 (45) 编辑
摘要: DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用阅读全文
posted @ 2016-12-22 16:32 刘建平Pinard 阅读(86778) | 评论 (55) 编辑
摘要: 在BIRCH聚类算法原理中,我们对BIRCH聚类算法的原理做了总结,本文就对scikit-learn中BIRCH算法的使用做一个总结。 1. scikit-learn之BIRCH类 在scikit-learn中,BIRCH类实现了原理篇里讲到的基于特征树CF Tree的聚类。因此要使用BIRCH来聚阅读全文
posted @ 2016-12-19 22:00 刘建平Pinard 阅读(8718) | 评论 (23) 编辑
摘要: 在K-Means聚类算法原理中,我们讲到了K-Means和Mini Batch K-Means的聚类原理。这里我们再来看看另外一种常见的聚类算法BIRCH。BIRCH算法比较适合于数据量大,类别数K也比较多的情况。它运行速度很快,只需要单遍扫描数据集就能进行聚类,当然需要用到一些技巧,下面我们就对B阅读全文
posted @ 2016-12-14 17:13 刘建平Pinard 阅读(24902) | 评论 (44) 编辑
摘要: 在K-Means聚类算法原理中,我们对K-Means的原理做了总结,本文我们就来讨论用scikit-learn来学习K-Means聚类。重点讲述如何选择合适的k值。 1. K-Means类概述 在scikit-learn中,包括两个K-Means的算法,一个是传统的K-Means算法,对应的类是KM阅读全文
posted @ 2016-12-13 15:50 刘建平Pinard 阅读(42206) | 评论 (34) 编辑
摘要: K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体方法。包括初始化优化K-Means++, 距离计算优化elkan K-Means算法和大数据情况下的阅读全文
posted @ 2016-12-12 16:57 刘建平Pinard 阅读(62823) | 评论 (38) 编辑
摘要: 在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结。本文就从实践的角度对RF做一个总结。重点讲述scikit-learn中RF的调参注意事项,以及和GBDT调参的异同点。 1. scikit-learn随机森林类库概述 在scikit阅读全文
posted @ 2016-12-11 21:23 刘建平Pinard 阅读(54844) | 评论 (69) 编辑
摘要: 在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系。另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。本文就对集成学习中Bagging与随机森林算法做一个总结。 随机森林是集成学习中可以和梯度提升树GB阅读全文
posted @ 2016-12-10 20:38 刘建平Pinard 阅读(60324) | 评论 (72) 编辑
摘要: 在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点。 1. scikit-learn GBDT类库概述 在sacikit-learn中,GradientBoostingClassifie阅读全文
posted @ 2016-12-09 17:17 刘建平Pinard 阅读(40487) | 评论 (66) 编辑
摘要: 在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)做一个总结。GBDT有很多简称,有GBT(Gradient阅读全文
posted @ 2016-12-07 19:59 刘建平Pinard 阅读(166949) | 评论 (357) 编辑
摘要: 在集成学习之Adaboost算法原理小结中,我们对Adaboost的算法原理做了一个总结。这里我们就从实用的角度对scikit-learn中Adaboost类库的使用做一个小结,重点对调参的注意事项做一个总结。 1. Adaboost类库概述 scikit-learn中Adaboost类库比较直接,阅读全文
posted @ 2016-12-06 19:41 刘建平Pinard 阅读(34178) | 评论 (53) 编辑
摘要: 在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系。前者的代表算法就是是boosting系列算法。在boosting系列算法中, Adaboost是最著名的算法之一。Adaboost既可阅读全文
posted @ 2016-12-05 22:26 刘建平Pinard 阅读(47509) | 评论 (196) 编辑
摘要: 集成学习(ensemble learning)可以说是现在非常火爆的机器学习方法了。它本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。也就是我们常说的“博采众长”。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等,可以说所有的机器学习领域都阅读全文
posted @ 2016-12-04 20:48 刘建平Pinard 阅读(50209) | 评论 (45) 编辑
摘要: 在支持向量机(以下简称SVM)的核函数中,高斯核(以下简称RBF)是最常用的,从理论上讲, RBF一定不比线性核函数差,但是在实际应用中,却面临着几个重要的超参数的调优问题。如果调的不好,可能比线性核函数还要差。所以我们实际应用中,能用线性核函数得到较好效果的都会选择线性核函数。如果线性核不好,我们阅读全文
posted @ 2016-12-02 21:59 刘建平Pinard 阅读(15645) | 评论 (19) 编辑
摘要: 之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践的角度对scikit-learn SVM算法库的使用做一个小结。scikit-learn SVM算法库封装了libsvm 和 liblinear 的实现,仅仅重写了算法了接口部分。 1. scikit-learn SVM阅读全文
posted @ 2016-11-30 16:47 刘建平Pinard 阅读(25901) | 评论 (22) 编辑
摘要: 支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五)线性支持回归 在前四篇里面我们讲到了SVM的线性分类和非线性分类,以及在分类时用到的算法。这些都关注阅读全文
posted @ 2016-11-29 16:53 刘建平Pinard 阅读(16848) | 评论 (31) 编辑
摘要: 支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五)线性支持回归 在SVM的前三篇里,我们优化的目标函数最终都是一个关于$\alpha$向量的函数。而怎阅读全文
posted @ 2016-11-29 00:11 刘建平Pinard 阅读(38562) | 评论 (115) 编辑
摘要: 支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五)线性支持回归 在前面两篇我们讲到了线性可分SVM的硬间隔最大化和软间隔最大化的算法,它们对线性可分的阅读全文
posted @ 2016-11-26 11:33 刘建平Pinard 阅读(15473) | 评论 (19) 编辑
摘要: 支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五)线性支持回归 在支持向量机原理(一) 线性支持向量机中,我们对线性可分SVM的模型和损失函数优化做了阅读全文
posted @ 2016-11-25 14:21 刘建平Pinard 阅读(17965) | 评论 (49) 编辑
摘要: 支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五)线性支持回归 支持向量机(Support Vecor Machine,以下简称SVM)虽然诞生只有短阅读全文
posted @ 2016-11-24 21:33 刘建平Pinard 阅读(49076) | 评论 (63) 编辑
摘要: 最大熵模型(maximum entropy model, MaxEnt)也是很典型的分类算法了,它和逻辑回归类似,都是属于对数线性分类模型。在损失函数优化的过程中,使用了和支持向量机类似的凸优化技术。而对熵的使用,让我们想起了决策树算法中的ID3和C4.5算法。理解了最大熵模型,对逻辑回归,支持向量阅读全文
posted @ 2016-11-23 20:33 刘建平Pinard 阅读(20377) | 评论 (52) 编辑
摘要: 之前在朴素贝叶斯算法原理小结这篇文章中,对朴素贝叶斯分类算法的原理做了一个总结。这里我们就从实战的角度来看朴素贝叶斯类库。重点讲述scikit-learn 朴素贝叶斯类库的使用要点和参数选择。 1. scikit-learn 朴素贝叶斯类库概述 朴素贝叶斯是一类比较简单的算法,scikit-lear阅读全文
posted @ 2016-11-17 17:03 刘建平Pinard 阅读(21571) | 评论 (19) 编辑
摘要: 在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数$Y=f(X)$,要么是条件分布$P(Y|X)$。但是朴素贝叶斯却是生成方法,也就是直阅读全文
posted @ 2016-11-16 17:25 刘建平Pinard 阅读(55579) | 评论 (63) 编辑
摘要: 在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结。主要关注于类库调参时的一个经验总结。 1. scikit-learn 中KNN相关的类库概述 在scikit-learn 中,与近邻法这一大类相关阅读全文
posted @ 2016-11-15 16:29 刘建平Pinard 阅读(16640) | 评论 (6) 编辑
摘要: K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用。比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用了KNN的思想。KNN方法既可以做分类,也可以做回归,这点和决策树算法相同。 KNN阅读全文
posted @ 2016-11-14 20:13 刘建平Pinard 阅读(31775) | 评论 (63) 编辑
摘要: 之前对决策树的算法原理做了总结,包括决策树算法原理(上)和决策树算法原理(下)。今天就从实践的角度来介绍决策树算法,主要是讲解使用scikit-learn来跑决策树算法,结果的可视化以及一些参数调参的关键点。 1. scikit-learn决策树算法类库介绍 scikit-learn决策树算法类库内阅读全文
posted @ 2016-11-12 14:28 刘建平Pinard 阅读(77054) | 评论 (74) 编辑
摘要: 在决策树算法原理(上)这篇里,我们讲到了决策树里ID3算法,和ID3算法的改进版C4.5算法。对于C4.5算法,我们也提到了它的不足,比如模型是用较为复杂的熵来度量,使用了相对较为复杂的多叉树,只能处理分类不能处理回归等。对于这些问题, CART算法大部分做了改进。CART算法也就是我们下面的重点了阅读全文
posted @ 2016-11-11 16:10 刘建平Pinard 阅读(50185) | 评论 (170) 编辑
摘要: 决策树算法在机器学习中算是很经典的一个算法系列了。它既可以作为分类算法,也可以作为回归算法,同时也特别适合集成学习比如随机森林。本文就对决策树算法原理做一个总结,上篇对ID3, C4.5的算法思想做了总结,下篇重点对CART算法做一个详细的介绍。选择CART做重点介绍的原因是scikit-learn阅读全文
posted @ 2016-11-10 15:54 刘建平Pinard 阅读(56818) | 评论 (78) 编辑
摘要: 在学习机器学习算法的过程中,我们经常需要数据来验证算法,调试参数。但是找到一组十分合适某种特定算法类型的数据样本却不那么容易。还好numpy, scikit-learn都提供了随机数据生成的功能,我们可以自己生成适合某一种模型的数据,用随机数据来做清洗,归一化,转换,然后选择模型与算法做拟合和预测。阅读全文
posted @ 2016-11-09 22:03 刘建平Pinard 阅读(13964) | 评论 (7) 编辑
摘要: 感知机可以说是最古老的分类方法之一了,在1957年就已经提出。今天看来它的分类模型在大多数时候泛化能力不强,但是它的原理却值得好好研究。因为研究透了感知机模型,学习支持向量机的话会降低不少难度。同时如果研究透了感知机模型,再学习神经网络,深度学习,也是一个很好的起点。这里对感知机的原理做一个小结。 阅读全文
posted @ 2016-11-08 16:23 刘建平Pinard 阅读(19524) | 评论 (65) 编辑
摘要: 之前在逻辑回归原理小结这篇文章中,对逻辑回归的原理做了小结。这里接着对scikit-learn中逻辑回归类库的我的使用经验做一个总结。重点讲述调参中要注意的事项。 1. 概述 在scikit-learn中,与逻辑回归有关的主要是这3个类。LogisticRegression, LogisticReg阅读全文
posted @ 2016-11-06 19:41 刘建平Pinard 阅读(26764) | 评论 (37) 编辑
摘要: 逻辑回归是一个分类算法,它可以处理二元分类以及多元分类。虽然它名字里面有“回归”两个字,却不是一个回归算法。那为什么有“回归”这个误导性的词呢?个人认为,虽然逻辑回归是分类模型,但是它的原理里面却残留着回归模型的影子,本文对逻辑回归原理做一个总结。 1. 从线性回归到逻辑回归 我们知道,线性回归的模阅读全文
posted @ 2016-11-04 21:22 刘建平Pinard 阅读(44355) | 评论 (106) 编辑
摘要: scikit-learn对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析,本文就对这些类库的使用做一个总结,重点讲述这些线性回归算法库的不同和各自的使用场景。 线性回归的目的是要得到输出向量\(\mathbf{Y}\)和输入特征\(\mathbf{X}\)之间的线性关系,求出线性回归阅读全文
posted @ 2016-11-03 23:41 刘建平Pinard 阅读(15382) | 评论 (24) 编辑
摘要: 本文将用一个例子来讲述怎么用scikit-learn和pandas来学习Ridge回归。 1. Ridge回归的损失函数 在我的另外一遍讲线性回归的文章中,对Ridge回归做了一些介绍,以及什么时候适合用 Ridge回归。如果对什么是Ridge回归还完全不清楚的建议阅读我这篇文章。 线性回归原理小结阅读全文
posted @ 2016-11-02 16:34 刘建平Pinard 阅读(10975) | 评论 (31) 编辑
摘要: 前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结。里面对线程回归的正则化也做了一个初步的介绍。提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归。但是对于Lasso回归的解法没有提及,本文是对该文的补充和扩展。以下都用矩阵法表示,如果对于矩阵分析不熟悉阅读全文
posted @ 2016-11-01 17:29 刘建平Pinard 阅读(32108) | 评论 (38) 编辑
摘要: 对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题 没有数据,当然没法研究机器学习啦。:) 这里我们用UCI大学公开的机器学习数据来跑线性回归。 数据的介绍在这: http://ar阅读全文
posted @ 2016-10-31 17:37 刘建平Pinard 阅读(52932) | 评论 (49) 编辑
摘要: 很多朋友想学习机器学习,却苦于环境的搭建,这里给出windows上scikit-learn研究开发环境的搭建步骤。 Step 1. Python的安装 python有2.x和3.x的版本之分,但是很多好的机器学习python库都不支持3.x,因此,推荐安装2.7版本的python。当前最新的pyth阅读全文
posted @ 2016-10-30 17:37 刘建平Pinard 阅读(7058) | 评论 (6) 编辑
摘要: 线性回归可以说是机器学习中最基本的问题类型了,这里就对线性回归的原理和算法做一个小结。 1. 线性回归的模型函数和损失函数 线性回归遇到的问题一般是这样的。我们有m个样本,每个样本对应于n维特征和一个结果输出,如下: \((x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_阅读全文
posted @ 2016-10-28 11:12 刘建平Pinard 阅读(23966) | 评论 (72) 编辑
摘要: 在机器学习的算法评估中,尤其是分类算法评估中,我们经常听到精确率(precision)与召回率(recall),RoC曲线与PR曲线这些概念,那这些概念到底有什么用处呢? 首先,我们需要搞清楚几个拗口的概念: 1. TP, FP, TN, FN 听起来还是很费劲,不过我们用一张图就很容易理解了。图如阅读全文
posted @ 2016-10-24 16:22 刘建平Pinard 阅读(14546) | 评论 (17) 编辑
摘要: 交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓阅读全文
posted @ 2016-10-24 15:28 刘建平Pinard 阅读(32208) | 评论 (34) 编辑
摘要: 最小二乘法是用来做函数拟合或者求函数极值的方法。在机器学习,尤其是回归模型中,经常可以看到最小二乘法的身影,这里就对我对最小二乘法的认知做一个小结。 1.最小二乘法的原理与要解决的问题 最小二乘法是由勒让德在19世纪发现的,原理的一般形式很简单,当然发现的过程是非常艰难的。形式如下式:$$目标函数 阅读全文
posted @ 2016-10-19 12:31 刘建平Pinard 阅读(26961) | 评论 (33) 编辑
摘要: 在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。这里就对梯度下降法做一个完整的总结。 1. 梯度 在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数阅读全文
posted @ 2016-10-17 22:49 刘建平Pinard 阅读(229209) | 评论 (134) 编辑