如何提高有序分类logistic回归 regression 分类准确率

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
多项分类Logistic回归分析的功能与意义 (1)
下载积分:2500
内容提示:多项分类Logistic回归分析的功能与意义 (1)
文档格式:DOCX|
浏览次数:46|
上传日期: 13:11:42|
文档星级:
该用户还上传了这些文档
多项分类Logistic回归分析的功能与意义 (1)
官方公共微信引用本文 0
付仲良, 杨元维, 高贤君, 赵星源, 逯跃锋, 陈少勤. 利用多元Logistic回归进行道路网匹配[J]. 武汉大学学报·信息科学版, ): 171-177.
FU Zhongliang, YANG Yuanwei, GAO Xianjun, ZHAO Xingyuan, LU Yuefeng, CHEN Shaoqin. Road Networks Matching Using Multiple Logistic Regression[J]. Geomatics and Information Science of Wuhan University, ): 171-177.
利用多元Logistic回归进行道路网匹配
付仲良1, 杨元维1, 高贤君2, 赵星源1, 逯跃锋3, 陈少勤4 &&&&
1. 武汉大学遥感信息工程学院, 湖北武汉, 430079;2. 长江大学地球科学学院, 湖北武汉, 430100;3. 山东理工大学建筑工程学院, 山东淄博, 255049;4. 浙江省测绘科学技术研究院, 浙江杭州, 310012
基金项目: 山东省自然科学基金(ZR)。
第一作者: 付仲良,教授,主要从事地理信息系统、矢量匹配及空间数据更新研究。
*通讯作者Corresponding author.yyw_08@
摘要: 识别同名道路在多源异构道路网匹配过程中十分关键。提出了一种多元Logistic模型的道路网匹配算法。首先选取并设计了能有效综合空间与非空间信息进行道路不相似性描述与区分的三种特征,即最小方向变化角、综合中值Hausdorff距离和语义差异三种不相似性特征,然后利用此三项特征结合多元Logistic回归模型构建准确的道路网匹配模型。利用该模型对道路网中待匹配道路进行匹配概率预测,从而获取道路的匹配结果,实现路网匹配。实验结果表明,本文方法避免了组合特征精确权值与阈值的设定,并能有效解决匹配结果对单元变量过于依赖的问题,具有良好的适应性、较高的准确率和召回率。
道路网匹配&&&&
地图合并&&&&
多元Logistic回归&&&&
综合中值Hausdorff距离&&&&
Road Networks Matching Using Multiple Logistic Regression
FU Zhongliang1, YANG Yuanwei1, GAO Xianjun2, ZHAO Xingyuan1, LU Yuefeng3, CHEN Shaoqin4 &&&&
1. School of Remote Sensing and Information Engineering, Wuhan University, Wuhan 430079, China;2. School of Geosciences, Yangtze University, Wuhan 430100, China;3. School of Civil and Architectural Engineering, Shandong University of Technology, Zibo 255049, China;4. Zhejiang Academy of Surveying and Mapping, Hangzhou 310012, China
First author: FU Zhongliang, PhD, professor, specializes in GIS, vector matching and spatial database updating. E-mail:
Corresponding author: YANG Yuanwei, PhD candidate. E-mail: yyw_08@
Foundation support: The Natural Science Foundation of Shandong Province, No. ZR.
Abstract: Identifying corresponding objects is crucial in the process of heterogeneous road network matching. This paper proposed a road network matching method based on a multiple logistic regression algorithm. First, three dissimilar characteristics integrating both spatial and non-spatial features were used to describe the difference of the corresponding pthe minimum angle of the orientation, the mixed median Hausdorff distance, and semantic discrepancy. Using these three characteristics as variables of multiple logistic regression, we built a basic multiple logistic regression matching model. Samples to train the final road matching model were acquired to obtain matching results by predicting probability of each candidate road matching pair. Experimental results show that this method needs no exact feature weights and thresholds, and can solve the matching result problems stemming from over-reliance on single variable. This method has good adaptability, with higher precision and recall rates.
Key words:
road networks matching&&&&
map conflation&&&&
multiple Logistic regression&&&&
mixed mediam Hausdorff distance&&&&
随着空间信息获取与处理技术的快速发展,多源、多精度、多时相和多尺度空间信息的交换、融合与共享成为一种新的发展趋势。许多学者对矢量融合中地图合并(map conflation)展开研究,矢量匹配是地图合并中必不可少的关键步骤,道路网匹配是其中的一项研究热点[]。如何对多源道路网数据进行有效融合,提高其综合质量及复用性,降低冗余,获得信息丰富、位置精确的道路网数据,更好地为电子地图、路径导航、LBS(location based service)等提供数据支持有重要价值。
国内外学者从空间和非空间信息对道路网特征进行了大量的研究,目前对道路网匹配方法的研究多集中在权值设定与阈值选取方面,主要可分为阈值法和模型法。阈值法主要利用道路节点或弧段的相似性特征组合直接结合匹配阈值构建匹配判定条件来识别同名道路。Saalfeld等基于“蜘蛛编码”规则,选取合适的匹配阈值,实现对道路节点的匹配[];Gabay等利用点距和线段方向夹角共同作用进行匹配[];Samal等提出了利用上下文实体匹配方法,通过构建的近似图的相似度比较来判定匹配[];安晓亚等提出了一种基于结点和弧段的相似性度量的不同比例尺地图数据网状要素匹配算法[];罗国玮等采用组合对象空间特征及语义特征进行综合比较的最优组合匹配法[]。阈值法具有算法结构简单、耗时短、准确率相对较高等优点,但存在需要先验知识人工干预较多,数据针对性强等缺点。
模型法主要采用道路节点或弧段的相似性特征结合概率理论、迭代方法或数学模型等获取匹配结果。童小华等提出了基于概率理论的多指标匹配模型[];巩现勇等利用蚁群算法的群体优势,寻找全局最优的道路网同名实体匹配方案[];Li和Goodchild提出了基于最优化模型的全局同步匹配算法[];Tong等运用最优化和迭代Logistic回归匹配算法实现道路网自动匹配[]。模型法的特点是需要先验知识少、自动化程度高、数据适应性较强等,但在处理复杂匹配类型时能力相对较弱,算法耗时较长;其次,文献[9]中不能处理一对多的情况;文献[7]虽能处理一对多的情况但计算较为复杂;文献[8]中蚁群算法的信息挥发系数、最大搜索次数和蚁群规模等需要根据经验和多次试验确定;而文献[10]由于只采用单变量作为回归模型的自变量,导致其预测匹配结果对这个唯一变量过于敏感。
针对上述问题,本文提出一种多元Logistic回归匹配(multiple Logistic regression matching,MLRM)算法,通过选取并综合多种差异信息,能更有效描述道路待匹配对差异的多个不相似性特征,构建多元Logistic回归匹配模型,以预测出待匹配对之间的匹配概率,实现道路网的匹配。
1 多元Logistic回归的多特征融合匹配算法
1.1 不相似性计算
描述道路待匹配对的不相似性特征很多,如形状、距离、语义、拓扑关系等。本文从形状、距离和语义三方面出发,结合道路的空间与非空间特征,设计了最小方向变化角、综合中值Hausdorff距离和语义差异三方面的特征,综合描述道路间的不相似性。
最小方向变化角
线的方向变化角描述线形状的整体变化趋势,是描述线状实体相似性的一个重要特征。式(1)所示的正切角可有效表示线上各点的方向。
式中,θ(t)表示道路线在点t处正切线与水平方向所成的夹角;ω是参数t的单位间隔。
采用正切角比较两条道路方向差异的具体方法为:将待匹配道路线进行等分;利用式(1)计算待匹配道路线上各等分点的正切值;计算两条待匹配道路的方向变化角的差异。按待匹配道路的长度差异,其方向变化角差异的计算可分为两种情况。
情况一 当两条道路之间长度差异较小时(即length(lA)≤length(lB)≤2length(lA)或length(lB)≤length(lA)≤2length(lB),length(lA)和length(lB)是道路lA、lB的长度),采用在两条道路上选取相同数量的等分点并计算对应点之间的方向差异。
计算两条道路的方向变化角之差Orn_diff(lA,lB):
式中,θi、φi分别是指在线段lA、lB上的点i处的正切角;M是表示等分点的总个数。
情况二 当两条道路之间长度差异较大时(即length(lA)>2length(lB)或length(lB)>2length(lA)),具体计算步骤如下:① 假设较短道路为lA、较长的道路为lB;首先将lA均分,获取等分间隔Δl;②以lB的任一端点为初始等分的起始位置,采用间隔Δl对lB进行等分,得到道路lB子对象lB′j(j=0,1,2,…t),利用式(2)计算lA与lB′j之间的方向差异Orn_diff(lA,lB′j);③将lB′j的起始位置的游标整体移到下一个等分点,j=j+1,获取新的道路子对象lB′j+1并与lA进行比较。以此类推,直到j=t,即完成lA与lB的比较。取Orn_diff(lA,lB′j)的最小值作为lA与lB的方向变化角之差。以图 1为例,其中短道路点集pA = {b1,b2,b3,b4,b5,b6}和长道路点集pB = {p1,p2,…,p26}。循环比较时,先取点集pA与点集pB中的p1到p6组成的子对象pB1进行比较,然后,将pB1中游标整体将向下移一个等分点得到由p2到p7组成新对象pB2,将pA与pB2进行比较,以此类推,直至完成点集pA与点集pB中的p20到p26的比较,取最小值作为最终结果。
图 1 两条道路长度差异较大时变化角比较示意图
Fig. 1 Schematic Diagram of Comparing Change Angles when Large Differences Between Two Roads
综合来说,两条道路的整体最小方向变化角如式(3)所示:
式中,N表示lA与lB的等分点总个数之差;Orn_diffk(lA,lB)表示第k次比较获取的最小方向变化角;Orn(lA,lB)表示两条道路的整体最小方向变化角。
综合中值Hausdorff距离
空间距离是度量空间对象之间相对位置的重要参数,同时可作为描述对应实体的不相似性的重要特征。Hausdorff距离常用于描述线对象之间距离,但由于其取极值原理,致使无法有效表达线对象之间平均距离。中值Hausdorff距离较好表达道路对象之间的距离分布主趋势[],但不适用于道路对象长度异常,尤其是距离差异较大的情况,而文献[]提出的较短中值Hausdorff距离通过从较短线对象到较长线对象的有向距离解决了这一异常情况,但其未考虑垂足不在对应的线段上时造成的距离不准确问题,且无法处理复杂道路类型。因此,本文提出一种以欧氏距离和垂直距离为基础的综合中值Hausdorff距离(mixed median Hausdorff distance,MM_HD)。其基本思想是,作一条道路子对象端点到另一条道路子对象的垂足,若垂足点位于对应线段上,则采用垂直距离;若位于其延长线上,则将采用欧式距离。综合中值Hausdorff距离计算如式(4)所示:
式中,length(lA)和length(lB)分别表示线要素lA和lB的长度;m(lB,lA)、m(lA,lB)分别为lB到lA、lA到lB的综合中值Hausdorff距离,如式(5)、(6)所示。
式中,pi和pj分别是lA和lB上的节点;p′i和p′j分别是pi和pj在lB和lA的垂足;pa和pb分别是lA和lB上的任意点;d(pj,p′j)表示pj到p′j的垂直距离;e(pb,pa)表示pb到pa的欧氏距离。以length(lA)≥length(lB)为例,当垂足p′j在lA的第i个子对象线段segi上时,取pj到p′j的垂直距离,m(lB,lA)={(d(pj,p′j))};否则m(lB,lA)={(e(pb,pa))}
对如图 2所示,测试数据采用文献[]中提出的SM_HD与本文提出的MM_HD,分别进行距离对比,结果如图 3所示。可以看出,在图中大部分待匹配对的距离描述上,两者的描述能力相当。但在部分待匹配对上存在明显的差异:① 如SM_HD(a11,b16)= 10.31,MM_HD(a11,b16)= 10.34;SM_HD(a12,b16)= 5.37,MM_HD(a12,b16)= 34.54,从匹配对a11∶b16与非匹配对a12∶b16的距离得出MM_HD分析错误匹配的能力更强;② 待匹配对a6∶b6、a6∶b17、a7∶b7、a7∶b18为曲线类型,SM_HD未能处理该类型(给定一个不被视为匹配的极大距离常量,图中这一距离常量为100 m),而MM_HD可以正常处理这一情况。综上所述,在描述道路距离方面的综合能力MM_HD要优于SM_HD。
图 2 待匹配测试数据图
Fig. 2 Diagram of Matching Data
图 3 SM_HD与MM_HD的距离的对比图
Fig. 3 Comparison Roads of the Distance Values Between the Matching Pairs Using the SM_HD and MM_HD
在现实世界中同一地理对象可能有多种属性表达方式,这种现象导致语义异构,并造成不同数据集中属性不一致。语义匹配是识别语义异构的方法,其具有计算简便、可靠性高等特点。因此,本文进一步采用语义差异来描述道路之间的不相似性。运用语义信息依赖于数据的质量和数据本身的特征。本文具体采用编辑距离来表达语义差异,该距离是通过计算从原字符串转换到目标字符串所需要的最少的字符插入、删除和替换的编辑次数[]。语义差异综合计算公式如式(7)。
式中,a与b代表两个待匹配的字符串;Ed(a,b)表示编辑距离;max(a,b)表示其中字符较长的字符串。如果他们的属性不完整,则Smn(a,b)=0。φ为极小常量,它的存在是为了区分当出现空值字段后取的语义差异为零的情况。
通过上述方法,可获取道路网对象的3个不相似性特征计算,并组成3×N(N表示待匹配对的数量)的矩阵,然后根据这一矩阵构建多元Logistic回归模型。
1.2 多元Logistic回归模型匹配结果预测
Logistic回归模型主要解决二分因变量(即1或0)分类问题,根据这一特征,可将其用到道路待匹配对分类(即“匹配”或“非匹配”)。预测待匹配对之间的匹配概率,进而判断匹配结果。
以往匹配方法中常采用单元Logistic回归模型匹配,计算简单,但由于其分类实质上采用固定值,易导致预测匹配概率值过于依赖单变量。当数据情况复杂时,单变量无法有效表达待匹配对之间的差异,而采用多变量的方式构建多元Logistic回归匹配模型可从多个方面共同预测匹配概率,减少对某一变量的过度依赖,能够有效克服单元逻辑回归模型的缺陷,能用于含有更复杂道路数据的道路网的匹配中。
依据Logistic回归的规则,匹配变量T表示二分变量(T=1或T=0)。假设待匹配对之间是匹配关系,那么T=1;反之,则T=0。当匹配事件发生T=1则匹配预测概率可以表达为P(T=1),它也表达条件匹配的概率。假设用k个自变量X1,X2,…,Xk表示去预测匹配变量(T),预测匹配概率为:
中,回归系数β1、β1、β2、…、βk 采用最大似然估计法进行计算。因此,估计模型(即预测匹配概率)为:
式中,0、1、2、…、k分别是β0、β1、β2、…、βk的估计值,结合本文方法原理,设定k=3;自变量X1、X2、X3分别代表最小方向变化角、综合中值Hausdorff距离、语义差异,1、2、3分别是此三个自变量的回归系数的估计值。在预测匹配概率的过程中,割点概率z=0.5,以割点为界,可根据两条道路间最大似然估计匹配概率划分匹配与否的结果。如果P≥z,那么两条道路被视为匹配;反之,则不匹配。
2 采用多元Logistic回归的道路网
匹配算法的实现步骤
本文利用多元Logistic回归的道路网匹配算法的具体步骤如下。
(1) 选定参考数据集和待匹配数据集;
(2) 获取两个数据集实体信息,获取等分点数据;并根据实体信息构建拓扑关系,获得节点和弧段;
(3) 根据两幅地图的比例尺和精度等信息确定同名点的最大距离偏差ε;
(4) 根据最大距离偏差ε在参考数据集中寻找所有候选匹配道路;
(5) 按照式(3)、式(4)和式(7)计算待匹配对之间的不相似性,组成不相似性特征矩阵;
(6) 将获得的结果按照式(8)构建多元Logistic回归模型;
(7) 根据计算出的回归系数,预测待匹配数据集的匹配概率。
3 实验分析
本文选取浙江省同一地区不同时相的道路网数据集进行实验验证。通过Microsoft Visual Studio 2010(C#),ArcGIS Engine 10.1实现待匹配对之间的不相似性计算;通过Matlab 6.0实现模型构建及待匹配对的匹配概率预测。通过对多个试验区域的对比分析,选取了能充分描述算法测试结果三种类型的子区域。这三个子区域分别是城市子区域(CD)、山区或江湖流域子区域(ML)、混合子区域(MD),如图 4所示。为证明实际效果,对以上三区域分别采用本文方法、文献[]中的Opt算法和文献[]中的OILRM算法进行对比。从匹配准确率和算法复杂两方面来评价。
图 4 来自浙江省三个子区域的实测数据图
Fig. 4 Three Domains of Test Data from Zhejiang Province
3.1 匹配准确率分析
为了能够定量的分析匹配结果,本文选用如式(10)和式(11)所示的准确率和召回率进行评价。准确率P是指正确匹配对与总匹配对的比率;召回率R是指正确的匹配对与数据中实际的正确匹配对的比率:
式中,f(C)表示正确的匹配数;f(W)表示错误的匹配数;f(U)表示漏匹配数。
通过选取的待匹配对样本训练构建了图 4(a)、图 4(b)、图 4(c)三个子区域的多元Logistic回归模型的回归系数、标准误差以及系数估计值的95.0%置信区间,见表 1。可以看出:① 回归系数1、2、3的值均为正,说明参数对匹配都有着积极的作用;② 三个子区域之间的回归系数相当,最小方向变化角比综合中值Hausdorff距离与语义对模型的整体影响要小一些。表 2统计了数据集所含实体数量、语义完整度、正确匹配数、错误匹配数、漏匹配数、准确率和召回率。MLRM、OILRM和Opt三种方法在三个数据测试子区域的准确率和召回率对比如图 5所示。
表 1 实验子区域的模型参数估计结果
Tab. 1 The Regression Coefficients of the Study Area
回归系数城市山区或江湖流经混合估值标准误差95.0%置信区间估值标准误差95.0%置信区间估值标准误差95.0%置信区间下限上限下限上限下限上限0-2.0920.900-3.856-0.328-1.7270.724-3.146-0.308-1.8210.785-3.360-0.28210.3180.1290.0650.5710.3220.231-0.1310.7750.4600.1460.1740.74621.3950.1891.0241.7651.4550.1681.1251.7841.3530.1860.9881.71731.3140.0801.1571.4701.2810.0901.1041.4571.1350.0601.0171.252
表 2 三种算法的匹配结果统计
Tab. 2 Matching Results of the Three Meatching Mthods in the Test Area
道路待匹配集城市子区域山区或江湖子区域混合子区域数据集A数据集B数据集A数据集B数据集A数据集B道路对象总数10610194100114122语义完整度/%604256345646算法名称OptOILRMMLRMOptOILRMMLRMOptOILRMMLRMf (C)868697647185697892f (W)1510530218453317f (U)1212024125442012P(%)75.089.596.868.077.190.460.570.284.4R(%)78.587.710072.785.594.461.079.588.4
从表 2和图 5得出以下结论。
图 5 三种方法在匹配正确率和召回率的对比情况
Fig. 5 Comparison of the Performances of the Three Matching Methods in Terms of Matching Accuracy and Matching Recall in the Study Area
(1) MLRM、OILRM和Opt算法获得的匹配准确率依次降低。当测试数据集为城市道路数据时,三种方法的准确率都相对较高。当数据情况更复杂时,OILRM和Opt法匹配准确率明显下降,而本文提出的MLRM法几乎保持不变,原因为:① 本文采用的多元Logistic回归匹配模型比其他两种方法在分析错误匹配的能力要好。如图 4(b)中虚线箭头所指待匹配对a1∶b1被正确地检测出,而OILRM未检测出。其中MLRM法中Orn(a1,b1) = 0.551,MM_HD(a1,b1) =26.057,Smn(a1,b1) = 0.22,而OILRM方法中SM_HD(a1,b1)=26.06;② MM_HD比SM_HD更能够处理道路复杂情况(含有曲线或道路交叉口无交点),如图 4(a)中虚线箭头所指待匹配对a1∶b1与a1∶b27,OILRM法中,SM_HD(a1,b1) = 11.76和SM_HD(a1,b27) =7.83;而在MLRM法中,MM_HD(a1,b1) =11.79,MM_HD(a1,b27) = 62.34。可以看出,SM_HD(a1,b27)比SM_HD(a1,b1)的值小,所以OILRM法可能误判a1∶b27为匹配对而真匹配对a1∶b1被漏掉;MM_HD(a1,b27)比MM_HD(a1,b1)大许多,这样就可以有效避免误判情况发生;
(2) MLRM、OILRM和Opt法获得的匹配召回率都较高,尤其是后两种算法,原因是Opt算法未能处理非1∶1的情况,而OILRM算法无法有效处理复杂的道路网匹配类型。
选取较大的道路数据集为对象,该对象包含1 085个线实体(数据集A中548个线实体,在数据集B中,537个线实体,OILRM与Opt算法中逻辑回归样品则为294 276)。在准确率表现方面,Opt算法匹配准确率为346/537 = 64.4%;OILRM算法匹配准确率为476/537 = 88.6%。MLRM算法的准确率为493/537 = 91.8%。
3.2 复杂度评价
假设m、n分别代表较小、较大的数据集所含实体数量,通过对Opt、OILRM、MLRM三种算法的复杂度进行分析可得:① 三者的时间复杂度分别为O(n2m)、O(n2m)+O(n)、O(k2m),k表示线实体等分点个数;② 在空间复杂度方面,由于OILRM算法在精炼匹配结果步骤中采用的自迭代算法,其空间复杂度为O(n),其他两种算法的空间复杂度均为O(1)。
三种算法在不同数据集规模的耗时对比实验见表 3。分析可知,当数据集规模不大时,Opt算法与OILRM算法在耗时上相当。原因是其核心为最优化算法,OILRM算法是在Opt算法的基础上增加了迭代Logistic回归过程,所以OILRM算法比Opt算法的耗时稍长,MLRM算法采用缓冲区搜索邻近对象使其寻优规模缩减至最小。当数据集规模增大时,Opt算法和OILRM算法的匹配耗时急剧增加,必须将其划分若干子区域进行匹配,以达到减少计算时间和保持匹配精度的目的,而无需进行分区处理,全局寻优规模缩减至最小的原理使得MLRM算法的耗时增长不明显。
表 3 Opt、OILRM和MLRM三种算法时间复杂度的比较
Tab. 3 Comparison of Computation Cost Among Opt,OILRM and MLRM
数据集规模耗时/s数据集A数据集BOptOILRMRLRM1061013.633.682.13941002.832.862.101141223.934.012.32548537421.35421.42132.42
道路网匹配是道路网融合的重要一步。本文提出MLRM算法,首先设计了道路待匹配对之间最小方向变化角、综合中值Hausdorff距离和语义差异三种不相似性衡量指标,然后结合多元Logistic回归模型模拟道路匹配模型,准确地预测匹配结果,有效避免了组合特征间权值和匹配结果阈值的设定,且能处理道路类型复杂的情况(含有曲线或道路相交但无交点和非一对一情况),本文算法可应用于实际道路网的更新中。
Yuan Tao S C. Development of Conflation Components[C]. Proceedings of Geoinformatics, Ann Arbor, 1999
Saalfeld A. Conflation Automated Map Compilation[J].
Gabay Y. Doytsher Y. Automatic Adjustment of Line Maps[C]. The GIS/LIS.94 Annual Convention, Arizona, Phoenix, USA, 1994
Samal A, Seth S, Cueto K. A Feature-based Approach to Conflation of Geospatial sources[J].
An Xiaoya, Sun Qun, Yu Bohu. Feature Matching from Network Data at Different Scales Based on Similarity Measure[J]. Geomatics and Information Science of Wuhan University, ):224-228(安晓亚, 孙群,尉伯虎. 利用相似性度量的不同比例尺地图数据网状要素匹配算法[J].
Luo Guowei, Zhang Xingchang, Qi Lixin, et al. The Fast Positioning and Optimal Combination Matching Method of Change Vector Object[J]. Acta Geodaeticaet Cartographica Sinica, ):(罗国玮, 张新长, 齐立新,等. 矢量数据变化对象的快速定位与最优组合匹配方法[J].
Tong Xiaohua, Deng Susu, Sui Wenzhong. A Probabilistic Theory-based Matching Method[J]. Acta Geodaeticaet Cartographica Sinica, ):210-217(童小华, 邓愫愫,史文中. 基于概率的地图实体匹配方法[J].
Gong Xianyong, Wu Fang, Ji Cunwei, et al. Ant Colony Optimization Approach to Road Network Matching[J]. Geomatics and Information Science of Wuhan University, ):191-195(巩现勇, 武芳, 姬存伟,等. 道路网匹配的蚁群算法求解模型[J].
Li L, Goodchild M. Automatically and Accurately Matching Objects in Geospatial Datasets[J].
Tong X, Liang D, Jin Y. A Linear Road Object Matching Method for Conflation Based on Optimization and Logistic Regression[J].
Min Deng, Zhilin Li. Xiaoyong. Chen. Extended Hausdorff Distance for Spatial Objects in GIS[J].
Navarro G. A Guided Tour to Approximate String Matching[J].分类资料的Logistic回归分析SPSS_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
分类资料的Logistic回归分析SPSS
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩9页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢来自集智百科
我们先制造一份示例数据来看看logistic 回归是如何工作的。
首先调用模块
import numpy as np
from sklearn import linear_model, datasets
import matplotlib.pyplot as plt
from scipy.stats import norm
然后生成模拟数据并制图
np.random.seed(3)
X = np.hstack((norm.rvs(loc=2, size=n, scale=2), norm.rvs(loc=8, size=n, scale=3)))
y = np.hstack((np.zeros(n),np.ones(n)))
plt.figure(figsize=(10, 4))
plt.xlim((-5, 20))
plt.scatter(X, y, c=y)
plt.xlabel(&feature value&)
plt.ylabel(&class&)
plt.grid(True, linestyle='-', color='0.75')
plt.savefig(&E:/wulingfei/logistic_classification/logistic_classify1.png&, bbox_inches=&tight&)
我们就看到这样一张图
上图有80个数据点,在模拟X的时候,我们使用了两个正态分布,分别制定各自的均值,方差,生成40个点。模拟Y的时候我们直接生成40个0和40个1。两个正态分布均值虽然不同,但在方差作用下,在X上的分布有重叠。我们假设这是数据中某个feature的表现,要求使用一个模型,根据这个feature来判别所属的Y类别(class)。
这种情况比较适合使用logistic regression,为什么呢?
我们先来看一下线性回归的公式
如果我们现在手头需要预测的因变量不是连续的,而是一个0/1变量,那怎么办呢?一种思路就是把公式进行变形,使得我们原来积累的线性回归的公式继续能用。
怎么做到这一点呢?我们可以考虑如下三个变形步骤:
1. 从离散变成连续:不是直接判定一个case是0还是1,而是判定它属于0或者1的概率;
2. 从之间的连续变成的连续:不考虑0或者1的绝对概率,而是考虑取1的概率和取0的概率的比值odds ratio;
3. 从的连续变成的连续:把odds ratio取对数。
k = np.arange(0, 1, 0.001)
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.xlim((0, 1)); plt.ylim((0, 10))
plt.plot(k, k / (1 - k))
plt.xlabel(&P&); plt.ylabel(&odds = P / (1-P)&)
plt.grid(True, linestyle='-', color='0.75')
plt.subplot(1, 2, 2)
plt.xlim((0, 1))
plt.plot(k, np.log(k / (1 - k)))
plt.xlabel(&P&); plt.ylabel(&log(odds) = log(P / (1-P))&)
plt.grid(True, linestyle='-', color='0.75')
plt.tight_layout(pad=0.4, w_pad=0, h_pad=1.0)
plt.savefig(&E:/wulingfei/logistic_classification/logistic_classify2.png&, bbox_inches=&tight&)
通过上述代码,我们看到经过这三步变形,我们得到了一个理论值在负无穷到正无穷的因变量,如下图所示,这样,我们之前的线性回归的知识就可以用上了。
那么,原来线性回归,现在就变成了logistic回归:
或者也可以写成
现在,我们手头已经有了模型,剩下的任务就是参数拟合。也就是说,我们要找到这样的的参数和,使得所有的{x_i,p_i} pair根据这个模型拟合之后,总的误差最小。实际的参数拟合中,因为我们实际上只有一个p_i,所以往往采取最大似然估计的方法。
使用sklearn包自带的拟合函数,我们可以对示例数据做线性和logistic拟合,作为对比
#---linear regression----------
xs=np.linspace(-5,15,10)
from sklearn.linear_model import LinearRegression
clf = LinearRegression()
clf.fit(X.reshape(n * 2, 1), y)
def lin_model(clf, X):
return clf.intercept_ + clf.coef_ * X
#---logistic regression--------
from sklearn.linear_model import LogisticRegression
logclf = LogisticRegression()
logclf.fit(X.reshape(n * 2, 1), y)
def lr_model(clf, X):
return 1.0 / (1.0 + np.exp(-(clf.intercept_ + clf.coef_ * X)))
#----plot---------------------------
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.scatter(X, y, c=y)
plt.plot(X, lin_model(clf, X),&o&,color=&orange&)
plt.plot(xs, lin_model(clf, xs),&-&,color=&green&)
plt.xlabel(&feature value&)
plt.ylabel(&class&)
plt.title(&linear fit&)
plt.grid(True, linestyle='-', color='0.75')
plt.subplot(1, 2, 2)
plt.scatter(X, y, c=y)
plt.plot(X, lr_model(logclf, X).ravel(),&o&,color=&c&)
plt.plot(xs, lr_model(logclf, xs).ravel(),&-&,color=&green&)
plt.xlabel(&feature value&)
plt.ylabel(&class&)
plt.title(&logistic fit&)
plt.grid(True, linestyle='-', color='0.75')
plt.tight_layout(pad=0.4, w_pad=0, h_pad=1.0)
plt.savefig(&E:/wulingfei/logistic_classification/logistic_classify3.png&, bbox_inches=&tight&)
其中连续曲线展示了我们的模型,黄色和绿色的数据点分别对应着线性模型和Logistic模型对原始数据点的预测。logistic的表现比较好,例如对于x略小于5左右的数据点,logistic预测属于class 1概率已经大于0.6,目测来说也是比较合理的。而我们使用线性回归判别的话(我们很粗暴地假设线性预测值&0.5则为class 1),此时仍然是被判别为class 0的。
接下来,我们使用logistic来处理一个真实的数据,iris花的数据。关于这个数据的基本描述可以看。
这张图展示了4维特征空间中的数据所有的二维投影:
这里的情况比之前的模拟数据复杂,应为我们现在的自变量有两个而不是一个(我们从四个维度中选取两个),因变量有三个而不是两个。不过幸好sklearn的fit函数和predict函数让我们处理起这些问题来变得很容易。
音乐数据训练样本的获得和使用快速傅里叶变换(FFT)预处理的方法见之前在已经介绍过。我们现在的任务是
1. 把训练集扩大到每类100个首歌而不是之前的10首歌,类别仍然是六类:jazz,classical,country, pop, rock, metal。
2. 同时使用logistic回归和KNN作为分类器。
3. 引入一些评价的标准来比较Logistic和KNN在测试集上的表现。
因为我们每次都要对音频进行FFT处理,这个速度是比较慢的,所以为了加快训练的速度,我们可以把处理完的数据先存出来,在训练分类器时直接读取这个保存的数值型数据。为了实现这一点,我们操作如下:
def create_fft(g,n):
rad=&E:/wulingfei/music_classification/genres/&+g+&/converted/&+g+&.&+str(n).zfill(5)+&.au.wav&
sample_rate, X = wavfile.read(rad)
fft_features = abs(scipy.fft(X)[:1000])
sad=&E:/wulingfei/music_classification/trainset/&+g+&.&+str(n).zfill(5)+ &.fft&
np.save(sad, fft_features)
#-------creat fft--------------
genre_list = [&classical&, &jazz&, &country&, &pop&, &rock&, &metal&]
for g in genre_list:
for n in range(100):
create_fft(g,n)
#-------read fft--------------
X=[]
Y=[]
for g in genre_list:
for n in range(100):
rad=&E:/wulingfei/music_classification/trainset/&+g+&.&+str(n).zfill(5)+ &.fft&+&.npy&
fft_features = np.load(rad)
X.append(fft_features)
Y.append(genre_list.index(g))
X=np.array(X)
Y=np.array(Y)
在这个过程中,1.35G的原始音乐数据提出来的特征数据被存储成4.6M的矩阵数据,数据被压缩了3万倍,自然处理时间大大加快。
首先我们要将原始数据分为训练集和测试集,这里是随机抽样80%做测试集,剩下20%做训练集
import random
randomIndex=random.sample(range(len(Y)),int(len(Y)*8/10))
trainX=[];trainY=[];testX=[];testY=[]
for i in range(len(Y)):
if i in randomIndex:
trainX.append(X[i])
trainY.append(Y[i])
testX.append(X[i])
testY.append(Y[i])
接下来,我们使用sklearn,来构造和训练我们的两种分类器
#------train logistic classifier--------------
from sklearn.linear_model import LogisticRegression
logclf = LogisticRegression()
logclf.fit(trainX, trainY)
predictYlogistic=map(lambda x:logclf.predict(x)[0],testX)
#----train knn classifier-----------------------
from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=1)
neigh.fit(trainX)
predictYknn=map(lambda x:trainY[neigh.kneighbors(x,return_distance=False)[0][0]],testX)
将predictYlogistic以及predictYknn与testY对比,我们就可以知道两者的判定正确率
a = array(predictYlogistic)-array(testY)
accuracyLogistic = 1-np.count_nonzero(a)/len(a)
b = array(predictYknn)-array(testY)
accuracyKNN = 1-np.count_nonzero(b)/len(b)
logistic的正确率是46%,KNN的正确率是63%。后者是更好的分类器。当然,更严格的检验要使用cross-validation,如下图所示
def accuracyRate(classifier,trainX,trainY,testX,testY):
if classifier==&logistic&:
logclf = LogisticRegression()
logclf.fit(trainX, trainY)
predictY=map(lambda x:logclf.predict(x)[0],testX)
if classifier==&knn&:
neigh = NearestNeighbors(n_neighbors=1)
neigh.fit(trainX)
predictY=map(lambda x:trainY[neigh.kneighbors(x,return_distance=False)[0][0]],testX)
a = array(predictY)-array(testY)
accuracy = 1-np.count_nonzero(a)/len(a)
return accuracy
index=range(len(Y))
random.shuffle(index)
ARS=[]
for i in range(5):
l1=range(i*100,(i+1)*100)
l2=map(lambda x:index[x], l1)
l3=np.setdiff1d(index,l2)
testX=map(lambda k:X[k], l2)
testY=map(lambda k:Y[k], l2)
trainX=map(lambda k:X[k], l3)
trainY=map(lambda k:Y[k], l3)
r1=accuracyRate(&logistic&,trainX,trainY,testX,testY)
r2=accuracyRate(&knn&,trainX,trainY,testX,testY)
ARS.append([r1,r2])
ARS=np.array(ARS)
得到的ARS就包含了两种分类器5次测试的结果。我们也可以把这个结果用柱形图画出来
ind = np.arange(len(ARS))
# the x locations for the groups
width = 0.3
fig = plt.figure()
ax = fig.add_subplot(111)
g1=ax.bar(ind, ARS[:,0], width, color='c',alpha=0.7)
g2=ax.bar(ind+width, ARS[:,1], width, color='orange',alpha=0.7)
ax.set_ylabel('Accuracy rate')
ax.set_title('Accuracy rate of two classifiers')
ax.set_xticks(ind+width)
ax.set_xticklabels(('test1', 'test2', 'test3', 'test4', 'test5'))
legend( (g1[0], g2[0]), ('Logistic', 'KNN'),loc=&upper center& )
plt.plot()
plt.savefig(&E:/wulingfei/logistic_classification/logistic_classify6.png&, bbox_inches=&tight&)
计算得到,logistci分类器的平均准确率是41%,KNN分类器的平均正确率是60%。还是KNN表现比较好
但是,之前的这种cross-validation只能用于测量分类器的整体表现,无法具体分析分类器在某一个具体类别上的表现,不利于我们诊断bad case和提高feature engieering的水平,为了解决这个问题,我们引入confusion matrix来诊断分类器的问题。
from sklearn.metrics import confusion_matrix
cmlogistic = confusion_matrix(testY, predictYlogistic)
cmknn = confusion_matrix(testY, predictYknn)
def plotCM(cm,title,colorbarOn,givenAX):
ncm=cm/cm.max()
plt.matshow(ncm, fignum=False, cmap='Blues', vmin=0, vmax=1.0)
if givenAX==&&:
ax=plt.axes()
ax = givenAX
ax.set_xticks(range(len(genre_list)))
ax.set_xticklabels(genre_list)
ax.xaxis.set_ticks_position(&bottom&)
ax.set_yticks(range(len(genre_list)))
ax.set_yticklabels(genre_list)
plt.title(title,size=12)
if colorbarOn==&on&:
plt.colorbar()
plt.xlabel('Predicted class')
plt.ylabel('True class')
for i in range(cm.shape[0]):
for j in range(cm.shape[1]):
text(i,j,cm[i,j],size=15)
plt.figure(figsize=(10, 5))
fig1=plt.subplot(1, 2, 1)
plotCM(cmlogistic,&confusion matrix: FFT based logistic classifier&,&off&,fig1.axes)
fig2=plt.subplot(1, 2, 2)
plotCM(cmknn,&confusion matrix: FFT based KNN classifier&,&off&,fig2.axes)
plt.tight_layout(pad=0.4, w_pad=0, h_pad=1.0)
plt.savefig(&E:/wulingfei/logistic_classification/logistic_classify5.png&, bbox_inches=&tight&)
上图中对角线代表正确诊断的比例。对角线方格的颜色越深,其他位置方格的颜色越浅,分类器效果越好。可以看出,logistic在pop和rock两类上的表现明显比起KNN分类器明显较弱。这意味着如果我们要继续使用logitic,应该在这两类音乐的feature提取上再下更多功夫。}

我要回帖

更多关于 logistic regression 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信