【综合评价方法】常见综合评价方法及其实现
【综合评价方法】常见综合评价方法及其实现
文章目录
1.数据预处理
1.1 区分指标的属性
- 正向指标
- 负向指标
- 中间型指标
- 区间型指标
1.2 指标正向化
1.2.1 负向指标
负向指标的正向化方法,又称为指标反转方法,是指将原本反映负面情况的指标转换为反映正面情况的指标,以便于比较及分析。该方法广泛应用于评估指标、市场研究、数据分析等领域。
具体来说,负向指标的正向化方法可以分为以下几个步骤:
-
确定要进行正向化的指标
-
确定负向指标需要进行什么样的正向化,常见的方法包括倒数、对数、绝对值等
-
进行指标正向化的计算公式,根据不同的正向化方法而定
-
对正向化后的指标进行归一化处理,使其可比较性更强
下面介绍一种负向指标的正向化方法。
对于一组负向指标数据:
y
1
,
y
2
,
.
.
.
,
y
n
y_{1},y_{2},...,y_{n}
y1,y2,...,yn
取出最大值:
y
m
a
x
=
max
{
y
1
,
y
2
,
.
.
.
,
y
n
}
y_{max}=\max\left \{ y_{1},y_{2},...,y_{n} \right \}
ymax=max{y1,y2,...,yn}
然后利用这个值逐个更新
y
i
y_{i}
yi :
y
i
:
=
y
m
a
x
−
y
i
y_{i}:=y_{max}-y_{i}
yi:=ymax−yi
1.2.2 中间指标
中间型指标是指指标的值不要太小也不要太大,取某个特定值最好,如水体的ph值最好为7。下面介绍一种中间型指标的正向化方法:
对于一组中间型指标数据:
y
1
,
y
2
,
.
.
.
,
y
n
y_{1},y_{2},...,y_{n}
y1,y2,...,yn
先拟定一个最优值:
y
b
e
s
t
y_{best}
ybest
然后计算这组数据中每个数据到这个最优值的距离,取出最大的那个:
M = max { ∣ y 1 − y b e s t ∣ , ∣ y 2 − y b e s t ∣ , . . . , ∣ y n − y b e s t ∣ } M=\max\left \{ \left | y_{1} -y_{best}\right |, \left | y_{2} -y_{best}\right | , ... , \left | y_{n} -y_{best}\right | \right \} M=max{∣y1−ybest∣,∣y2−ybest∣,...,∣yn−ybest∣}
然后利用这个值逐个更新
y
i
y_{i}
yi:
y
i
:
=
1
−
∣
y
i
−
y
b
e
s
t
∣
M
y_{i}:=1-\frac{ \left | y_{i} -y_{best}\right | }{ M }
yi:=1−M∣yi−ybest∣
1.2.3 区间指标
区间型指标是指,指标值落在某个区间最好,例如,人的体温在 3 6 ∘ C 36^{\circ}C 36∘C到 3 7 ∘ C 37^{\circ}C 37∘C最好。下面介绍一种区间型指标的正向化方法:
对于一组区间型指标数据:
y
1
,
y
2
,
.
.
.
,
y
n
y_{1},y_{2},...,y_{n}
y1,y2,...,yn
先拟定一个最优区间:
(
a
,
b
)
\left( a,b \right)
(a,b)
取出这组数据的最大值和最小值:
y
m
a
x
=
max
{
y
1
,
y
2
,
.
.
.
,
y
n
}
,
y
m
i
n
=
min
{
y
1
,
y
2
,
.
.
.
,
y
n
}
y_{max}=\max\left \{ y_{1},y_{2},...,y_{n} \right \} , y_{min}=\min\left \{ y_{1},y_{2},...,y_{n} \right \}
ymax=max{y1,y2,...,yn},ymin=min{y1,y2,...,yn}
然后计算一个值
M
M
M:
M
=
max
{
a
−
y
m
i
n
,
y
m
a
x
−
b
}
M=\max\left \{ a-y_{min},y_{max}-b \right \}
M=max{a−ymin,ymax−b}
然后用如下公式逐个更新
y
i
y_{i}
yi:
y
i
:
=
{
1
−
a
−
y
i
a
−
y
m
i
n
,
y
m
i
n
≤
y
i
<
a
1
,
a
≤
y
i
≤
b
1
−
y
i
−
b
y
m
a
x
−
b
,
b
<
y
i
≤
y
m
a
x
y_{i}:= \left\{\begin{matrix} 1-\frac{a-y_{i}}{a-y_{min}},y_{min} \le y_{i} < a \\ 1,a \le y_{i} \le b \\ 1-\frac{y_{i}-b}{y_{max}-b},b < y_{i} \le y_{max} \end{matrix}\right.
yi:=⎩
⎨
⎧1−a−ymina−yi,ymin≤yi<a1,a≤yi≤b1−ymax−byi−b,b<yi≤ymax
用如下这个梯形图表示更为直观:
1.3 标准化
1.3.1 Z-score 标准化
对于样本 X X X 中的每个特征:
X n o r m a l i z e d = ( X − μ ) σ X_{normalized} = \frac{(X - \mu)}{\sigma} Xnormalized=σ(X−μ)
其中, μ \mu μ 是该特征的平均值, σ \sigma σ 是该特征的标准差。
1.3.2 Min-max 标准化
对于样本 X X X 中的每个特征:
X n o r m a l i z e d = ( X − X m i n ) ( X m a x − X m i n ) X_{normalized} = \frac{(X - X_{min})}{(X_{max} - X_{min})} Xnormalized=(Xmax−Xmin)(X−Xmin)
其中, X m i n X_{min} Xmin 是该特征的最小值, X m a x X_{max} Xmax 是该特征的最大值。
1.3.3 Robust 标准化
对于样本 X X X 中的每个特征:
X n o r m a l i z e d = ( X − m e d i a n ) I Q R / 2 X_{normalized} = \frac{(X - median)}{IQR/2} Xnormalized=IQR/2(X−median)
其中,median 是该特征的中位数,IQR 是四分位数范围(即上四分位数和下四分位数之差)。
1.3.4 归一化
对于样本 X X X 中的每个特征:
X n o r m a l i z e d = X ∑ i = 1 n x i 2 X_{normalized} = \frac{X}{\sqrt{\sum_{i=1}^{n}x_i^2}} Xnormalized=∑i=1nxi2X
其中, n n n 是该样本的特征数量。
2.模糊评价法(主观)(not recommended)
- 适用于未给出指标的评价问题
3.层次分析法(主观)(not recommended)
- 适用于未给出指标的评价问题
4.PCA主成分分析法(客观)
主成分分析法是一种常用的无监督降维技术,它将原始数据投影到一个新的低维度空间中,以便保留数据的最大方差。通过选择适当数量的主成分,我们可以捕捉到数据中最重要的信息,并且减少原始数据的维度。
4.1 步骤
-
数据正向化、标准化:假设我们有 p p p维度的样本数据 X = ( x 1 , x 2 , . . . , x n ) \boldsymbol{X}=(\boldsymbol{x}_1, \boldsymbol{x}_2, ..., \boldsymbol{x}_n) X=(x1,x2,...,xn),每一维度的数据均值为0,标准差为1。这一步的目的是为了除去维度间的量纲影响。
x j ′ = x j − x ˉ σ j ( j = 1 , 2 , . . . , p ) \boldsymbol{x}_j' = \frac{\boldsymbol{x}_j-\bar{\boldsymbol{x}}}{\sigma_j} (j=1,2,...,p) xj′=σjxj−xˉ(j=1,2,...,p)
其中, x ˉ \bar{\boldsymbol{x}} xˉ是所有样本数据的均值, σ j \sigma_j σj是第 j j j维度的标准差。 -
计算协方差矩阵:计算标准化后数据的协方差矩阵。协方差矩阵描述了不同特征之间的相关性。
公式:
Σ = 1 n − 1 ( X − X ˉ ) T ( X − X ˉ ) \Sigma = \frac{1}{n-1}(X-\bar{X})^T(X-\bar{X}) Σ=n−11(X−Xˉ)T(X−Xˉ)
其中, Σ \Sigma Σ 是协方差矩阵, X X X 是标准化后的数据矩阵, X ˉ \bar{X} Xˉ 是每个特征的均值, n n n 是样本数量。 -
计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征向量表示了数据在新的特征空间中的方向。
-
选择主成分:按照特征值的大小对特征向量进行排序,选择前k个特征向量作为主成分。这些主成分对应的特征值较大,包含了较多的原始数据信息。
-
计算投影:将原始数据投影到选定的主成分上,得到降维后的数据。
公式: Y = X std W Y = X_{\text{std}}W Y=XstdW
其中, Y Y Y 是降维后的数据矩阵, X std X_{\text{std}} Xstd 是标准化后的数据矩阵, W W W 是前k个特征向量组成的投影矩阵。 -
可选:重构数据:根据降维后的数据和投影矩阵,可以通过逆变换将数据重新映射到原始空间中。
公式: X reconstructed = Y W T X_{\text{reconstructed}} = YW^T Xreconstructed=YWT
其中, X reconstructed X_{\text{reconstructed}} Xreconstructed 是重构后的数据矩阵。
4.2 实现
>>> import numpy as np
>>> from sklearn.decomposition import PCA
# 输入待降维数据 (5 * 6) 矩阵,6个维度,5个样本值
>>> A = np.array([[84,65,61,72,79,81],[64,77,77,76,55,70],[65,67,63,49,57,67],[74,80,69,75,63,74],[84,74,70,80,74,82]])
>>> print(A)
[[84 65 61 72 79 81]
[64 77 77 76 55 70]
[65 67 63 49 57 67]
[74 80 69 75 63 74]
[84 74 70 80 74 82]]
# 直接使用PCA进行降维
>>> pca = PCA(n_components=2) #降到 2 维
>>> pca.fit(A)
PCA(n_components=2)
>>> pca.transform(A) # 降维后的结果
array([[-16.14860528, -12.48396235],
[ 10.61676743, 15.67317428],
[ 23.40212697, -13.607117 ],
[ -0.43966353, 7.77054621],
[-17.43062559, 2.64735885]])
>>> pca.explained_variance_ratio_ # 降维后的各主成分的方差值占总方差值的比例,即方差贡献率
array([0.63506778, 0.339022 ])
>>> pca.explained_variance_ # 降维后的各主成分的方差值
array([306.29319053, 163.51030959])
5.Topsis方法(客观)
Topsis综合评价方法是一种多维决策分析方法,适用于多种复杂的评估和决策场景中。为了更清楚地解释,我将对每个步骤进行更详细的说明。
首先,评估方案需要同时考虑多个评价指标,这些指标可能相互矛盾或者有不同的权重,需要通过一定的数学模型将其标准化处理,并根据相对重要性进行加权计算。Topsis方法正是基于这个框架,采用了以下的计算方法来求出每个方案在各个指标上的综合得分。
5.1 正向化
详见1.2
5.2 标准化
一般使用1.3.4的归一方法。
假设有n个方案(或实体),每个方案有m个不同的评价指标,在不同的评价指标间进行综合评估。对于每一个方案i的j指标可以通过以下的计算得到其标准化后的数值v(i,j):
v i j = x i j ∑ i = 1 n x i j 2 v_{ij} = \frac{x_{ij}}{\sqrt{\sum_{i=1}^n{x^2_{ij}}}} vij=∑i=1nxij2xij
其中 x i j x_{ij} xij 表示第i个方案的第j项指标原始数据。标准化处理将不同维度的数据范围统一到0-1之间,并且会消除数据量级之间的影响。
5.3 计算正负理想解
- 如果没有进行正向化:
对于利益类指标,如价格、收益等,需要最大化;而对于成本类指标,如成本、负债等,需要最小化。可以分别计算出每一个指标在给定n个方案中的最大值和最小值。设 第j项指标的正理想解为 v j + v^{+}_{j} vj+, 负理想解为 v j − v^{-}_{j} vj−。具体的计算方式如下所示:
对于利益类指标:
v j + = max { v i j ∣ i = 1 , 2 , ⋯ , n } v^{+}_{j} = \max{\{v_{ij}| i = 1, 2, \cdots, n\}} vj+=max{vij∣i=1,2,⋯,n}
v j − = min { v i j ∣ i = 1 , 2 , ⋯ , n } v^{-}_{j} = \min{\{v_{ij}| i = 1, 2, \cdots, n\}} vj−=min{vij∣i=1,2,⋯,n}
对于成本类指标:
v j + = min { v i j ∣ i = 1 , 2 , ⋯ , n } v^{+}_{j} = \min{\{v_{ij}| i = 1, 2, \cdots, n\}} vj+=min{vij∣i=1,2,⋯,n}
v j − = max { v i j ∣ i = 1 , 2 , ⋯ , n } v^{-}_{j} = \max{\{v_{ij}| i = 1, 2, \cdots, n\}} vj−=max{vij∣i=1,2,⋯,n}
- 如果进行了正向化:
取每个列向量的最大值即可。
5.4 计算每个方案与正负理想解的距离
在标准化之后,可以对每一个方案与正负理想解之间的距离进行计算。设第i个方案到正理想解的距离为 S i + S_{i}^{+} Si+, 到负理想解的距离为 S i − S_{i}^{-} Si−。
S i + = ∑ j = 1 m ( v i j − v j + ) 2 S^{+}_{i} = \sqrt{\sum_{j=1}^m{(v_{ij}-v^{+}_{j})}^{2}} Si+=j=1∑m(vij−vj+)2
S i − = ∑ j = 1 m ( v i j − v j − ) 2 S^{-}_{i} = \sqrt{\sum_{j=1}^m{(v_{ij}-v^{-}_{j})}^{2}} Si−=j=1∑m(vij−vj−)2
其中, m m m为指标维度的数量。 S i + S^{+}_{i} Si+表示方案 i i i与正理想解之间的距离, S i − S^{-}_{i} Si−表示方案 i i i与负理想解之间的距离,值越小越接近理想解,因此可以把正负理想解的范围展开到 [ 0 , 1 ] [0, 1] [0,1]之间作为检验指标的依据.
5.5 计算综合得分
最终的综合得分 s i s_i si可以通过权衡每个指标从而得到,如下所示:
s i = S i − S i + + S i − s_{i} = \frac{S^{-}_{i}}{S_{i}^{+}+S_{i}^{-}} si=Si++Si−Si−
其中, S i + S_{i}^{+} Si+表示第 i i i个方案与正理想解的距离, S i − S_{i}^{-} Si−表示第 i i i个方案与负理想解的距离。综合得分 s i s_i si可以看作是评价指标的加权平均值。当综合得分越高时,则表示第 i i i个方案越更优。
下面举一个例子来说明如何使用这种方法进行决策。例如,一家公司想在考虑多个指标情况下选择最适合的机器学习平台。他们的评价指标包括特性得分(例如各种模型类型的大小、精度等),服务质量得分(包括易用性、响应时间、数据隐私度,等等),价格得分等。我们假设有三个候选机器学习平台,评价指标如下表所示:
候选平台 | 特性得分(0 - 1) | 服务质量得分(0 - 1) | 价格得分(0 - 1) |
---|---|---|---|
平台 A | 0.8 | 0.6 | 0.7 |
平台 B | 0.6 | 0.8 | 0.6 |
平台 C | 0.7 | 0.5 | 0.8 |
使用 Topsis 方法来计算得到每个平台的得分:
对每个评价指标进行标准化,计算符合每个标准化指标的正负理想解,计算每个平台到理想解的距离:
候选平台 | 特性得分 | 服务质量得分 | 价格得分 | 正理想解 | 负理想解 | 到正理想解的距离 | 到负理想解的距离 | 综合得分 |
---|---|---|---|---|---|---|---|---|
平台 A | 0.8 | 0.6 | 0.7 | 0.8 | 0.5 | 0.2236 | 0.3606 | 0.3825 |
平台 B | 0.6 | 0.8 | 0.6 | 0.8 | 0.5 | 0.2828 | 0.2828 | 0.5000 |
平台 C | 0.7 | 0.5 | 0.8 | 0.8 | 0.5 | 0.2449 | 0.3317 | 0.4255 |
通过计算得出, 平台 B 的综合得分最高,因此可以推荐该平台作为其机器学习的首选选项。
6.灰色关联分析法(客观)
灰色关联度分析是一种比较常用的多因素综合评价方法,它可以用于确定不同的对象与某一参考对象之间关联度。如果我们把这个参考对象设置为理想中的完美对象,那么灰色关联分析法就可以分析出不同的对象的优劣。
具体实施步骤如下:
6.1 收集数据
建立评价指标矩阵,其中每行对应一个因素(评价对象),每列对应一个评价指标。评价指标可以是数量指标,也可以是质量(定性)指标,但是指标之间的具体意义必须相同。设评价指标矩阵为 X X X,其中 x i j x_{ij} xij 表示第 i i i 个因素对第 j j j 个指标的值。
我们先给出一个例子,某核心企业待选供应商的指标评价有关数据:
评价指标 | 对象1 | 对象2 | 对象3 | 对象4 | 对象5 | 对象6 |
---|---|---|---|---|---|---|
产品质量 | 0.83 | 0.90 | 0.99 | 0.92 | 0.87 | 0.95 |
产品价格(元) | 326 | 295 | 340 | 287 | 310 | 303 |
地理位置(千米) | 21 | 38 | 25 | 19 | 27 | 10 |
售后服务(小时) | 3.2 | 2.4 | 2.2 | 2.0 | 0.9 | 1.7 |
技术水平 | 0.20 | 0.25 | 0.12 | 0.33 | 0.20 | 0.09 |
经济效益 | 0.15 | 0.20 | 0.14 | 0.09 | 0.15 | 0.17 |
供应能力(件) | 250 | 180 | 300 | 200 | 150 | 175 |
市场影响度 | 0.23 | 0.15 | 0.27 | 0.30 | 0.18 | 0.26 |
交货情况 | 0.87 | 0.95 | 0.99 | 0.89 | 0.82 | 0.95 |
6.2 正向化和标准化并建立参考对象
对评价指标矩阵进行正向化和标准化,将各项指标转化为同一量纲下的评价指标值。其中标准化方法一般采用Min-max标准化。详见1.2与1.3。
在上面这个例子中,产品价格、地理位置、售后服务是负向指标,其他都是正向指标。预处理后的数据如下:
评价指标 | 对象1 | 对象2 | 对象3 | 对象4 | 对象5 | 对象6 |
---|---|---|---|---|---|---|
指标1 | 0 | 0.4375 | 1 | 0.5625 | 0.25 | 0.75 |
指标2 | 0.2642 | 0.8491 | 0 | 1 | 0.566 | 0.6981 |
指标3 | 0.6071 | 0 | 0.4643 | 0.6786 | 0.3929 | 1 |
指标4 | 0 | 0.3478 | 0.4348 | 0.5217 | 1 | 0.6522 |
指标5 | 0.4583 | 0.6667 | 0.125 | 1 | 0.4583 | 0 |
指标6 | 0.5455 | 1 | 0.4545 | 0 | 0.5455 | 0.7273 |
指标7 | 0.6667 | 0.2 | 1 | 0.3333 | 0 | 0.1667 |
指标8 | 0.5333 | 0 | 0.8 | 1 | 0.2 | 0.7333 |
指标9 | 0.2941 | 0.7647 | 1 | 0.4118 | 0 | 0.7059 |
建立参考对象,如下:
评价指标 | 对象1 | 对象2 | 对象3 | 对象4 | 对象5 | 对象6 | 参考对象 |
---|---|---|---|---|---|---|---|
指标1 | 0 | 0.4375 | 1 | 0.5625 | 0.25 | 0.75 | 1 |
指标2 | 0.2642 | 0.8491 | 0 | 1 | 0.566 | 0.6981 | 1 |
指标3 | 0.6071 | 0 | 0.4643 | 0.6786 | 0.3929 | 1 | 1 |
指标4 | 0 | 0.3478 | 0.4348 | 0.5217 | 1 | 0.6522 | 1 |
指标5 | 0.4583 | 0.6667 | 0.125 | 1 | 0.4583 | 0 | 1 |
指标6 | 0.5455 | 1 | 0.4545 | 0 | 0.5455 | 0.7273 | 1 |
指标7 | 0.6667 | 0.2 | 1 | 0.3333 | 0 | 0.1667 | 1 |
指标8 | 0.5333 | 0 | 0.8 | 1 | 0.2 | 0.7333 | 1 |
指标9 | 0.2941 | 0.7647 | 1 | 0.4118 | 0 | 0.7059 | 1 |
由于此处进行了正向化处理和Min-max标准化,因此,此处的参考对象的各项指标只要对每一行都取最大值即可。
6.3 确定权重
确定各个指标对应的权重。但暂时不对指标矩阵的每一行进行加权处理。可用层次分析法确定这些权值。
ω
=
[
ω
1
,
ω
2
,
.
.
.
,
ω
n
]
,
∑
i
=
1
n
ω
i
=
1
\omega =\left [ \omega _{1} ,\omega _{2} ,...,\omega _{n}\right ] ,\sum_{i=1}^{n} \omega _{i}=1
ω=[ω1,ω2,...,ωn],i=1∑nωi=1
这些权值将在计算灰色关联度的时候用到。
6.4 计算灰色关联系数
我们记
x
i
x_{i}
xi为对象
i
i
i,参考对象为
x
0
x_{0}
x0。
x
i
x_{i}
xi与
x
0
x_{0}
x0都有m个指标,我们需要求出它们在第k个指标上的关联系数。关联系数越大,代表这个实际对象越贴近于参考对象。对于n个实际对象,m个指标,
x
i
(
j
)
x_{i}(j)
xi(j)表示实际对象i的第j个指标的值,那么,
x
i
x_{i}
xi与
x
0
x_{0}
x0在第k个指标上的关联系数的计算公式如下:
ξ
i
(
k
)
=
min
1
≤
s
≤
n
min
1
≤
t
≤
m
∣
x
0
(
t
)
−
x
s
(
t
)
∣
+
ρ
max
1
≤
s
≤
n
max
1
≤
t
≤
m
∣
x
0
(
t
)
−
x
s
(
t
)
∣
∣
x
0
(
k
)
−
x
i
(
k
)
∣
+
ρ
max
1
≤
s
≤
n
max
1
≤
t
≤
m
∣
x
0
(
t
)
−
x
s
(
t
)
∣
\xi _{i}(k)=\frac{ \min_{1\le s \le n} \min_{1\le t \le m} \left | x_{0}(t)-x_{s}(t) \right | \\ +\rho \max_{1\le s \le n} \max_{1\le t \le m} \left | x_{0}(t)-x_{s}(t) \right | }{ \left | x_{0}(k)-x_{i}(k) \right | \\ +\rho \max_{1\le s \le n} \max_{1\le t \le m} \left | x_{0}(t)-x_{s}(t) \right | }
ξi(k)=∣x0(k)−xi(k)∣+ρmax1≤s≤nmax1≤t≤m∣x0(t)−xs(t)∣min1≤s≤nmin1≤t≤m∣x0(t)−xs(t)∣+ρmax1≤s≤nmax1≤t≤m∣x0(t)−xs(t)∣
其中, min 1 ≤ s ≤ n min 1 ≤ t ≤ m ∣ x 0 ( t ) − x s ( t ) ∣ \min_{1\le s \le n} \min_{1\le t \le m} \left | x_{0}(t)-x_{s}(t) \right | min1≤s≤nmin1≤t≤m∣x0(t)−xs(t)∣称为两极最小差, max 1 ≤ s ≤ n max 1 ≤ t ≤ m ∣ x 0 ( t ) − x s ( t ) ∣ \max_{1\le s \le n} \max_{1\le t \le m} \left | x_{0}(t)-x_{s}(t) \right | max1≤s≤nmax1≤t≤m∣x0(t)−xs(t)∣称为两级最大差, ρ \rho ρ称为分辨系数。
两级最小差和两级最大差的计算过程,就是把指标矩阵的各个值与参考对象进行比较的过程。分辨系数 ρ \rho ρ越大,分辨率就越大; ρ \rho ρ越小,分辨率就越小
在上面的例子中,我们可以算出两级最小差为0,两级最大差为1。这是由于使用了Min-max标准化方法而导致的。
6.5 计算灰色加权关联度并排序
灰色加权关联度就是每个对象的最终得分,它采用如下公式计算:
r i = ∑ k = 1 n w i ξ i ( k ) r_{i}=\sum_{k=1}^{n}w_{i}\xi _{i}(k) ri=k=1∑nwiξi(k)
其中, r i r_{i} ri 表示待评价对象的得分, w i w_{i} wi是6.3中确定的权值。
最终按照各个评价对象的得分进行排序,得分高表示与各项指标的关系越密切,也就越好。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)