算法
Zen of Data Analysis
Discover yourself, 不念过往,不畏将来,发掘数据之美
展开
-
机器学习-推荐系统之基于物品的协同过滤
推荐系统可以把那些最终会在用户( 推荐系统可以把那些最终会在用户( 推荐系统可以把那些最终会在用户( 推荐系统可以把那些最终会在用户( 推荐系统可以把那些最终会在用户( 推荐系统可以把那些最终会在用户( User )和物品( )和物品( Item Item )之间产生的 )之间产生的 连接 提前找出来。 提前找出来。 提...原创 2019-11-23 16:24:45 · 402 阅读 · 0 评论 -
机器学习-推荐系统之基于用户的协同过滤
人以群分 – 基于用户的协同过滤(User Collaborative Filtering,简称User CF)生活中可能有这样的朋友:他喜欢的书、电影,你也喜欢;他喜欢的衣服款式、美食餐厅你也十分推崇;……基本原理:通过用户对不同内容(物品)的行为,来评测用户之间的相似性,找到“邻居”基于这种相似性做出推荐:这种推荐的本质是,给相似的用户推荐其他用户喜欢的内容;这就是我们经常看...原创 2019-11-23 08:28:50 · 843 阅读 · 0 评论 -
Sklearn中的深度学习基础算法-神经网络MLP
sklearn是专注于机器学习的库,它在神经网络的模块中特地标注:sklearn不是用于深度学习的平台,因此这个神经网络不具备做深度学习的功能,也不具备处理大型数据的能力,所以神经网络在sklearn中颇有被冷落的意思。原理讲解也非常简单,并没有详细的描述。但是使用神经网络的类还是有很多参数,写法详细。以多层感知机为基础的类:MLPClassifier-神经网络分类器class sklear...原创 2019-11-22 12:19:50 · 6045 阅读 · 0 评论 -
深度学习基础算法-神经网络
2层神经网络的实现使用Numpy矩阵来实现神经网络。我们先使用最简单的网络去实现,这个神经网络去掉了偏置和激活函数,只有权重。这里我们假设每条线上对应的权重就是各自的数字,那么如果用函数来表示的话,应该是可以看到,这样的表示方法非常的复杂,不方便,因此我们把神经网络的表示方法,改变成矩阵的乘法形式:实现该神经网络时,要注意X ,W ,Y 的形状,特别是X和W的对应维度的元素个数是否一致...原创 2019-11-22 12:02:29 · 347 阅读 · 0 评论 -
深度学习基础算法-神经网络之激活函数
神经网络算法神经网络算法试图模拟生物神经系统的学习过程,以此实现强大的预测性能。不过由于是模仿人类大脑,所以神经网络的模型复杂度很高也是众所周知。在现实应用中,神经网络可以说是解释性最差的模型之一,商业环境中很少使用神经网络。然而除了商业分析,还有许多算法应用的部分,其中最重要的是深度学习和人工智能的领域,现在大部分已经成熟的人工智能技术:图像识别,语音识别等等,背后都是基于神经网络的深度学习算...原创 2019-11-22 11:03:00 · 440 阅读 · 0 评论 -
机器学习-二分类SVC中的样本不均衡问题:重要参数class_weight
样本不均衡问题对于分类问题,永远都逃不过的一个痛点就是样本不均衡问题。样本不均衡是指在一组数据集中,标签的一类天生占有很大的比例,但我们有着捕捉出某种特定的分类的需求的状况。比如,我们现在要对潜在犯罪者和普通人进行分类,潜在犯罪者占总人口的比例是相当低的,也许只有2%左右,98%的人都是普通人,而我们的目标是要捕获出潜在犯罪者。这样的标签分布会带来许多问题。首先,分类模型天生会倾向于多数的类,...原创 2019-11-13 18:28:00 · 7172 阅读 · 0 评论 -
机器学习-SVM硬间隔与软间隔:重要参数C
SVM在软间隔数据上的推广到这里,我们已经了解了线性SVC的基本原理,以及SVM如何被推广到非线性情况下,还了解了核函数的选择和应用。但实际上,我们依然没有完全了解SVM用于二分类的全貌。我们之前在理论推导中使用的数据都有一个特点,那就是他们或是完全线性可分,或者是非线性的数据。在我们对比核函数时,实际上用到了一种不同的数据,那就是不完全线性可分的数据集。比如说如下数据集:这个数据集和我们最...原创 2019-11-13 18:14:41 · 9127 阅读 · 0 评论 -
机器学习:SVM核函数的优势和缺陷
看起来,除了Sigmoid核函数,其他核函数效果都还不错。但其实rbf和poly都有自己的弊端,我们使用乳腺癌数据集作为例子来展示一下:from sklearn.datasets import load_breast_cancerfrom sklearn.svm import SVCfrom sklearn.model_selection import train_test_splitim...原创 2019-11-12 10:27:53 · 5174 阅读 · 0 评论 -
机器学习:非线性SVM核函数在不同数据集上的表现
问题引入除了"linear"以外的核函数都能够处理非线性情况,那究竟什么时候选择哪一个核函数呢?遗憾的是,关于核函数在不同数据集上的研究甚少,谷歌学术上的论文中也没有几篇是研究核函数在SVM中的运用的,更多的是关于核函数在深度学习,神经网络中如何使用。在sklearn中,也没有提供任何关于如何选取核函数的信息。但无论如何,还是可以通过在不同的核函数中循环去找寻最佳的核函数来对核函数进行一个选取...原创 2019-11-12 09:43:19 · 1351 阅读 · 0 评论 -
线性SVM决策过程的可视化
使用sklearn中的式子来可视化决策边界,支持向量,以及决策边界平行的两个超平面。导入需要的模块from sklearn.datasets import make_blobs #导入创造数据集的包from sklearn.svm import SVC #支持向量机分类器import matplotlib.pyplot as pltimport numpy as np实...原创 2019-11-11 22:42:01 · 2110 阅读 · 0 评论 -
非线性SVM-重要参数kernel
非线性SVM的决策函数:将数据从原始的空间投射到新空间中,这种变换非常巧妙,但也带有一些实现问题。 首先,我们可能不清楚应该什么样的数据应该使用什么类型的映射函数来确保可以在变换空间中找出线性决策边界。极端情况下,数据可能会被映射到无限维度的空间中,这种高维空间可能不是那么友好,维度越多,推导和计算的难度都会随之暴增。其次,即使已知适当的映射函数,我们想要计算类似于这样的点积,计算量可...原创 2019-11-04 20:36:45 · 998 阅读 · 0 评论 -
SVC在非线性数据上的推广
为了能够找出非线性数据的线性决策边界,我们需要将数据从原始的空间投射到新空间中。是一个映射函数,它代表了某种非线性的变换,如同我们之前所做过的使用r来升维一样,这种非线性变换看起来是一种非常有效的方式。使用这种变换,线性SVM的原理可以被很容易推广到非线性情况下,其推导过程和逻辑都与线性SVM一模一样,只不过在定义决策边界之前,我们必须先对数据进行升维度,即将原始的转换成。如此,非线性S...原创 2019-10-27 20:02:07 · 220 阅读 · 0 评论 -
机器学习:线性SVM转换拉格朗日对偶函数和决策函数
拉格朗日函数转换为拉格朗日对偶函数Why need求极值,最简单的方法还是对参数求导后让一阶导数等于0。先来试试对拉格朗日函数求极值,在这里对参数向量和截距分别求偏导并且让他们等于0。这个求导过程比较简单:由于两个求偏导结果中都带有未知的拉格朗日乘数αi,因此还是无法求解出ω和b,必须想出一种方法来求解拉格朗日乘数αi。幸运地是,拉格朗日函数可以被转换成一种只带αi,不带ω和b的形式,这...原创 2019-10-26 07:09:41 · 1308 阅读 · 0 评论 -
机器学习:线性SVM损失函数转换拉格朗日乘数
线性SVM的拉格朗日对偶函数和决策函数有了损失函数,就需要对损失函数进行求解。这个求解过程异常复杂,涉及到的数学的难度不是推导损失函数的部分可比。并且,在sklearn当中,我们作为使用者完全无法干涉这个求解的过程。因此作为使用sklearn的人,这部分属于进阶内容。之前得到了线性SVM损失函数的最初形态:minω,b∣∣ω∣∣22min_{ω,b}\frac {{||ω||}^2}2min...原创 2019-10-20 21:55:00 · 730 阅读 · 0 评论 -
机器学习:线性SVM的损失函数
要理解SVM的损失函数,先定义决策边界。假设现在数据中总计有个训练样本,每个训练样本i可以被表示为(xi)(x_i)(xi),其中是这样的一个特征向量,每个样本总共含有个特征。二分类标签的取值是{-1, 1}。如果n等于2,则有,分别由我们的特征向量和标签组成。此时我们可以在二维平面上,以为横坐标, 为纵坐标, 为颜色,来可视化我们所有的N个样本:我...原创 2019-10-20 12:20:33 · 868 阅读 · 0 评论 -
机器学习:支持向量机SVM
支持向量机(SVM,也称为支持向量网络),是机器学习中获得关注最多的算法没有之一。它源于统计学习理论,与集成算法一样,也是强学习器。从算法的功能来看,SVM几乎囊括了所有常用算法的功能:有监督学习:线性二分类与多分类(Linear Support Vector Classification)非线性二分类与多分类(Support Vector Classification, SVC)普通连续...原创 2019-10-19 21:48:14 · 777 阅读 · 0 评论 -
机器学习:算法模型的偏差 vs 方差
一个集成模型(f)在未知数据集(D)上的泛化误差E(f;D),由方差(var),偏差(bais)和噪声(ε)共同决定。E(f;D)=bias2(x)+var(x)+ϵ2E(f;D)=bias^2(x)+var(x)+\epsilon^2E(f;D)=bias2(x)+var(x)+ϵ2关键概念:偏差与方差观察下面的图像,每个点就是集成算法中的一个基评估器产生的预测值。红色虚线代表着这些预测值...原创 2019-10-19 12:20:03 · 1209 阅读 · 0 评论 -
机器学习模型的评估指标
机器学习的参数调整是为了更好的模型拟合度,那么其评估标准是什么,如何调整参数来提升模型的整体效果呢?调参的方式总是根据数据的状况而定,所以没有办法一概而论。通过画学习曲线,或者网格搜索,能够探索到调参边缘(代价可能是训练一次模型要跑三天三夜),“业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”。但是在现实中,高手调参恐怕还是多依赖于经验,而这些经验,来源于:1...原创 2019-10-19 11:13:38 · 507 阅读 · 0 评论 -
sklearn机器学习:AdaBoost回归器
上篇博文讨论了AdaBoost分类器,接下来一起看一下AdaBoost回归器如何工作。核心参数至于弱分类器,还是使用决策树,用一个小例子一起来看AdaBoostRegressor的使用。#AdaBoostRegressor#导入所需的模块和包import numpy as npimport matplotlib.pyplot as pltfrom sklearn.tree imp...原创 2019-10-18 22:23:29 · 4841 阅读 · 0 评论 -
sklearn机器学习:AdaBoost分类器
AdaBoostAdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由 Yoav Freund 和 Robert Schapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强(也就是得到更高的权重),加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭...原创 2019-10-18 21:59:08 · 8073 阅读 · 0 评论 -
sklearn机器学习:随机森林回归器RandomForestRegressor
sklearn随机森林回归器类的格式sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’mse’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’au...原创 2019-10-18 16:43:30 · 40123 阅读 · 2 评论 -
sklearn机器学习:随机森林分类器RandomForestClassifier
以下以随机森林为例讨论集成算法。sklearn随机森林分类器随机森林是非常具有代表性的Bagging集成算法,它的所有基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树所集成的森林就叫做随机森林回归器。我们先来看RandomForestClassifier,随机森林分类器。class sklearn.ensemble.RandomForestClassifier (n_est...原创 2019-10-16 22:05:25 · 21365 阅读 · 2 评论 -
机器学习:集成算法概述
集成学习(Ensemble learning)就是将若干个弱分类器通过一定的策略组合之后产生一个强分类器,是时下非常流行的机器学习算法,它本身不是一个单独的机器学习算法,而是通过在数据上构建多个模型,集成所有模型的建模结果。基本上所有的机器学习领域都可以看到集成学习的身影,在现实中集成学习也有相当大的作用,它可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易...原创 2019-10-16 19:44:49 · 797 阅读 · 0 评论 -
sklearn机器学习:基于密度的聚类算法DBSCAN
DBSCANK-Means是最常见的聚类方法,能够实现快速聚类,但局限于其算法构架,K-Means对非球形边界的数据很难达到一个较好的分类效果,因此我们需要借助另外的数学理理论工具对其进行进一步的完善。这里介绍一种利用密度进行聚类的方法:DBSCAN。一方面作为聚类算法的补充内容,一方面需要掌握面一个新算法如何利用scikit-learn快速上手应用实践的方法,当然最重要的一点,是要树立关于...原创 2019-10-15 06:42:10 · 5255 阅读 · 0 评论 -
sklearn机器学习:K-Means之提前停止迭代
重要参数max_iter & tol:让迭代停下来之前描述K-Means的基本流程时我们提到过,当质心不再移动,K-Means算法就会停下来。但在完全收敛之前,我们也可以使用max_iter,最大迭代次数,或者tol,两次迭代间Inertia下降的量,这两个参数来让迭代提前停下来。有时候,当我们的n_clusters选择不符合数据的自然分布,或者为了业务需求,必须要填入与数据的自然分布不...原创 2019-10-14 21:58:57 · 3091 阅读 · 0 评论 -
sklearn机器学习:K-Means初始质心怎么放
重要参数init & random_state & n_init在K-Means中有一个重要的环节,就是放置初始质心。init如果有足够的时间,K-means一定会收敛,但Inertia可能收敛到局部最小值。是否能够收敛到真正的最小值很大程度上取决于质心的初始化。init就是用来帮助我们决定初始化方式的参数。random_state初始质心放置的位置不同,聚类的结果很可...原创 2019-10-14 21:35:22 · 9227 阅读 · 0 评论 -
机器学习:聚类算法的模型评估指标:轮廓系数
不同于分类模型和回归,聚类算法的模型评估不是一件简单的事。在分类中,有直接结果(标签)的输出,并且分类的结果有正误之分,所以使用预测的准确度,混淆矩阵,ROC曲线等指标来进行评估。但无论如何评估,都是在”模型找到正确答案“的能力。而回归中,由于要拟合数据,我们有MSE均方误差,有损失函数来衡量模型的拟合程度。但这些衡量指标都不适用于聚类。如何衡量聚类算法的效果聚类模型的结果不是某种标签输出,...原创 2019-10-14 21:00:43 · 9269 阅读 · 1 评论 -
sklearn机器学习:K-Means
K-Means类的格式sklearn.cluster.KMeans (n_clusters=8, init=’k-means++’, n_init=10, max_iter=300, tol=0.0001, precompute_distances=’auto’, verbose=0, random_state=None, copy_x=True, n_jobs=None, algorithm=...原创 2019-10-14 20:21:21 · 335 阅读 · 0 评论 -
机器学习:基于原型的聚类技术K-Means
基于原型的簇此时簇是对象的集合,并且其中每个对象到定义该簇的原型的距离比到其他簇的原型的距离更近(或更加相似)。对于具有连续属性的数据,簇的原型通常是质心,即簇中所有点的平均值。当质心没有意义时(例如当数据具有分类属性时),原型通常是中心点,即簇中最有代表性的点。对于许多数据类型,原型可以视为最靠近中心的点;在这种情况下,通常把基于原型的簇看作基于中心的簇(center-based cluste...原创 2019-10-14 18:14:48 · 1405 阅读 · 0 评论 -
机器学习:无监督学习与聚类算法
决策树、线性和逻辑回归都是比较常用的机器器学习算法,他们虽然有着不不同的功能,但却都属于 “有监督学习” 的一部分,即是说,模型在训练的时候,即需要特征矩阵X,也需要真实标签y。机器器学习当中,还有相当一部分算法属于 “无监督学习” ,无监督的算法在训练的时候只需要特征矩阵X,不需要标签。无监督学习的代表算法有聚类算法、降维算法。聚类聚类分析提供由个别数据对象到数据对象所指派的簇的抽象。此外,...原创 2019-10-14 17:32:47 · 777 阅读 · 0 评论 -
sklearn机器学习:逻辑回归LogisticRegression参数解析之梯度下降
梯度下降:重要参数max_iter在上篇博文《sklearn机器学习:逻辑回归LogisticRegression参数解析之penalty & C》中,我们解析了参数penalty & C,本文重点讨论max_iter。逻辑回归的目的是求解能够让模型最优化、拟合程度最好的参数ω的值,即求解能够让损失函数J(ω)最小化的ω值。对于二元逻辑回归,有多种方法可以用来求解参数ω,最常...原创 2019-10-14 17:04:18 · 2679 阅读 · 0 评论 -
sklearn机器学习:逻辑回归LogisticRegression参数解析之penalty & C
LogisticRegression类的格式sklearn.linear_model.LogisticRegression (penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’warn...原创 2019-10-14 14:05:27 · 18726 阅读 · 1 评论 -
机器学习:二元逻辑回归的损失函数
损失函数的概念和解惑在学习决策树时,曾经提到过两种模型表现:在训练集上的表现,和在测试集上的表现。建模,是追求模型在测试集上的表现最优,因此模型的评估指标往往是用来衡量模型在测试集上的表现的。然而,逻辑回归有着基于训练数据求解参数的需求,并且希望训练出来的模型能够尽可能地拟合训练数据,即模型在训练集上的预测准确率越靠近100%越好。因此,**使用”损失函数“这个评估指标,来衡量参数为的模型拟合...原创 2019-10-12 22:00:52 · 1525 阅读 · 0 评论 -
机器学习:为什么需要逻辑回归
线性回归对数据的要求很严格,比如标签必须满足正态分布,特征之间的多重共线性需要消除等,而现实中很多真实情景的数据无法满足这些要求,因此线性回归在很多现实情境的应用效果有限。逻辑回归是由线性回归变化而来,因此它对数据也有一些要求;已经有了强大的分类模型决策树,它的分类效力很强,并且不需要对数据做任何预处理。何况,逻辑回归的原理其实并不简单。要理解逻辑回归,必须要有一定的数学基础,必须理解损失函数...原创 2019-10-12 21:16:51 · 2239 阅读 · 0 评论 -
机器学习:逻辑回归原理
之前的几篇博文,我们接触了不少带“回归”二字的算法,回归树、线性回归、岭回归,无一例外都是区别于分类算法,用来处理和预测连续型标签的算法。然而,逻辑回归,是一种名为“回归”的线性分类器,其本质是由线性回归变化而来的,一种广泛使用于分类问题中的广义回归算法。要理解逻辑回归从何而来,要先从线性回归开始。线性回归是机器学习中最简单的回归算法,对任意样本iii,它写作一个几乎人人熟悉的方程:zi=ω0+...原创 2019-10-11 21:53:26 · 230 阅读 · 0 评论 -
机器学习:线性模型-多重共线性问题的解决-岭回归
在线性模型之中,除了线性回归之外,最知名的就是岭回归与Lasso了。这两个算法非常神秘,他们的原理和应用都不像其他算法那样高调,学习资料料也很少。这可能是因为这两个算法不是为了提升模型表现,而是为了修复漏洞而设计的(实际上,使用岭回归或者Lasso,模型的效果往往会下降一些,因为删除了一小部分信息),因此在结果为上的机器学习领域颇有些被冷落的意味。本文介绍一下岭回归。岭回归,又称为吉洪诺夫正则化...原创 2019-10-10 17:19:54 · 1892 阅读 · 0 评论 -
sklearn机器学习:岭回归Ridge
在sklearn中,岭回归由线性模型库中的Ridge类来调用:原创 2019-10-10 18:28:21 · 1980 阅读 · 0 评论 -
sklearn机器学习:岭回归用于选取最优正则化系数α的类RidgeCV
上一篇博文《sklearn机器学习:岭回归Ridge》中,提到了最佳正则化参数α\alphaα取值选择的重要性。既然要选择α\alphaα的范围,不可避免地要进行最优参数的选择。岭迹图在各种机器器学习教材中,总是教导使用岭迹图来判断正则项参数的最佳取值。传统的岭迹图长这样,形似一个开口的喇叭图(根据横坐标的正负,喇叭有可能朝右或者朝左):这个以正则化参数为横坐标,线性模型求解的系数ω\om...原创 2019-10-11 09:36:56 · 6620 阅读 · 1 评论 -
机器学习:线性模型-多重共线性问题的解决-Lasso
除了岭回归,最常被提到的模型还有Lasso。Lasso全称最小绝对收缩和选择算子(least absolute shrinkage and selection operator),由于这个名字过于复杂,所以简称为Lasso。和岭回归一样,Lasso是被创造来作用于多重共线性问题的算法,不过Lasso使用的是系数ω的L1范式(L1范式是系数ω的绝对值)乘以正则化系数α,所以Lasso的损失函数表达式...原创 2019-10-11 10:36:20 · 3317 阅读 · 0 评论 -
sklearn机器学习:特征选择-Lasso
Lasso的核心作用:特征选择Lasso类的格式sklearn.linear_model.Lasso (alpha=1.0, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False,random...原创 2019-10-11 11:48:47 · 12313 阅读 · 6 评论