基于C#和遥感软件二次开发的宜居度综合方法
影响居住地宜居程度的几大指标的分析
- 植被指数(NDVI)
- 水体指数(NDWI)->水体辐射指数(理想状况)
- 道路指数——>道路辐射指数(理想状况)
- 空气质量指数(AQI)
- 热岛效应(UHI)->累计直方图
- 宜居气压的计算(考虑Topsis分析的数据处理)
- 人类活动指数
分析:将这些指标重分类之后打好分(即正向化处理),再加入下面的综合方法中。
非监督评价(自己取的名儿)
原理:指标的变异程度越小,所反映的信息量也越少,其对应的权值也应该越低。
算法步骤:
假设有n个评价对象,那我们的n就是南京市栅格数据所有的像元个数,m个评价指标,那我们的m就是7,那么得到以下矩阵。
X
=
[
x
11
x
12
⋯
x
1
m
x
21
x
22
⋯
x
2
m
⋮
⋮
⋱
⋮
x
n
1
x
n
2
⋯
x
n
m
]
X=\left[\begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1 m} \\ x_{21} & x_{22} & \cdots & x_{2 m} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n 1} & x_{n 2} & \cdots & x_{n m} \end{array}\right]
X=⎣⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm⎦⎥⎥⎥⎤
对
X
X
X中的元素对 列 采取正向标准化的方法得到标准化后的矩阵
Z
~
\tilde{Z}
Z~,目的是使计算信息熵的元素全部为正。
z
~
i
j
=
x
i
j
−
min
{
x
1
j
,
x
2
j
,
⋯
,
x
n
j
}
max
{
x
1
j
,
x
2
j
,
⋯
,
x
n
j
}
−
min
{
x
1
j
,
x
2
j
,
⋯
,
x
n
j
}
\tilde{z}_{i j}=\frac{x_{i j}-\min \left\{x_{1 j}, x_{2 j}, \cdots, x_{n j}\right\}}{\max \left\{x_{1 j}, x_{2 j}, \cdots, x_{n j}\right\}-\min \left\{x_{1 j}, x_{2 j}, \cdots, x_{n j}\right\}}
z~ij=max{x1j,x2j,⋯,xnj}−min{x1j,x2j,⋯,xnj}xij−min{x1j,x2j,⋯,xnj}
对于矩阵
Z
~
\tilde{Z}
Z~:
Z
~
=
[
z
~
11
z
~
12
⋯
z
~
1
m
z
~
21
z
~
22
⋯
z
~
2
m
⋮
⋮
⋱
⋮
z
~
n
1
z
~
n
2
⋯
z
~
n
m
]
\tilde{Z}=\left[\begin{array}{cccc} \tilde{z}_{11} & \tilde{z}_{12} & \cdots & \tilde{z}_{1 m} \\ \tilde{z}_{21} & \tilde{z}_{22} & \cdots & \tilde{z}_{2 m} \\ \vdots & \vdots & \ddots & \vdots \\ \tilde{z}_{n 1} & \tilde{z}_{n 2} & \cdots & \tilde{z}_{n m} \end{array}\right]
Z~=⎣⎢⎢⎢⎡z~11z~21⋮z~n1z~12z~22⋮z~n2⋯⋯⋱⋯z~1mz~2m⋮z~nm⎦⎥⎥⎥⎤
计算每个指标(列)下的每个样本所占的比重,得到每个元素的
P
P
P矩阵:
p
i
j
=
z
~
i
j
∑
i
=
1
n
z
~
i
j
p_{i j}=\frac{\tilde{z}_{i j}}{\sum_{i=1}^{n} \tilde{z}_{i j}}
pij=∑i=1nz~ijz~ij
则每个指标的权重即为:
e
j
=
−
1
ln
n
∑
i
=
1
n
p
i
j
ln
(
p
i
j
)
(
j
=
1
,
2
,
⋯
,
m
)
e_{j}=-\frac{1}{\ln n} \sum_{i=1}^{n} p_{i j} \ln \left(p_{i j}\right)(j=1,2, \cdots, m)
ej=−lnn1i=1∑npijln(pij)(j=1,2,⋯,m)
最后将各个像元的七个指标加权即可得到每个像元的宜居度值。
P
v
i
=
∑
j
=
1
m
e
j
×
x
i
j
i
=
1
,
2...
n
\begin{array}{c} Pv_{i} = \sum_{j = 1}^{m}e_{j}\times x_{ij} \qquad i = 1,2...n \end{array}
Pvi=∑j=1mej×xiji=1,2...n
最后将权重转化为表达式,传入波段运算算法得到表达式。
优点:简单容易实现
缺点:定权方式由数据自身特点决定,客观性强,但是效果也许达不到期望。
原理:与熵权法差不多,最后出的图是每个像元主成分得分,把7大指标进行主成分分析降维,得到的前几主成分累计贡献率在80%以上的作为有用的主成分,每个像元主成分得分作为结果出图。
在主成分分析中最经典的例子就是各地区高等教育发展状况平的对比,那么在那个案例中,对比的样本是地区,我们这个对比的样本就是每个像元。指标有,所以这种方法的权重也不需要人为干涉。有数据就有权重,但是最后剩下的主成分权重需要自己定。
算法步骤:
假设有n个样本,p个指标,这里的n就是像素数,p为7个指标,则可构成大小为
n
×
p
n\times p
n×p的样本举证
x
x
x:
x
=
[
x
11
x
12
⋯
x
1
p
x
21
x
22
⋯
x
2
p
⋮
⋮
⋱
⋮
x
n
1
x
n
2
⋯
x
n
p
]
=
(
x
1
,
x
2
,
⋯
,
x
p
)
x=\left[\begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1 p} \\ x_{21} & x_{22} & \cdots & x_{2 p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n 1} & x_{n 2} & \cdots & x_{n p} \end{array}\right]=\left(x_{1}, x_{2}, \cdots, x_{p}\right)
x=⎣⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1px2p⋮xnp⎦⎥⎥⎥⎤=(x1,x2,⋯,xp)
-
首先进行标准化处理:
按照均值和标准差进行标准化:
x j ‾ = 1 n ∑ i = 1 n x i j \overline{x_{j}}=\frac{1}{n} \sum_{i=1}^{n} x_{i j} xj=n1i=1∑nxij
S j = ∑ i = 1 n ( x i j − x j ‾ ) 2 n − 1 S_{j}=\sqrt{\frac{\sum_{i=1}^{n}\left(x_{i j}-\overline{x_{j}}\right){2}}{n-1}} Sj=n−1∑i=1n(xij−xj)2
X i j = x i j − x j ‾ S j X_{i j}=\frac{x_{i j}-\overline{x_{j}}}{S_{j}} Xij=Sjxij−xj原始样本矩阵经过标准化为:
X = [ X 11 X 12 ⋯ X 1 p X 21 X 22 ⋯ X 2 p ⋮ ⋮ ⋱ ⋮ X n 1 X n 2 ⋯ X n p ] X=\left[\begin{array}{cccc} X_{11} & X_{12} & \cdots & X_{1 p} \\ X_{21} & X_{22} & \cdots & X_{2 p} \\ \vdots & \vdots & \ddots & \vdots \\ X_{n 1} & X_{n 2} & \cdots & X_{n p} \end{array}\right] X=⎣⎢⎢⎢⎡X11X21⋮Xn1X12X22⋮Xn2⋯⋯⋱⋯X1pX2p⋮Xnp⎦⎥⎥⎥⎤ -
对标准化之后的矩阵计算协方差矩阵:
R = [ r 11 r 12 ⋯ r 1 p r 21 r 22 ⋯ r 2 p ⋮ ⋮ ⋱ ⋮ r p 1 r p 2 ⋯ r p p ] R=\left[\begin{array}{cccc} r_{11} & r_{12} & \cdots & r_{1 p} \\ r_{21} & r_{22} & \cdots & r_{2 p} \\ \vdots & \vdots & \ddots & \vdots \\ r_{p 1} & r_{p 2} & \cdots & r_{p p} \end{array}\right] R=⎣⎢⎢⎢⎡r11r21⋮rp1r12r22⋮rp2⋯⋯⋱⋯r1pr2p⋮rpp⎦⎥⎥⎥⎤
其中 r i j = 1 n − 1 ∑ k = 1 n ( X k i − X ˉ i ) ( X k j − X ˉ j ) = 1 n − 1 ∑ k = 1 n X k i X k j r_{ij}=\frac{1}{n-1} \sum_{k=1}^{n}\left(X_{k i}-\bar{X}_{i}\right)\left(X_{k j}-\bar{X}_{j}\right)=\frac{1}{n-1} \sum_{k=1}^{n} X_{k i} X_{k j} rij=n−11k=1∑n(Xki−Xˉi)(Xkj−Xˉj)=n−11k=1∑nXkiXkj -
计算 R R R的特征值和特征向量
特征值: λ 1 ≥ λ 2 ≥ ⋯ ≥ λ p ≥ 0 \lambda_{1} \geq \lambda_{2} \geq \cdots \geq \lambda_{p} \geq 0 \quad λ1≥λ2≥⋯≥λp≥0
特征向量: a 1 = [ a 11 a 21 ⋮ a p 1 ] , a 2 = [ a 12 a 22 ⋮ a p 2 ] , ⋯ , a p = [ a 1 p a 2 p ⋮ a p p ] a_{1}=\left[\begin{array}{c} a_{11} \\ a_{21} \\ \vdots \\ a_{p 1} \end{array}\right], a_{2}=\left[\begin{array}{c} a_{12} \\ a_{22} \\ \vdots \\ a_{p 2} \end{array}\right], \cdots, a_{p}=\left[\begin{array}{c} a_{1 p} \\ a_{2 p} \\ \vdots \\ a_{p p} \end{array}\right] a1=⎣⎢⎢⎢⎡a11a21⋮ap1⎦⎥⎥⎥⎤,a2=⎣⎢⎢⎢⎡a12a22⋮ap2⎦⎥⎥⎥⎤,⋯,ap=⎣⎢⎢⎢⎡a1pa2p⋮app⎦⎥⎥⎥⎤ -
计算主成分贡献率
贡 献 率 = λ i ∑ k = 1 p λ k ( i = 1 , 2 , ⋯ , p ) 累 计 贡 献 率 = ∑ k = 1 i λ k ∑ k = 1 p λ k ( i = 1 , 2 , ⋯ , p ) 贡献率=\frac{\lambda_{i}}{\sum_{k=1}^{p} \lambda_{k}}(i=1,2, \cdots, p) \\ 累计贡献率=\frac{\sum_{k=1}^{i} \lambda_{k}}{\sum_{k=1}^{p} \lambda_{k}}(i=1,2, \cdots, p) 贡献率=∑k=1pλkλi(i=1,2,⋯,p)累计贡献率=∑k=1pλk∑k=1iλk(i=1,2,⋯,p) -
取前 m m m个主成分使其贡献率达到70%-80%,然后只考虑前 m m m个主分量,则第i个主成分为:
F i = a 1 i X 1 + a 2 i X 2 + ⋯ + a p i X p ( i = 1 , 2 , ⋯ , m ) F_{i}=a_{1 i} X_{1}+a_{2 i} X_{2}+\cdots+a_{p i} X_{p} \quad(i=1,2, \cdots, m) Fi=a1iX1+a2iX2+⋯+apiXp(i=1,2,⋯,m)
整个算法的实现步骤调用PIE的主成分正变换算法,他可以调节保留主成分的个数。
这是整合之后的界面,先点分析再附权重,可以再做个框,赋权弹框就行。可能不太有创意,希望大家给出指导意见。
参考文献:
本来是想像熵权法一样把数据导到Matlab里算的,但是PIE提供了主成分变换的算法,不过是针对一张多波段图像的,于是就有了先波段合成再主成分分析
监督评价
个人觉得这个可以拓展的东西比较多,也比较难实现
层次分析法,首先我们要明确层次分析法的三大层,目标层、准则层、方案层
目标层:各地区的宜居度打分
准则层:准则层则是七大评价指标
方案层:居住在哪个像元比较好
我们这种已经有数据的情况不需要知道方案层就行了,这就是为什么不同于层次分析法,层次分析法连数据都没有。
背景:在确定各层次各因素之间的权重时,如果只是定性的结果,则常常不容易被别人接受,因而Santy等人提出构造成对比较矩阵:即不把所有因素放在一起比较,而是两两相互比较; 对此时采用相对尺度,以尽可能减少性质不同的诸因素相互比较的困难,提高准确度。
计算步骤:
先聊聊计算步骤,然后再一起想怎么实现。
- 确定比较矩阵(俗称打分)
首先需要给出比较矩阵,假设有七个指标,用户/专家对这七个指标进行两两比较。那么根据Santy提出的赋值标准,对于这个 7 × 7 7\times7 7×7的矩阵,每个地方该赋的值参照如下标准。
标度 | 含义 |
---|---|
1 | 同样重要 |
3 | 稍微重要 |
5 | 明显重要 |
7 | 强烈重要 |
9 | 极端重要 |
2,4,6,8 | 上述两端相邻判断中值 |
倒数 | A和B相比如果标度为3,那么B和A相比就是1/3 |
所以很明确,比较矩阵是个正互反阵,即对角线两边对称的元素
a
i
j
>
0
a
i
j
=
1
a
j
i
(
或
a
i
j
⋅
a
j
i
=
1
)
a_{i j}>0 \quad a_{i j}=\frac{1}{a_{j i}}\left(\text { 或 } a_{i j} \cdot a_{j i}=1\right)
aij>0aij=aji1( 或 aij⋅aji=1)
那么问题就是这七个指标的重要性是写在程序里,还是给用户自己定,因为可能用户每个人都不一样,我在想,如果给用户自己赋值,那么七个指标,每个比一遍有 C 7 2 C_{7}^{2} C72个数也就是21个数要填。实际上我们做出来了。🌚
- 一致性问题
有一个问题,可以先看一下这个矩阵:
A = [ 1 1 / 2 4 3 3 2 1 7 5 5 1 / 4 1 / 7 1 1 / 2 1 / 3 1 / 3 1 / 5 2 1 1 1 / 3 1 / 5 3 1 1 ] A=\left[\begin{array}{ccccc} 1 & 1 / 2 & 4 & 3 & 3 \\ 2 & 1 & 7 & 5 & 5 \\ 1 / 4 & 1 / 7 & 1 & 1 / 2 & 1 / 3 \\ 1 / 3 & 1 / 5 & 2 & 1 & 1 \\ 1 / 3 & 1 / 5 & 3 & 1 & 1 \end{array} \right] A=⎣⎢⎢⎢⎢⎡121/41/31/31/211/71/51/547123351/211351/311⎦⎥⎥⎥⎥⎤
注意到 a 12 = 1 / 2 a_{12}=1/2 a12=1/2(第1指标比第2指标) a 13 = 4 a_{13}=4 a13=4(也就是第1指标与第3指标),理应上来说,比较具有传递性,那么 a 23 a_{23} a23应该等于8,而实际上 a 23 = 7 a_{23}=7 a23=7,那就自相矛盾,这个矩阵的一致性(极条件),用平差里的极条件解释这样说好理解一些,在比较矩阵中要满足:
a i j = a i a j = a i k ⋅ a k j = a i k a j k i, j = 1 , 2 , ⋯ n a_{i j}=\frac{a_{i}}{a_{j}}=a_{i k} \cdot a_{k j}=\frac{a_{i k}}{a_{j k}} \quad \text { i, } j=1,2, \cdots \mathrm{n} aij=ajai=aik⋅akj=ajkaik i, j=1,2,⋯n
由于指标过多,打分者不可能控制这个矩阵完全一致,所以要把这个不一致性控制在一个范围内。
引理:n阶正互反矩阵A为-致矩阵时当且仅当最大特征值 λ max = n \lambda_{\max} = n λmax=n.
且当正互反矩阵A非一一致时,一定满足 λ max > n \lambda_{\max}> n λmax>n
定义指标
C
I
=
λ
max
−
n
n
−
1
CI=\frac{\lambda_{\max }-n}{n-1}
CI=n−1λmax−n
对应不同个数指标的
R
I
RI
RI是随指标个数变化的一个量
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
RI | 0 | 0 | 0.52 | 0.89 | 1.12 | 1.26 | 1.36 | 1.41 | 1.46 | 1.49 | 1.52 | 1.54 | 1.56 | 1.58 | 1.59 |
定义一致性比例
C
R
CR
CR
C
R
=
C
I
R
I
CR=\frac{CI}{RI}
CR=RICI
如果
C
R
<
0.1
CR<0.1
CR<0.1, 则可认为判断矩阵的一致性可以接受;否则需要对
判断矩阵进行修正。这个一致性是把专家打分的矩阵传到matlab里检测一致性,如果一致性不通过,那么matlab函数会返回一个零,如果C#那边检测权重是零,那么就会提示一致性未通过。
-
计算权重
倘若一致性符合要求,则计算权重
计算权重有三种方法 几何平均值 、算术平均值、特征值法。
那么我们系统此处的算法采用的算数平均值求特征根。 -
计算结果
根据PIE的波段运算,将返回的权重编程表达式,调用其算法得到最终结果图。
界面设计:
-
Topsis分析(逼近于理想值的排序方法)
背景:TOPSIS的全称是“逼近于理想值的排序方法”(Technique for Order Preference bv Similarity to Ideal Solution),是Hwang和Yoon于1981年提出的一种适用于根据多项指标、对多个方案进行比较选择的分析方法。它对原始数据进行同趋势和归一化的处理后,消除了不同指标量纲的影响,并能充分利用原始数据的信息,所以能充分反映各方案之间的差距、客观真实的反映实际情况,具有真实、直观、可靠的优点,而且其对样本资料无特殊要求,故应用日趋广泛。Topsis分析法个人觉得是比以上方法都严谨的定权评价方法
计算步骤:
- 首先在以下六种数据预处理方法中选1到2种进行预处理,最好能将 成本型数据,效益型数据,非成本非效益型数据 区分开来。
(1)线性变换
(2)标准0-1变换
(3)最优值为给定区间时的变换
(4)向量规范化
(5)原始数据的统计处理
(6)数量化
(具体计算方法看飞书Word文档)
- 然后按照Topsis方法计算
- 人为定权,即定下7个指标的各占权重,权重之和肯定为一
- 步骤3 确定理想解理想解
x
∗
x^{*}
x∗和负理想解
x
0
x^{0}
x0 ,计算各方案理想解到负理想解的距离。距离计算以欧式距离计算方式。
计算各方案的到理想解的距离
d i ∗ = ∑ j = 1 n ( x i j − x j ∗ ) 2 , i = 1 , … , m d_{i}^{*}=\sqrt{\sum_{j=1}^{n}\left(x_{i j}-x_{j}^{*}\right)^{2}}, i=1, \ldots, m di∗=j=1∑n(xij−xj∗)2,i=1,…,m
计算各方案的到负理想解的距离
d i 0 = ∑ j = 1 n ( x i j − x j 0 ) 2 , i = 1 , … , m d_{i}^{0}=\sqrt{\sum_{j=1}^{n}\left(x_{i j}-x_{j}^{0}\right)^{2}}, i=1, \ldots, m di0=j=1∑n(xij−xj0)2,i=1,…,m
计算每个方案的排队指标
C i ∗ = d i 0 / ( d i 0 + d i ∗ ) , i = 1 , 2 , … , m C_{i}^{*}=d_{i}^{0} /\left(d_{i}^{0}+d_{i}^{*}\right), i=1,2, \ldots, m Ci∗=di0/(di0+di∗),i=1,2,…,m
这样就得出了每个像素点的排队指标,可以用排队指标画图,也可以把像素点弄大点,然后排名,给出最优居住地区等。实际上我们是把这个排队指标,映射到了0到100的区间内出了一幅图像
界面设计:
这里我们对于理想点的确定方法采用了用户自定或默认为100
原理:(就是一个简单的波段运算的调用)
结果展示建议
除了出一张图之外,也可以南京市,鼓楼区、玄武区、建邺区、秦淮区、栖霞区、雨花台区、浦口区、六合区、江宁区、溧水区、高淳区的总体宜居度排名这需要分区计算指标,指标可以是平均值、中位数等。
编完系统后的总结
其实我们的代码还可以优化,我最后发现裁剪精度不佳。然后能动性也不是很好,然后可以把那部分裁剪的代码,改为用PIE几何绘图TOOL,画一个矩形。然后读取这个矩形的地理坐标,这样觉得比我那个直接获取相对于MapControl右上角的点的坐标值会好,因为我的垂直有点误差。其实我们的道路指数和水体指数换成对应辐射指数也更好一些,最后只要做一个转辐射指数的按钮就行,只是我们暂时没人研究这方面的东西。
读完给你发颁个奖(17银河)