ROC
- ROC(Receiver Operating Characteristic Curve):接受者操作特征曲线。
- ROC曲线及AUC系数主要用来检验模型对客户进行正确排序的能力。
- ROC曲线描述了在一定累计好客户比例下的累计坏客户的比例,模型的分别能力越强,ROC曲线越往左上角靠近。
- AUC系数表示ROC曲线下方的面积。
- AUC系数越高,模型的风险区分能力越强。
- ROC值一般在0.5-1.0之间。值越大表示模型判断准确性越高,即越接近1越好。
- ROC=0.5表示模型的预测能力与随机结果没有差别。
KS
-
KS(Kolmogorov-Smirnov,柯尔莫哥洛夫-斯摩洛夫)检验
-
用来检验你的数据的分布是不是符合一个理论的已知分布,比如检验一组数据是否为正态分布。
-
在模型中用于区分预测正负样本分隔程度的评价指标。
-
K-S检验主要是验证模型对违约对象的区分能力,通常是在模型预测全体样本的信用评分后,将全体样本按违约与非违约分为两部分,然后用KS统计量来检验这两组样本信用评分的分布是否有显著差异。
-
值越大表示模型判断准确性越高,即越接近1越好。
-
ROC=0.5表示模型的预测能力与随机结果没有差别。
-
一般,KS>0.2即可认为模型有比较好的预测准确性。
-
ROC值一般在0.5-1.0之间。
-
KS值是在模型中用于区分预测正负样本分隔程度的评价指标。
-
每个样本的预测结果化为probability或者一个分数范围。
-
从最小的probability或者最低分到最大的
-
probability或者最高分,正负样本的累积分布。
-
KS值为两个分布中,最大差值的绝对值。
-
KS值的取值范围是[0,1]。
-
通常来说,值越大,表明正负样本区分的程度越好。诚如@张翰星所说,并非所有的情况KS都是越高越好的,尤其在征信模型中。
-
征信模型中,最期望得到的信用分数分布是正态分布,对于正负样本分别而言,也都期望是呈正态分布的样子。
-
如果KS值过大,一般超过0.9,就可以认为正负样本分得过开了,不太可能是正态分布的,反而是比较极端化的分布状态(U字形,两边多,中间少),这样的分数就很不好,基本可以认为不可用。
-
但如果模型的目的就是完美区分正负样本,那么KS值越大就表明分隔能力越突出。
-
另外,KS值所代表的仅仅是模型的分隔能力,并不代表分隔的样本是准确的。换句话说,正负样本完全分错,但KS值可以依旧很高。
其实从某个角度上来讲ROC曲线和KS曲线是一回事,只是横纵坐标的取法不同而已。拿逻辑回归举例,模型训练完成之后每个样本都会得到一个类概率值(注意是类似的类),把样本按这个类概率值排序后分成10等份,每一份单独计算它的真正率和假正率,然后计算累计概率值,用真正率和假正率的累计做为坐标画出来的就是ROC曲线,用10等分做为横坐标,用真正率和假正率的累计值分别做为纵坐标就得到两个曲线,这就是KS曲线。AUC值就是ROC曲线下放的面积值,而ks值就是ks曲线中两条曲线之间的最大间隔距离。由于ks值能找出模型中差异最大的一个分段,因此适合用于cut_off,像评分卡这种就很适合用ks值来评估。但是ks值只能反映出哪个分段是区分最大的,而不能总体反映出所有分段的效果,因果AUC值更能胜任。
通俗解释聚类和分类
入门级
聚类:
一个班级有30学生,每个学生10张不同照片,将这300张照片打乱,聚类就是在不告诉机器任何学生信息,仅凭对300张照片的学习,然后把它分成10类;
分类
一个班级有30学生,每个学生10张不同照片,每张照片上面写了该同学的名字,分类就是机器对这300张照片和照片上的名字进行学习,形成一个包含10个类的模型,用该模型来预测未知照片属于哪个类。
进阶级
聚类:
无监督学习,聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。
分类:
有监督学习,就是按照某种标准给对象贴标签,再根据标签来区分归类。
神经网络
通过堆积大量且多样计算方法的函数计算式的计算单元,并尝试为这些计算单元建立大量的相互连接,同时为了有序有效我们通过分层使连接有次序并避免需要尝试的连接数成幂指数上升,之后制定一个策略帮助整个神经网络的计算评价尝试的结果更好更可用或更坏更不可用, 在提供大量数据训练神经网络之后,神经网络通过计算结果的评价策略,决定以什么样的次序连接哪些计算单元的计算结果更值得被使用(有关名词:强化连接),通过大量循环不同的连接方式找到评价最好的一些的连接计算单元的次序和权值,就此建立模型(计算式组合)可用于解决更多同类问题。
简单描述
人工神经网络算法的作用机理还是比较难理解,现在以一个例子来说明其原理。这个例子是关于人的识别技术的,在门禁系统,逃犯识别,各种验证码破译,银行预留印鉴签名比对,机器人设计等领域都有比较好的应用前景,当然也可以用来做客户数据的挖掘工作,比如建立一个能筛选满足某种要求的客户群的模型。
机器识别人和我们人类识别人的机理大体相似,看到一个人也就是识别对象以后,我们首先提取其关键的外部特征比如身高,体形,面部特征,声音等等。根据这些信息大脑迅速在内部寻找相关的记忆区间,有这个人的信息的话,这个人就是熟人,否则就是陌生人。
人工神经网络就是这种机理。假设上图中X(1)代表我们为电脑输入的人的面部特征,X(2)代表人的身高特征X(3)代表人的体形特征X(4)代表人的声音特征W(1)W(2)W(3)W(4)分别代表四种特征的链接权重,这个权重非常重要,也是人工神经网络起作用的核心变量。
现在我们随便找一个人阿猫站在电脑面前,电脑根据预设变量提取这个人的信息,阿猫面部怎么样,身高多少,体形胖瘦,声音有什么特征,链接权重初始值是随机的,假设每一个W均是0.25,这时候电脑按这个公式自动计算,Y=X(1)W(1)+X(2)W(2)+X(3)W(3)+X(4)W(4)得出一个结果Y,这个Y要和一个门槛值(设为Q)进行比较,如果Y>Q,那么电脑就判定这个人是阿猫,否则判定不是阿猫.由于第一次计算电脑没有经验,所以结果是随机的.一般我们设定是正确的,因为我们输入的就是阿猫的身体数据啊.
现在还是阿猫站在电脑面前,不过阿猫怕被电脑认出来,所以换了一件衣服,这个行为会影响阿猫的体形,也就是X(3)变了,那么最后计算的Y值也就变了,它和Q比较的结果随即发生变化,这时候电脑的判断失误,它的结论是这个人不是阿猫.但是我们告诉它这个人就是阿猫,电脑就会追溯自己的判断过程,到底是哪一步出错了,结果发现原来阿猫体形X(3)这个体征的变化导致了其判断失误,很显然,体形X(3)欺骗了它,这个属性在人的识别中不是那么重要,电脑自动修改其权重W(3),第一次我对你是0.25的相信,现在我降低信任值,我0.10的相信你.修改了这个权重就意味着电脑通过学习认为体形在判断一个人是否是自己认识的人的时候并不是那么重要.这就是机器学习的一个循环.我们可以要求阿猫再穿一双高跟皮鞋改变一下身高这个属性,让电脑再一次进行学习,通过变换所有可能变换的外部特征,轮换让电脑学习记忆,它就会记住阿猫这个人比较关键的特征,也就是没有经过修改的特征.也就是电脑通过学习会总结出识别阿猫甚至任何一个人所依赖的关键特征.经过阿猫的训练电脑,电脑已经非常聪明了,这时你在让阿猫换身衣服或者换双鞋站在电脑前面,电脑都可以迅速的判断这个人就是阿猫.因为电脑已经不主要依据这些特征识别人了,通过改变衣服,身高骗不了它.当然,有时候如果电脑赖以判断的阿猫关键特征发生变化,它也会判断失误.我们就不要要求这么高了,不要说电脑,就是人类也无能为力,你的一个好朋友你经过多次的识记肯定认识吧,但是他整了容你们在大街上邂逅.你可能觉得这个人声音好熟悉,体形好熟悉,----都像自己一个朋友,就是脸长的不像.你不敢贸然上去搭讪吧(否定的判断).因为我们判定一个人是否是自己的朋友的时候依靠的关键的特征就是面部特征,而他恰恰就是改变了这一特征.当然也存在我们把一个拥有和我们朋友足够多相似特征的人判定为我们的朋友,这就是认错人的现象了.这些问题电脑也会出现.
不过这个算法还是有比较积极的意义的,实现了一定程度上的智能化.
实现原理
比如说你要决定今天出不出去看电影, 你要考虑3个因素, 一个是女朋友在不在, 一个是电影好不好看, 另一个是今天有没有工作, 这三个因素每个人的权重都不同,有的人看重女朋友, 有的人看重工作,所以权重就不等, 最后每个人根据自己的权重做出0或1,去或不去, to be or not to be的决策。那么你怎么做呢? 你把三个要素按照它们需要的权重加和在一起, 在把这个分数送到一个叫sigmoid的门面前得到去或不去的决定, 工作原理如上图。
比单层感知机更复杂的多层感知机-或者我们常说的深度网络, 是进行数据处理和模式识别的利器。 深度神经网络之所以能够处理这些数据类型,主要是因为这些数据本身具有的复杂结构很适合被NN识别, 而人类不需要预先设计识别这些结构的函数而是任由网络学习, D-CNN 深度卷积网络能够同时看到一个图像从细节到抽象的结构,所以能够抓住一些我们人类都说不出的细节。
DCNN 深度卷积网络,信号在多级网络里一级级传递, 从而使得从微观到宏观的特征都得到分辨 。 每一层神经元之间没有相互连接。
而RNN- 反馈式神经网络(每一层神经元之间有相互连接)则适合处理sequnce序列类的数据, 发现序列内部的时间结构。
RNN 之所以具有这个能力,就是因为网络内部通过自反馈, 具有之前各个时间点的输入信息,** 因此它可以从无限久远的历史里推测系统的未来,RNN与之前的卷积网络相比最大的特点是它包含了动力学特性,如果说卷积网络是任意函数逼近器,那么RNN就是任意程序逼近器。** 犹如包含某种工作记忆。用一个比喻来说, 就是RNN犹如一个宽阔的池塘宁静的水面, 当你投入一个石子, 激起的涟漪会在水池里不停反射传播, 这是对石头进入那一时刻信息的保存, 如果之后在落入一个石头, 那么它再度激起的涟漪会和之前的水波叠加作用, 形成更复杂的相互作用和纹样。
RNN示意图, 同层神经元之间有相互连接,从而使得历史信息在网络里向回声一般交替传递
RNN 具有相互连接的反馈式神经网络也是最接近生物组织神经网络的人工神经网络, 具有更多的未来潜力,只是它的训练比feed forward network更复杂。
人工神经网络的训练就如同生物神经网络的学习, 都是一个不停试错并减少错误的原理, 不过人工神经网络的方法更加简单化, 比如gradient descent,就是说在参数空间里寻找使得错误减少最快的方法改进。
人工神经网络对于生物神经网络的奇妙之处在于, 它反过来启迪了生物神经网络是在干什么的, 就好像费曼的那句话“ 你要想真正理解一个东西, 就造出一台”。
支持向量机
Support Vector Machine, 一个普通的SVM就是一条直线罢了,用来完美划分linearly separable的两类。但这又不是一条普通的直线,这是无数条可以分类的直线当中最完美的,因为它恰好在两个类的中间,距离两个类的点都一样远。而所谓的Support vector就是这些离分界线最近的『点』。如果去掉这些点,直线多半是要改变位置的。可以说是这些vectors(主,点点)support(谓,定义)了machine(宾,分类器)...
简介
支持向量机(Support Vector Machine,SVM)是AT&TBell 实验室的V.Vapnik等人提出的一种新型机器学习算法。到目前为止,支持向量机已应用于孤立手写字符识别6&7、网页或文本自动分类、说话人识别、人脸检测、性别分类、计算机入侵检测、基因分类、遥感图象分析、目标识别、函数回归、估计、函数逼近、密度估计、时间序列预测及数据压缩、文本过滤、数据挖掘、非线性系统控制等各个领域的实际问题中。
SVM****的主要思想是针对两类分类问题,寻找一个超平面作为两类训练样本点的分割,以保证最小的分类错误率。在线性可分的情况下,存在一个或多个超平面使得训练样本完全分开,SVM的目标是找到其中的最优超平面,最优超平面是使得每一类数据与超平面距离最近的向量与超平面之间的距离最大的这样的平面,如下图所示,超平面W是h值最大的最优超平面;对于线性不可分的情况,通过使用核函数(一种非线性映射算法)将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分。
SVM****的基本模型设输入模式集合{ x[i]} ∈ Rn 由两类点组成, 如果x[i]属于第1类, 则y[i] = 1 , 如果x[i]属于第2类, 则y[i] = -1 , 那么有训练样本集合{ x[i] , y[i]} , i = 1 ,2,3 , ⋯, n ,求最优分类面wx-b=0,满足:y[i](w·x[i] - b) >= 1;并使2h= 2/‖w‖最大,即min‖w‖‖w‖/2;根据对偶理论,可以通过解该问题的对偶问得到最优解,对偶问题为:
max∑α[i] – 1/2 ∑α[i]α[j]y[i]y[j]x[i]*x[j]
0≤α[i]≤C∑α[i]y[i]=0
其中x[i] ·x[j]表示这两个向量的内积,当对于线性不可分的情况,用核内积K(x[i], x[j])(通过核函数映射到高维空间中对应向量的内积)代替x[i] ·x[j]。根据对偶问题的解α,求得w,b ,得到最优分类面
SVM****模型求解:当训练样本向量很多、向量维数很大时,解上面的对偶问题是一个解大型矩阵的问题,采用传统的矩阵求逆无论在空间复杂度上还是在时间复杂度上都是不可取的。序贯最小优化(sequential minimal optimization,简称SMO)算法是目前解决大量数据下支持向量机训练问题的一种十分有效的方法。
SMO的基本思想是每次只选择违法KTT条件最严重的两个拉格朗日乘子,通过求解只有两个变量的二次规划问题,更新选取的拉格朗日乘子,此时保持其他拉格朗日乘子,通过不断的迭代,最终得到问题的最优解。SMO的基本步骤为:
1、将a向量分成两个集合,工作集aB,固定集aN,即:a = {aB, aN }。初始化时,aB为a全部的分量,aN为空集;
2、每次对aB解决一个小的二次规划问题,保持aN中的值不变;
3、每次迭代选择不同的aB和aN ,每解决一个小规模优化问题,都在原来的基础上向最终的解集前进一步;
4、每次迭代检查当前结果,满足优化条件,则找到了优化问题的解,算法结束。
SVM是什么
- SVM - support vector machine, 俗称支持向量机,为一种supervised learning算法,属于classification的范畴。
- 在数据挖掘的应用中,与unsupervised的Clustering相对应和区别。
- 广泛应用于机器学习(Machine Learning), 计算机视觉(Computer Vision) 和数据挖掘(Data Mining)当中。
SVM大致原理
- 假设我们要通过三八线把实心圈和空心圈分成两类。
- 那么有无数多条线可以完成这个任务。
- 在SVM中,我们寻找一条最优的分界线使得它到两边的margin都最大。
- 在这种情况下边缘加粗的几个数据点就叫做support vector,这也是这个分类算法名字的来源。
拓展至任意n维乃至无限维空间,如图2,
举个栗子
在很久以前的情人节,大侠要去救他的爱人,但魔鬼和他玩了一个游戏。
魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。”
于是大侠这样放,干的不错?
然后魔鬼,又在桌上放了更多的球,似乎有一个球站错了阵营。
SVM就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。
现在即使魔鬼放了更多的球,棍仍然是一个好的分界线。
然后,在SVM 工具箱中有另一个更加重要的 trick。 魔鬼看到大侠已经学会了一个trick,于是魔鬼给了大侠一个新的挑战。
现在,大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间。
现在,从魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了。
再之后,无聊的大人们,把这些球叫做 「data」,把棍子 叫做 「classifier」, 最大间隙trick 叫做「optimization」, 拍桌子叫做「kernelling」, 那张纸叫做「hyperplane」。
贝叶斯
贝叶斯定理是关于随机事件A和B的条件概率或边缘概率的定理。
其中P(A|B)是在B发生的情况下A发生的可能性。
是在已知相关项目B的资料,而缺乏论证项目A的直接资料时,通过对B项目的有关状态及发生概率分析推导A项目的状态及发生概率。
在贝叶斯定理中,每个名词都有约定俗成的名称:
P(A)是 A 的先验概率,之所以称为“先验”是因为它不考虑任何 B 方面的因素。
P(A|B)是已知 B 发生后 A 的条件概率,也由于得自 B 的取值而被称作 A 的后验概率。
P(B|A)是已知 A 发生后 B 的条件概率,也由于得自 A 的取值而被称作 B 的后验概率。
P(B)是 B 的先验概率,也作标淮化常量(normalizing constant)。
按这些术语,贝叶斯定理可表述为:
后验概率 = (相似度 * 先验概率)/标淮化常量
也就是说,后验概率与先验概率和相似度的乘积成正比。
另外,比例P(B|A)/P(B)也有时被称作标淮相似度(standardised likelihood),Bayes定理可表述为:
后验概率 = 标淮相似度 * 先验概率
条件概率就是事件 A 在另外一个事件 B 已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在 B 发生的条件下 A 发生的概率”。
联合概率表示两个事件共同发生(数学概念上的交集)的概率。A 与 B 的联合概率表示为。
example
正向概率
如: 假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大,很容易计算
逆向概率
如: 如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测,这个问题,就是所谓的逆向概率的问题。
评分卡模型
信用评分卡模型在国外是一种成熟的预测方法,尤其在信用风险评估以及金融风险控制领域更是得到了比较广泛的使用,其原理是将模型变量 WOE 编码方式离散化之后运用 logistic 回归模型进行的一种二分类变量的广义线性模型。
Woe(weight of E)公式如下:
信用风险模型
简单的理解就是将历史发生的借贷行为抽象出来,我们相信有共同行为特征的一群人一定时间内在违约这件事情上具有相似的行为模式,因为我们从历史数据中提取各个维度的特征对应这些特征的履约表现,从而预测将来有这些特征的人的违约概率。
这个里面就有几个关键的问题:
- 在预测违约之前首先要定义违约,
- 提取出对预测违约能起到作用特征变量,
- 提取特征的对象以及时间范围,
- 将特征与违约之间的关系进行拟合,
- 检验预测的效果。
- 详情
决策树
决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。
给出一个example:
现想象一个女孩的母亲要给这个女孩介绍男朋友,
于是有了下面的对话:
女儿:多大年纪了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算很高,中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。
这个女孩的决策过程就是典型的分类树决策。
相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。
假设这个女孩对男人的要求是:30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,
那么这个可以用下图表示女孩的决策逻辑:
也就是说,决策树的简单策略就是,好比公司招聘面试过程中筛选一个人的简历,如果你的条件相当好比如说某985/211重点大学博士毕业,那么二话不说,直接叫过来面试,如果非重点大学毕业,但实际项目经验丰富,那么也要考虑叫过来面试一下,即所谓具体情况具体分析、决策.
随机森林
随机森林采用多个决策树的投票机制来改善决策树,我们假设随机森林使用了m棵决策树,那么就需要产生m个一定数量的样本集来训练每一棵树,如果用全样本去训练m棵决策树显然是不可取的,全样本训练忽视了局部样本的规律,对于模型的泛化能力是有害的
产生n个样本的方法采用Bootstraping法,这是一种有放回的抽样方法,产生n个样本而最终结果采用Bagging的策略来获得,即多数投票机制
随机森林的生成方法:
-
从样本集中通过重采样的方式产生n个样本
-
假设样本特征数目为a,对n个样本选择a中的k个特征,用建立决策树的方式获得最佳分割点
-
重复m次,产生m棵决策树
-
多数投票机制来进行预测
(需要注意的一点是,这里m是指循环的次数,n是指样本的数目,n个样本构成训练的样本集,而m次循环中又会产生m个这样的样本集)
特点:随机森林是一个比较优秀的模型,它对于多维特征的数据集分类有很高的效率,还可以做特征重要性的选择。
运行效率和准确率较高,实现起来也比较简单。
但是在数据噪音比较大的情况下会过拟合,过拟合的缺点对于随机森林来说还是较为致命的。
线性回归
这是维基百科上的一个线性回归例子
线性回归非常简单, 给你一个样本集合
D=(x1,y1),(x2,y2),(x3,y3),(xi,yi)……(xm,ym), 注意这里xi,yi可以都是高维向量
于是目标是找到一个好的线性模拟:
f(xi)=wxi+b
求出w, b, 这个模型就算固定了. 如何衡量样本y和你的f(x)之间的差别, 每个人都有不同的方法, 最常用的, 当然是最小二乘法, 也就是用欧氏距离去衡量.
Whatever ~ 我们用一条线去模拟和预测未来的数据, 即, 给我一个x值, 我能给你一个预测的y值, 这就是线性回归.
广义线性回归
也非常简单, 我们不再只是用线性函数模拟数据, 而是在外层加了一个单调可微函数g, 即:
f(xi)=(wxi+b)/g
如果g=ln , 则这个广义线性模型就变为对数线性回归.
其实本质就是给原来线性变换加上一个非线性变换(或者说映射),
使得模拟的函数有非线性的属性, 但是, 本质上调参还是线性的, 主体是内部线性的调参.
来一发《机器学习》中的直观截图:
是的, 如果我们觉得模型应该是指数变化的时候, 我们可以简单粗暴地把线性模型映射到指数变化上, 如图中的红线映射到黑色的指数线. 这就是广义线性模型的思想.
但问题来了, “对数几率回归”是咋回事? 和”对数线性回归”有什么关系?
事实上, “对数几率回归”不是解决回归问题的, 而是解决分类问题的. 目的是要构造一个分类器Classifier. 并且, 关键不在于”回归”, 不在于如何用最大似然训练函数, 也不在于用什么最优化方法训练函数.** 关键在于”对数几率”这四个字, 在于对数几率函数.**
为了解决一个最简单的二类分类问题, 我们为每一个点定义一个值域[0, 1]的函数, 表示这个点分在A类或者B类中的可能性, 如果非常可能是A类, 那可能性就逼近1, 如果非常可能是B类, 那可能性就逼近0(相对A的可能性), 如果两个类很难判别, 当然就是0.5. 于是构造出对数几率函数:
来自《机器学习》——周志华 , 清华大学出版社
是不是很熟悉? 自然对数在分母上. 没错它是一种”Sigmoid”函数.
这里的z就是z=wxi+b
于是, 一个点归在A类的可能性的终极形态就是:
是不是? 和”回归”没啥关系吧? 它关注的是一个点分在A类的可能性.
来瞧瞧最后训练出的模型:
蓝颜色越深, 模型认为y=1的可能性越大, 反之, 红颜色越深, 模型认为y=1的可能性越小.
再来看看这张:
注意y轴是可能性, 说明x轴越大, 蓝色样本的可能性越大.
下面这张图也一样:
y=1的可能性随着u值的增加而增加.
因此, “对数几率回归”(Logistic Regression)做的事情是对分类的可能性建模, 而不是去预测样本的y值 !
逻辑回归(logistic)
逻辑回归处理的是分类问题。我们可以用通俗的几何语言重新表述它:
空间中有两群点,一群是圆点“〇”,一群是叉点“X”。我们希望从空间中选出一个分离边界,将这两群点分开。
注:分离边界的维数与空间的维数相关。如果是二维平面,分离边界就是一条线(一维)。如果是三维空间,分离边界就是一个空间中的面(二维)。如果是一维直线,分离边界就是直线上的某一点。不同维数的空间的理解下文将有专门的论述。
为了简化处理和方便表述,我们做以下4个约定:
- 我们先考虑在二维平面下的情况。
- 而且,我们假设这两类是线性可分的:即可以找到一条最佳的直线,将两类点分开。
- 用离散变量y表示点的类别,y只有两个可能的取值。y=1表示是叉点“X”,y=0表示是是圆点“〇”。
- 点的横纵坐标用表示。
于是,现在的问题就变成了:怎么依靠现有这些点的坐标和标签(y),找出分界线的方程。
如何用解析几何的知识找到逻辑回归问题的分界线?
- 我们用逆推法的思路:
假设我们已经找到了这一条线,再寻找这条线的性质是什么。根据这些性质,再来反推这条线的方程。 - 这条线有什么性质呢?
首先,它能把两类点分开来。——好吧,这是废话。( ̄▽ ̄)”
然后,两类点在这条线的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数!
首先,这个性质是非常好,可以用来区分点的不同的类别。而且,我们对法向量进行规范:只考虑延长线通过原点的那个法向量p。这样的话,只要求出法向量p,就可以唯一确认这条分界线,这个分类问题就解决了。
- 还有什么方法能将法向量p的性质处理地更好呢?
因为计算各个点到法向量p投影,需要先知道p的起点的位置,而起点的位置确定起来很麻烦,我们就干脆将法向量平移使其起点落在坐标系的原点,成为新向量p’。因此,所有点到p’的投影也就变化了一个常量。
假设这个常量为,p’向量的横纵坐标为。空间中任何一个点到p’的投影就是,再加上前面的常量值就是:
看到上面的式子有没有感到很熟悉?这不就是逻辑回归函数中括号里面的部分吗?
令 就可以根据z的正负号来判断点x的类别了。
从概率角度理解z的含义。
由以上步骤,我们由点x的坐标得到了一个新的特征z,那么:
z的现实意义是什么呢?
首先,我们知道,z可正可负可为零。而且,z的变化范围可以一直到正负无穷大。
z如果大于0,则点x属于y=1的类别。而且z的值越大,说明它距离分界线的距离越大,更可能属于y=1类。
那可否把z理解成点x属于y=1类的概率P(y=1|x) (下文简写成P)呢?显然不够理想,因为概率的范围是0到1的。
但是我们可以将概率P稍稍改造一下:令Q=P/(1-P),期望用Q作为z的现实意义。我们发现,当P的在区间[0,1]变化时,Q在[0,+∞)区间单调递增。函数图像如下(以下图像可以直接在度娘中搜“x/(1-x)”,超快):
但是Q的变化率在[0,+∞)还不够,我们是希望能在(-∞,+∞)区间变化的。而且在P=1/2的时候刚好是0。这样才有足够的解释力。
注:因为P=1/2说明该点属于两个类别的可能性相当,也就是说这个点恰好在分界面上,那它在法向量的投影自然就是0了。
而在P=1/2时,Q=1,距离Q=0还有一段距离。那怎么通过一个函数变换然它等于0呢?有一个天然的函数log,刚好满足这个要求。
于是我们做变换R=log(Q)=log(P/(1-P)),期望用R作为z的现实意义。画出它的函数图像如图:
这个函数在区间[0,1]中可正可负可为零,单调地在(-∞,+∞)变化,而且1/2刚好就是唯一的0值!基本完美满足我们的要求。
回到我们本章最初的问题,
“我们由点x的坐标得到了一个新的特征z,那么z的具体意义是什么呢?”
由此,我们就可以将z理解成x属于y=1类的概率P经过某种变换后对应的值。也就是说,z= log(P/(1-P))。反过来就是P=。图像如下:
这两个函数log(P/(1-P)) 、看起来熟不熟悉?
这就是传说中的logit函数和sigmoid函数!
小小补充一下:
- 在概率理论中,Q=P/(1-P)的意义叫做赔率(odds)。世界杯赌过球的同学都懂哈。赔率也叫发生比,是事件发生和不发生的概率比。
- 而z= log(P/(1-P))的意义就是对数赔率或者对数发生比(log-odds)。
于是,我们不光得到了z的现实意义,还得到了z映射到概率P的拟合方程:
有了概率P,我们顺便就可以拿拟合方程P=来判断点x所属的分类:
当P>=1/2的时候,就判断点x属于y=1的类别;当P<1/2,就判断点x属于y=0的类别。
构造代价函数求出参数的值
到目前为止我们就有两个判断某点所属分类的办法,一个是判断z是否大于0,一个是判断g(z)是否大于1/2。
然而这并没有什么X用,
以上的分析都是基于“假设我们已经找到了这条线”的前提得到的,但是最关键的三个参数仍未找到有效的办法求出来。
还有没有其他的性质可供我们利用来求出参数的值?
- 我们漏了一个关键的性质:这些样本点已经被标注了y=0或者y=1的类别!
- 我们一方面可以基于z是否大于0或者g(z) 是否大于1/2来判断一个点的类别,另一方又可以依据这些点已经被标注的类别与我们预测的类别的插值来评估我们预测的好坏。
- 这种衡量我们在某组参数下预估的结果和实际结果差距的函数,就是传说中的代价函数Cost Function。
- 当代价函数最小的时候,相应的参数就是我们希望的最优解。
由此可见,设计一个好的代价函数,将是我们处理好分类问题的关键。而且不同的代价函数,可能会有不同的结果。因此更需要我们将代价函数设计得解释性强,有现实针对性。
为了衡量“预估结果和实际结果的差距”,我们首先要确定“预估结果”和“实际结果”是什么。
- “实际结果”好确定,就是y=0还是y=1。
- “预估结果”有两个备选方案,经过上面的分析,我们可以采用z或者g(z)。但是显然g(z)更好,因为g(z)的意义是概率P,刚好在[0,1]范围之间,与实际结果{0,1}很相近,而z的意思是逻辑发生比,范围是整个实数域(-∞,+∞),不太好与y={0,1}进行比较。
接下来是衡量两个结果的“差距”。
- 我们首先想到的是y-hθ(x)。
但这是当y=1的时候比较好。如果y=0,则y- hθ(x)= - hθ(x)是负数,不太好比较,则采用其绝对值hθ(x)即可。综合表示如下:
但这个函数有个问题:求导不太方便,进而用梯度下降法就不太方便。因为梯度下降法超出的初等数学的范围,这里就暂且略去不解释了。 - 于是对上面的代价函数进行了简单的处理,使之便于求导。结果如下:
代价函数确定了,接下来的问题就是机械计算的工作了。常见的方法是用梯度下降法。于是,我们的平面线形可分的问题就可以说是解决了。
从几何变换的角度重新梳理我们刚才的推理过程。
回顾我们的推理过程,我们其实是在不断地将点进行几何坐标变换的过程。
- 第一步是将分布在整个二维平面的点通过线性投影映射到一维直线中,成为点x(z)
- 第二步是将分布在整个一维直线的点x(z)通过sigmoid函数映射到一维线段[0,1]中成为点x(g(z))。
- 第三步是将所有这些点的坐标通过代价函数统一计算成一个值,如果这是最小值,相应的参数就是我们所需要的理想值。
对于简单的非线性可分的问题。
- 由以上分析可知。比较关键的是第一步,我们之所以能够这样映射是因为假设我们点集是线性可分的。但是如果分离边界是一个圆呢?考虑以下情况。
- 我们仍用逆推法的思路:
通过观察可知,分离边界如果是一个圆比较合理。假设我们已经找到了这个圆,再寻找这个圆的性质是什么。根据这些性质,再来反推这个圆的方程。 - 我们可以依据这个性质:
圆内的点到圆心的距离小于半径,圆外的点到圆心的距离大于半径假设圆的半径为r,空间中任何一个点到原点的距离为。令,就可以根据z的正负号来判断点x的类别了然后令,就可以继续依靠我们之前的逻辑回归的方法来处理和解释问题了。 - 从几何变换的角度重新梳理我们刚才的推理过程。
第一步是将分布在整个二维平面的点通过某种方式映射到一维直线中,成为点x(z)第二步是将分布在整个一维射线的点x(z)通过sigmoid函数映射到一维线段[0,1]中成为点x(g(z))。第三步是将所有这些点的坐标通过代价函数统一计算成一个值v,如果这是最小值,相应的参数就是我们所需要的理想值。
从特征处理的角度重新梳理我们刚才的分析过程
其实,做数据挖掘的过程,也可以理解成做特征处理的过程。我们典型的数据挖掘算法,也就是将一些成熟的特征处理过程给固定化的结果。
对于逻辑回归所处理的分类问题,我们已有的特征是这些点的坐标,我们的目标就是判断这些点所属的分类y=0还是y=1。那么最理想的想法就是希望对坐标进行某种函数运算,得到一个(或者一些)新的特征z,基于这个特征z是否大于0来判断该样本所属的分类。
对我们上一节非线性可分问题的推理过程进行进一步抽象,我们的思路其实是:
- 第一步,将点的坐标通过某种函数运算,得到一个新的类似逻辑发生比的特征,
- 第二步是将特征z通过sigmoid函数得到新的特征。
- 第三步是将所有这些点的特征q通过代价函数统一计算成一个值,如果这是最小值,相应的参数(r)就是我们所需要的理想值。
对于复杂的非线性可分的问题
由以上分析可知。比较关键的是第一步,如何设计转换函数。我们现在开始考虑分离边界是一个极端不规则的曲线的情况。
我们仍用逆推法的思路:
- 通过观察等先验的知识(或者完全不观察乱猜),我们可以假设分离边界是某种6次曲线(这个曲线方程可以提前假设得非常复杂,对应着各种不同的情况)。
- 第一步:将点的坐标通过某种函数运算,得到一个新的特征。并假设z是某种程度的逻辑发生比,通过其是否大于0来判断样本所属分类。
- 第二步:将特征z通过sigmoid函数映射到新的特征
- 第三步:将所有这些样本的特征q通过逻辑回归的代价函数统一计算成一个值,如果这是最小值,相应的参数就是我们所需要的理想值。
多维逻辑回归的问题
以上考虑的问题都是基于在二维平面内进行分类的情况。其实,对于高维度情况的分类也类似。
高维空间的样本,其区别也只是特征坐标更多,比如四维空间的点x的坐标为。但直接运用上文特征处理的视角来分析,不过是对坐标进行参数更多的函数运算得到新的特征。并假设z是某种程度的逻辑发生比,通过其是否大于0来判断样本所属分类。
而且,如果是高维线性可分的情况,则可以有更近直观的理解。
- 如果是三维空间,分离边界就是一个空间中的一个二维平面。两类点在这个二维平面的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数。
- 如果是高维空间,分离边界就是这个空间中的一个超平面。两类点在这个超平面的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数。
- 特殊的,如果是一维直线空间,分离边界就是直线上的某一点p。一类点在点p的正方向上,另一类点在点p的负方向上。这些点在直线上的坐标可以天然理解成类似逻辑发生比的情况。可见一维直线空间的分类问题是其他所有高维空间投影到法向量后的结果,是所有逻辑回归问题的基础。
多分类逻辑回归的问题
以上考虑的问题都是二分类的问题,基本就是做判断题。但是对于多分类的问题,也就是做选择题,怎么用逻辑回归处理呢?
其基本思路也是二分类,做判断题。
比如你要做一个三选一的问题,有ABC三个选项。首先找到A与BUC(”U”是并集符号)的分离边界。然后再找B与AUC的分离边界,C与AUB的分离边界。
这样就能分别得到属于A、B、C三类的概率,综合比较,就能得出概率最大的那一类了。
总结列表
为了把本文的关系梳理清楚,我们画了以下这张图表。