当前位置:   article > 正文

探索性空间数据分析的相关信息解释_基于geoda的kmeans

基于geoda的kmeans

1.引言

这篇帖子内容有关arcmap地图绘制和局部空间自相关等等,希望可以帮助到你,先发布,后续会完善

 

2.新版白话空间统计(46)局部莫兰指数计算原理与操作篇(GeoDa版)(转自虾神说D公众号,极力推荐大家关注他)

2.1前言

我们在新版白话空间统计第44节,展示过这样一张图:

用四个象限来表示LISA的结果划分,今天我们具体来讲讲如何计算LISA也就是详细讲讲如何计算这个坐标轴上的空间滞后值和标准化(观测)值。
(PS:LISALocal Indicators of Spatial Association的简写,是anselin在1995年提出的一种方法论,里面用到的模型,就是local moran's i)

首先我们先来看这个笛卡尔坐标系的X轴和Y轴。
X轴是标准化之后的观测值,标准化的方法有很多,而这里用的是z-score标准化(zero-mena normalization,此方法最为常用的标准化方法)。
用官方的说法:多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理


数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。
Z-Score标准化的方法非常简单,公式如下:
Z-Score标准化 = (要标准化的值(观测值) -  平均值) / 标准差
z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
Y轴表示的是空间滞后值(何为空间滞后值,我们在下篇中会详细说明),即该要素的相邻要素的所有ZScore标准化观测值的空间加权平均
为了验证我们的理解对不对,可以直接用Excel来计算,来与GeoDa计算的结果进行对比,对比如下:
用Excel,对我们要计算的字段,进行ZScore标准化,可以得到如下结果:


然后利用Queen's Case的空间关系矩阵,求空间滞后值(因为太多了,所以我示例性的求其中一个就行):
比如求北京的空间滞后值,空间权重矩阵如下:

北京有两个邻居,分别是河北和天津,计算北京的空间滞后值,算法如下:
北京的空间滞后值 = 累加 (邻居的观测值的ZScroe标准化值 * 权重)/ 邻居的数量
其实也就是,也就是求了空间关系加权之后的平均值
我们的空间权重矩阵用的是queen's case,那么所有的邻居权重都是一样的,直接计算平均值就可以了:
 

北京的空间滞后值 

= (-0.490978428[天津的zscore] * 1[天津对北京的空间关系加权] 

+ 0.242135744[河北的zscroe] * 1[河北对北京的空间关系加权])/ 

-0.124421342


依此把所有的数据都算一遍,就可以得到所有要素的Zscroe和空间滞后值,然后,只要有两个值,就构成了X轴和Y轴,就可以绘制出散点图来了。
注意,大家在测试的时候,如果计算的结果和我不同,切记看这里:

如果用默认的空间权重矩阵,海南没有邻居,是不会参与计算的,所以你在手动计算平均值和标准差的时候,需要把海南排除掉。(有同学问,如果我要加入海南呢?答案是需要自定义修改空间权重矩阵,参考以前的文章)
新版白话空间统计(18)空间关系概念化之Geoda的面邻接构建及自定义


 


下面,我们用GeoDa来做局部莫兰指数,并且把值添加到属性里面,为什么要用GeoDa?因为ArcGIS不支持把计算保存计算出来的ZScore标准化值和空间滞后值,要看这两个值,只能用GeoDa(R语言和Python也行,以后有空说)。


2.2GeoDa进行局部莫兰指数分析,并且获得数值的完整操作流程:

STEP1:打开GeoDa软件之后,在连接数据源界面点击选择文件后面的打开按钮,选择我们需要打开的数据,这里我们需要打开shape file,所以选择第一项即可。

STEP2:

找到我们需要打开的Shapefile

STEP 3:在计算之前,需要先定义空间权重矩阵,所以在工具栏上选择空间权重管理:

STEP 4:

点击创建

STEP5:

选择ID(必须是唯一值,而且是整数或者字符串),在GeoDa的新版本里面,支持用字符串类型定义,我们这里选择CNPG_S_Cod,这个字段是各省的行政区划编码。

STEP6:

选择Queen连接(共点共边即相邻),秩选1(默认)就行,因为我们不需要进行二阶邻域计算。

STEP7:

点击创建的时候,会让你保存空间权重矩阵文件。

STEP8:

保存之后,会弹出一个警告(这是因为海南、台湾两地出现无相邻的要素),不用管,直接点击确定,然后会提示创建成功的对话框。

STEP9:

可以点击直方图或者连通图看目前的空间权重矩阵,也可以直接点击右上角的叉,关闭空间权重管理窗口。

STEP10:

接下去做局部莫兰指数,在下拉菜单找到空间分析——单变量局部Moran's I:

STEP11:

选择要进行莫兰指数分析的字段“GDP2018”,下面选择我们的空间权重,如果只有一个,就是默认的,如果定义了多个,可以切换选择。

STEP12:点击确定的时候,会问你结果用什么方式显示,我们可以把下面两个都选上,即聚类地图和Moran散点图,选择之后点击确定。

STEP13:

此时可以看见莫兰散点图与LISA聚类地图了:

STEP14:

下面我们把值保存到数据里面去,首先在散点图上面,点击鼠标右键,弹出功能菜单,并且选择保存结果:

STEP15:

在保存结果窗体中,把标准化数据和空间滞后两个复选框都选上,点击确定。

STEP16:

然后在工具栏上点击表格工具图标,打开数据属性表。

STEP17:

这时候,就可以看见计算出来的标准化数据和空间滞后值了。

STEP18:我们可以来对比一下,GeoDa计算出来的,和我们用Excel计算出来的结果,可以看见基本上是一致的(细节数值的不同,是因为计算的时候,Excel和GeoDa二者之间,保留的小数位不一致导致的)。
 

STEP19:同样,我们可以把局部莫兰指数也保存下来。
 

STEP20:

全部选择之后,点击确定

STEP21:

打开属性表,就可以看见多了三个字段,分别是具备莫兰指数、聚类与异常值标识以及P值。

注意,这里的聚类与异常值里面的数值,代表的是象限,另外因为计算机是从0开始计数的,所以结果就是0123——实际上应该是需要加1:分别表示第一二三四象限

最后,局部莫兰指数的值是怎么算出来的呢?
非常简单,直接用标准化值乘以空间滞后值即可,比如:
北京的局部莫兰指数= -0.000386 * -0.12233 = 

2.

3.核密度估计曲线分析

(1)“峰”越高,表示此处数据越“密集”。

(2)kernel曲线向右移动:XX水平不断提高。

(3)分布形态:右尾拉长,表示差异增加。

        第三,右拖尾存在逐年拉长现象,分布延展性在一定程度存在拓宽趋势,意味着全国范围内全要素能源效率的空间差距在逐步扩大。

(4)多峰:多峰形态明显,说明多极分化现象。双峰向单峰过渡,说明两极分化现象在减弱。

(5)扁而宽的核密度曲线(峰值降低、宽度加大):各省份差异程度变大。

(6)若核密度曲线图中, 波形向左移动 (呈右偏态分布) 、波峰垂直高度上升、水平宽度减小、波峰数量减小, 则表明其核密度趋于向数值减小的方向移动, 即该地区农业碳排放地区差距呈缩小态势, 存在动态收敛性特征。

4.地理探测器全文详细

来源:地理探测器(GeoDetector)原理及其实现 - 知乎 (zhihu.com)

4.1、地理探测器原理与功能

4.1.1 用途与目的

地理学第二定律的核心思想是地理现象的空间(分层)异质性,其普遍存在于各种地理现象中。

空间分层异质性(spatial stratified heterogeneity),层内方差小于层间方差的地理现象。即同一地理现象在同一子区域内表现出相似性,但在不同子区域间的分布呈现差异性,例如土地类型、气候分区等。此处,层(strat)是统计学上的概念,对应地理学可理解为子区域。

地理探测器是探测空间分异性以及揭示其背后驱动力的空间分析方法,被广泛用于进行驱动力分析和因子分析。其核心思想是基于这样的假设:如果某个自变量对某个因变量有重要影响,那么自变量和因变量的空间分布应该具有相似性。地理分异可以利用地理探测器进行统计分析,其有两大优势:一是地理探测器既可以探测数值型数据,也可以探测定性数据;二是可以探测两因子交互作用于因变量。地理探测器通过分别计算和比较各单因子q值及两因子叠加后的q值,可以判断两因子是否存在交互作用,以及交互用用的强弱、方向、线性还是非线性等。两因子叠加既包括相乘关系,也包括其他关系,只要有关系,就能检验出来。

ref : 王劲峰,徐成东.地理探测器:原理与展望[J].地理学报,2017,72(01):116-134.

4.1.2 功能原理

地理探测器用于分析空间分层异质性,主要包括4个探测器(因子探测器、交互作用探测器、风险区探测器、生态探测器),分析结果可分别回答以下问题:

(1)是否存在空间异质性?什么因素造成了这种分层异质性?

(2)变量Y是否存在显著的区际差别?

(3)因素X之间的相对重要性如何?

(4)因素X对于因素Y是独立起作用还是具有广义的交互作用?

  • 分异及因子探测

因子探测旨在探测Y的空间分异性以及探测某因子X多大程度上解释了属性Y的空间分异,用q值度量(Wang et al.,2010b),表达式为:

式中:h = 1, …, L为变量Y或因子X的分层,即分类或分区;Nh和N分别为层h和全区的单元数;σ2h和 σ2分别是层h和全区的Y值的方差。SSW和SST分别为层内方差之和(Within Sum of Squares)和全区总方差(Total Sum of Squares)。

q的值域为[0, 1],值越大说明Y的空间分异性越明显;如果分层是由自变量X生成的,则q值越大表示自变量X对属性Y的解释力越强,反之则越弱。极端情况下,q值为1表明因子X完全控制了Y的空间分布,q值为0则表明因子X与Y没有任何关系,q值表示X解释了100xq%的Y。

q值的一个简单变换满足非中心F分布:

式中:λ为非中心参数;Yh为层h的均值。

  • 交互作用探测

用于识别不同风险因子Xs之间的交互作用,即评估因子X1和X2共同作用时是否会增加或减弱对因变量Y的解释力,或这些因子对Y的影响是相互独立的。评估的方法是首先分别计算两种因子X1和X2对Y的q值:q(X1)和q(X2),并且计算它们交互(叠加变量X1和X2两个图层相切所形成的新的多边形分布)时的q值: q(X1∩X2),比较 q(X1)、 q(X2)与 q(X1∩X2)的大小。两个因子之间的关系可分为以下几类:

  • 风险区探测

用于判断两个子区域间的属性均值是否有显著的差别,用t统计量来检验:

式中: Yh表示子区域h内的属性均值,如发病率或流行率;nh为子区域h内样本数量,Var表示方差。统计量t近似地服从Student’s t分布,其中自由度的计算方法为:

零假设H0: Yh=1=Yh=2,如果在置信水平α下拒绝H0,则认为两个子区域间的属性均值存在着明显的差异。

  • 生态探测

用于比较两因子X1和X2对属性Y的空间分布的影响是否有显著的差异,以F统计量来衡量。

式中:NX1及NX2分别表示两个因子X1和X2的样本量;SSWX1和SSWX2分别表示由X1和X2形成的分层的层内方差之和;L1和L2分别表示变量X1和X2分层数目。其中零假设H0:SSWX1=SSWX2。如果在α的显著性水平上拒绝H0,这表明两因子X1和X2对属性Y的空间分布的影响存在着显著的差异。

4.1.3 功能入口

工具箱 >> 空间统计分析 >> 分析模式 >> 地理探测器。

4.1.4 主要参数

  • 源数据 :设置待分析的数据集,支持点、线、面及属性表四类数据集。
  • 因变量字段(Y):是被测定或被记录的变量,会随另一个(或另几个)变量的变动而发生变动,为数值量,如各村庄神经管畸形出生缺陷(NTDs)发生率。
  • 自变量字段(X):是引起因变量发生变化的因素或条件,是对因变量的解释变量,支持设置多个解释变量,如土壤类型、高程、水文流域等。注意这里的自变量应为类型量,如果为数值量,则需对其进行分组或分层,使组内方差最小,组间方差最大。分组可以基于专家知识,也可以使用k-means,或者排序后等分。应保证各组或层分类变量中至少有因变量的两个样本单元,从而可以计算该层的均值或方差。
  • 结果数据 :指定的保存分析结果的数据源。四种探测器分析结果将分别生成新的属性表数据集存放至该数据源中。

4.1.5 结果说明

所有探测器结果将生成新的属性表数据集存储至数据源中,同时在右侧地理探测器面板中输出分析结果,下面将对各探测器结果进行分析:

  • 因子探测器 :探测变量Y的空间分层异质性,以及探测某因子X多大程度上解释了变量Y的空间分异,用q值度量。如果分层是由自变量X生成的,则q值越大表示X和Y的空间分布越一致,自变量X对属性Y的解释力越强,反之则越弱。FactorDetector_result 属性表数据集为因子探测结果。
  • 交互探测器 :用于识别不同解释变量之间的交互作用,评估两因子共同作用时是否会增加或减弱对因变量的解释力,或这些因子对其影响是否相互独立的。InteractionDetector_result 属性表数据集为交互探测结果,解释变量对因变量交互作用的类型包括:
    • Weaken,nonlinear:非线性减弱;
    • Weaken,uni-:单因子非线性减弱;
    • Enhance, bi-:双因子增强;
    • Independent:独立;
    • Enhance,nonlinear:非线性增强。
  • 风险探测器 :用于判断不同区域的属性均值是否具有显著性。RiskDetector_result 属性表数据集为风险区探测结果。
  • 生态探测器 :用于比较不同影响因子对属性值的空间分布的影响是否有显著的差异。EcologicalDetector_result 属性表数据集为生态探测结果。

4.1.6 适用条件

  • 擅长自变量X为类型量 (如土地利用图),因变量Y为数值量(碳排放)的分析
  • 当因变量Y和自变量X均为数值量,对X离散化转换为类型量后,运用地理探测器建立的 Y 和X 之间的关系将比经典回归更加可靠,尤其当样本量<30 时。
  • 对变量无线性假设,属于方差分析 (ANOVA)范畴,物理含义明确的,其大小反映了X (分层或分类) 对Y解释的百分比100×q%。
  • 地理探测器探测两变量真正的交互作用,而不限于计量经济学预先指定的乘性交互。
  • 地理探测器原理保证了其对多自变量共线性免疫。
  • 在分层中,要求每层至少有2个样本单元。样本越多,估计方差越小。

4.1.7 应用领域

包括:土地利用、公共健康、区域经济、区域规划、旅游、考古、地质、气象、植物、生态、环境、污染、遥感和计算机网络等,地理探测器作为驱动力和因子分析的有力工具已经在以上案例中得到充分验证。

4.1.8 数据要求与预处理

输入数据包括因变量Y和自变量数据X。自变量应为类型量;如果自变量为数值量,则需要进行离散化处理。离散可以基于专家知识,也可以直接等分或使用分类算法如K-means等。若数据为GIS数据,需要先将其转化为下图所示的Excel数据。小编以现有数据2017年城市蔓延度为因变量,选取自变量指标如下表,并将这14个指标进行自然断点法划分为5类。

4.2实现方法

可参照方法提出者网站上的解释和分析:欢迎访问地理探测器网站 (geodetector.cn)

4.2.1 实现方法一:Geodetector 软件

下载:http://www.geodetector.cn/

该软件是基于Excel表格运行的,Geodetector软件就相当于是Excel表格文件中的一个宏。

需要注意,在进行地理探测器操作时,我们的自变量(上图中最后两列)必须是类别数据(比如土壤类型数据、土地利用类型数据),不能是连续数据(比如人口数据、GDP数据);如果大家的自变量中有连续数据的话,一定要先转换成类别数据,再进行地理探测器分析。转换的方式有很多,比如假设你的连续数据是栅格格式的,那就可以用ArcGIS中的重分类工具,对原有的连续数据栅格进行转换。

4.2.2 实现方法二:R语言之geodetector包

from: R语言实现地理探测器的流程及代码

谷粒故里:R语言实现地理探测器的流程及代码3 赞同 · 0 评论文章正在上传…重新上传取消

R语言geodetector包涵盖五个函数:factor_detector,interaction_detector,risk_detector,ecological_detector和geodetector。前四个功能实现因子检测器,交互检测器,风险检测器和生态检测器的计算,可以使用表数据计算,例如csv格式。最后一个函数geodetector是一个辅助函数,可用于实现shapefile格式映射数据的计算。

数据要求:需要保证输入的自变量数据已经全部为类别数据。

关于geodetector包官网有详细的介绍和教程,地址如下:https://cran.r-project.org/web/packages/geodetector/vignettes/geodetector.html#factor-detector

实现过程如下:

# (1)数据预处理

X 处理为离散型数据(对于栅格数据,可用栅格重分类;对于矢量数据(渔网),在mapGIS中建立gdb文件,将数据导入文件地理数据库,属性-符号化-将字段分级,或矢量数据分级显示之后,convert symbology to representation)

Y 处理为点数据(渔网)

# (2) 加载geodetector包及数据导入(操作时将”文件夹名称“替换成需处理的文件即可)

> install.packages("geodetector") *加载包*

> library(geodetector) *引用包*

> install.packages("readr")

> library(readr)

> read_csv(“文件夹名称.csv”) *读自己命名的数据 (注意,数据要放在当前工作的文件夹中)*

> 文件夹名称=read_csv("文件夹名称.csv") *数据赋值*

> 文件夹名称 *指定文件*

## 2.2.1 因子探测器

> factor_detector("Y", "X", as.data.frame(文件夹名称)) *其中as函数为转换为数据框*

## 2.2.2 交互探测器

> interaction_detector (17,c(2,3,4,5,6,7,8,9,10,11),as.data.frame(database))

*其中当”X"为多个因子的时候,可以用c(2,3,4,5,6,7,8,9,10,11) 表示,数字代表列号。*

## 2.2.3 风险探测

> risk_detector(17,c(2,3,4,5,6,7,8,9,10,11),as.data.frame(database))

## 2.2.4 生态探测

> ecological_detector(17,c(2,3,4,5,6,7,8,9,10,11),as.data.frame(database))

# (3) 导出结果

> result<-factor_detector(17,c(2,3,4,5,6,7,8,9,10,11),as.data.frame(database))

> write.csv(result,'./factor_detector_CMI.csv') *将结果写入csv文件*

geodetector包应用示例代码:

  1. geo_data = read_xlss("his1_1.xlsx")
  2. #11代表第11列的因变量;c(6,7,8,9,10)代表五个因变量;
  3. result_1<-factor_detector(11, c(6,7,8,9,10),as.data.frame(geo_data))
  4. result_2<-interaction_detector (11, c(6,7,8,9,10),as.data.frame(geo_data))
  5. result_3<-risk_detector(11, c(6,7,8,9,10),as.data.frame(geo_data))
  6. result_4<-ecological_detector(11, c(6,7,8,9,10),as.data.frame(geo_data))
  7. #分别保存
  8. write.csv(result_1,'./factor_detector_CMI.csv')

若出现以下缺少程辑包的类似错误,就通过install.packages("utf8"),安装这个包就可以;

Error in loadNamespace(name) : 不存在叫‘utf8’这个名字的程辑包

函数返回结果中,q表示决定程度,p表示显著性。

4.2.3 实现方法二:R语言之GD包

GD package,全称 Geographical Detectors for Assessing Spatial Factors。

下载:https://cran.r-project.org/web/packages/GD/index.html

> install.packages("GD") *加载包*

> library("GD") *引用包*

> install.packages("readr")

> library(readr)

Examples

  1. ## NDVI: ndvi_40
  2. # set optional parameters of optimal discretization
  3. # optional methods: equal, natural, quantile, geometric, sd and manual
  4. discmethod <- c("equal", "quantile")
  5. discitv <- c(4:5)
  6. ## "gdm" function
  7. ndvigdm <- gdm(NDVIchange ~ Climatezone + Mining + Tempchange, continuous_variable = c("Tempchange"), data = ndvi_40, discmethod = discmethod, discitv = discitv)
  8. ndvigdm
  9. plot(ndvigdm)
  10. # H1N1:h1n1_100
  11. # set optional parameters of optimal discretization
  12. discmethod <- c("equal","natural","quantile")
  13. discitv <- c(4:6)
  14. continuous_variable <- colnames(h1n1_100)[-c(1,11)]
  15. # "gdm" function
  16. h1n1gdm <- gdm(H1N1 ~ ., continuous_variable = continuous_variable, data = h1n1_100, discmethod = discmethod, discitv = discitv)
  17. h1n1gdm
  18. plot(h1n1gdm)
  19. # end

GD包与geodetector的不同是,GD包输入连续的数据(不需要分级),通过gdm函数的以下两个参数完成自动选择最适合的分级方法和分级类别数量;而geodetector包需要的自变量数据需要是分级之后的(如使用ArcGIS的reclassify工具实现栅格数据分级,再使用点数据提取分级数值),可以是Excel、CSV等格式(分别通过调用readxl,readr包中的read_xlsx,read_csv函数实现)。

2.4 实现方法三:Geodetector software in QGIS (please use google to access)

链接:https://github.com/gsnrguo/QGIS-Geographical-detector

4.3实例

下面利用地理探测器功能对某县神经管畸形出生缺陷(NTDs)发生率进行分析,环境因子变量包括:土壤类型、高程、水文流域。下图为环境因子分析的数据示意:

分析结果如下:

  • 因子探测器:结果展示了所有因子 q 值的计算结果,结果表明,水文流域变量(watershed)具有最高的 q 值,说明这些变量中河流是决定 NTDs 空间格局最主要的环境因子。

  • 生态探测器:结果采用显著性水平为0.05的 t 检验,“√” 表示存在显著性,“×” 表示不显著。就对NTDs空间分布的作用而言,土壤类型与其他变量存在着显著差异。

  • 交互探测器:以高程因子( elevation)为例,结果表明任何两种变量对 NTDs 空间分布的交互作用都要大于第一种变量的独自作用,两两解释变量对NTDs空间分布的交互作用为双因子增强。

  • 风险探测器:结果显示了对于单个风险因子而言的风险区探测的结果。以土壤类型( soiltype)为例,柱状图中 x 轴为 Unique Value,是环境因子各分层编号;y 轴为 Mean od explained variable,是在每种土壤类型区内的NTDs的平均发病率。

各类型显著性对比是,采用显著性水平为0.05的t检验,对比各类土壤类型(1-5)上的NTDs发病率是否显著大于另一土壤类型上的 NTDs 发病率,“√” 表示存在显著性,“×” 表示不显著。

5.聚类算法理论

转自:(28条消息) 聚类算法理论_ward聚类_是鱼儿啊~的博客-CSDN博客

5.1原理与用途

聚类是一种无监督学习算法,聚类的过程是一个见李假设的过程,使用聚类之后还需要总结每一类别的基本热证,从而更加清晰了解问题的实质

目的:分类,一个类别的个体具有尽可能高的同质性,类别之间具有尽可能高的异质性。

原理:假设研究对象均用自变量所构成的高维空间中的“点”来表示,一般规则中距离较小的同一类,距离较大的为另外一个类。

以上的是个体的分类方法,使用距离分类。也可以使用变量分类,对于变量的分类一般使用相似系数(如相关系数)作为距离的测量指标。

用途:

1、设计抽样方案:分层抽样  (比如调研城市经济发展,先聚类划分成几个类别);

2、预分析过程:先通过聚类分析达到简化数据的目的,将众多的个体先聚集成比较好处理的几个类别或者子集,然后再进行后续的多远分析;

3、细分市场、个体消费行为划分。

5.2常见的聚类方式

1、划分聚类:K-Means (中小规模,球形类别、计算速度较快)kmeans :k个族,且每个族中心采用族中所含值的均值计算而成;

2、层次聚类BIRCH:聚类结果丰富、不同层次结果间有嵌套关系 计算量相对较大;

3、基于密度DBSCAN:一个区域中点的密度大过某个阈值,就归于同一类别中,擅长各种特殊形状的类 计算量大;

4、基于网格STNG:将数据空间划分成有限单元,然后基于单元格进行聚类,处理速度快(效果比较差);

5、基于模型:SOM、高斯混合模型。

聚类中需要注意的问题

 1、变量选择:只引入不同类别间有显著性差别的变量(无关变量会削弱有效信息,导致严重的错分);

2、共线性问题:相当于某个变量在聚类中的权重大于其他变量,最好进行预处理;

3、变量的标准化:梳理统计算法上要求一律标准化,但标准化后会削弱有用变量的作用,当变量量纲/变异程度相差非常大时候需要进行;

4、距离测量方法:在没有明确准专业知识支持下,首先使用默认值;

5、异常值:影响较大,没有更好解决办法,如果不能避免异常值的影响,则在数据准备过程中加以处理;

6、最佳类别数:2~8数量比较合适。

5.3常见算法以及应用

k -均值聚类

k-均值聚类过程

        1、选择距离总和最远的案例作为初始类中心

        2、按就近原则将其余案例向选中的点计算距离,并按照距离最近进行归类

        3、计算出各个初始类的中心位置(均值)

        4、用计算出的中心位置重新计算聚类

        5、如此反复循环,直到凝聚点位置收敛位置(收敛的意思是所有的点到中心点的距离都最小)

该算法的特点

        1、需要知道初始类别、可人为指定初始位置

        2、速度较快

        3、只能使用连续变量进行聚类

        4、衍生:K-中位数聚类

算法参数介绍

  1. class sklearn.cluster.KMeans(
  2. n_clusters : int,#(default=8)
  3. init : {'k-means++', 'random','ndarray'},#(default='k-means++')
  4. n_init : int,#(default=10)
  5. max_iter : int, #(default=300)
  6. tol : float,#(default=1e-4)
  7. verbose : int, #(default=0)
  8. random_state : int, RandomState instance or None, #(default=None)
  9. copy_x : bool, #(default=True)
  10. algorithm : {"lloyd", "elkan", "auto", "full"}, #(default="lloyd")
  11. )
  12. #一些参数解释
  13. '''
  14. 1、n_clusters:聚类类别
  15. 2、init:初始类中心位置
  16. 'k-means++' : 采用优化后的算法确定类中心
  17. 'random' : 随机选取k个案例作为初始类中心
  18. ndarray : (n_clusters, n_features)格式提供的初始类中心位置
  19. 3、precompute_distances = 'auto' : {'auto', True, False}
  20. 是否预先计算距离,分析速度更快,但需要更多内存
  21. 'auto' : 如果n_samples*n_clusters > 12 million,则不事先计算距离
  22. 4、algorithm = 'auto' : 'auto', 'full' or 'elkan',具体使用的算法
  23. 'full' : 经典的EM风格算法
  24. 'elkan' : 使用三角不等式,速度更快,但不支持稀疏数据
  25. 'auto' : 基于数据类型自动选择
  26. '''
  27. #KMeans类属性
  28. '''
  29. cluster_centers_ : array, [n_clusters, n_features] 聚类整理之后的中心坐标
  30. labels_ : 类标签
  31. inertia_ : float,各样本和其最近的类中心距离的平方和
  32. '''

 聚类分析的应用案例

  1. from sklearn.cluster import KMeans
  2. import numpy as np
  3. X = np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])
  4. kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
  5. print(kmeans.labels_) #数据标签,从结果上看前3个组数据分为一类,后3组数据分为一类
  6. # 输出结果:array([1, 1, 1, 0, 0, 0], dtype=int32)
  7. print(kmeans.predict([[0, 0], [12, 3]])) #数据预测 数据[0, 0]和数据[12, 3] 标签分别为1,0
  8. #array([1, 0], dtype=int32)
  9. print(kmeans.cluster_centers_) #数据中心点位置,数据质心
  10. #array([[10., 2.],[1., 2.]])

层次聚类

(可用树形结构描述)

层次聚类的过程

1、先将所有n个变量/案例看成不同的n类

2、将性质最接近的两类合并成一类

3、从n-1类中找到最接近的两类加以合并

4、依次类推,直到所有的变量/案例被合并为一类

5、使用者根据具体的问题和聚类结果来决定应当分为几类

算法特点

1、一旦个体被划定类别,其分类结果就不会再进行更改

2、可以对变量或案例进行聚类,变量可以是连续变量或者分类变量,但是不同类型的变量不能同时使用

3、运行速度慢

4、测量距离的方法非常丰富,但是这不是使用该方法的重点

案例聚类使用AgglomerativeClustering

参数介绍

  1. class sklearn.cluster.AgglomerativeClustering(
  2. n_clusters : int or None, default=2
  3. affinity : str or callable, default='euclidean'('euclidean', 'l1', 'l2', 'manhattan', 'cosine', or 'precomputed')
  4. memory : str or object with the joblib.Memory interface, default=None
  5. connectivity : array-like or callable, default=None
  6. compute_full_tree : 'auto' or bool, default='auto'
  7. linkage : {'ward', 'complete', 'average', 'single'}, default='ward'
  8. pooling_func : callable, default=np.mean
  9. distance_threshold : float, default=None
  10. compute_distances : bool, default=False
  11. )
  12. #一些参数解释
  13. '''
  14. 1、n_clusters : 聚类的类别数
  15. 2、affinity : 使用的距离测量方法
  16. 3、linkage = 'ward' 类间距离的计算方法
  17. ward : 使各类的方差总和最小化
  18. average : 使用两个类间所有不同类案例的平均距离
  19. complete : 使用两个类间最远案例的距离
  20. '''
  21. # sklearn.cluster.AgglomerativeClustering类的属性:
  22. '''
  23. labels_ : array [n_samples],各案例的类标签
  24. n_leaves_ : int,聚类树的叶子数(案例数)
  25. n_components_ : int,聚类变量中潜在的成分数
  26. children_ : array-like, shape (n_nodes-1, 2),各非终末节点的子节点列表
  27. '''

层次聚类的应用小案例

  1. from sklearn.cluster import AgglomerativeClustering
  2. import numpy as np
  3. X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]])
  4. clustering = AgglomerativeClustering().fit(X)
  5. print(clustering)
  6. #AgglomerativeClustering()
  7. print(clustering.labels_) #结果标签
  8. #array([1, 1, 1, 0, 0, 0])
  9. print(pd.DataFrame(clustering.labels_)[0].value_counts()) #每个分类的数量
  10. #1 3
  11. #0 3

特征聚类

使用 FeatureAgglomeration

  1. import numpy as np
  2. from sklearn import datasets, cluster
  3. digits = datasets.load_digits()
  4. images = digits.images
  5. X = np.reshape(images, (len(images), -1))
  6. agglo = cluster.FeatureAgglomeration(n_clusters=32)
  7. print(agglo.fit(X))
  8. #FeatureAgglomeration(n_clusters=32)
  9. X_reduced = agglo.transform(X)
  10. print(X_reduced.shape)
  11. #(1797, 32)

#学习自用,若有侵权,联系则删

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/199286
推荐阅读
相关标签
  

闽ICP备14008679号