目录

  • 数据集来源
  • 模糊C均值算法
    • 原理
    • 模糊理论的数学基础(模糊集合)
      • 定义
      • 表示方法
        • Zadeh表示法
        • 序偶表示法
        • 向量表示法
    • 隶属函数
      • 隶属函数确定方法
    • 模糊关系
      • 定义
    • 实现步骤
    • 应用
    • 代码实现
    • 结果截图
    • 结果分析
    • 问题及解决办法
  • K均值算法
    • 原理
    • 应用
    • 代码实现
    • 结果
    • 结果分析
    • 问题及解决办法
  • 结果对比
  • 参考文章

数据集来源

seismic-bumps
数据集属性解释如下:

最后一个也就是第十九个属性是决策属性,它的含义是下个班次时是否会发生高能地震波由它将数据集分成两个大类,下个班次不会发生高能地震(class=0)占93.4%,会发生高能地震占6.6%

模糊C均值算法

原理

模糊c-均值聚类算法: fuzzy c-means algorithm (FCMA)或称( FCM)。在众多模糊聚类算法中,模糊C-均值( FCM) 算法应用最广泛且较成功,它是通过优化目标函数得到每个样本点对所有类中心的隶属度,隶属度范围为[0,1],从而决定样本点的类属以达到自动对样本数据进行分类的目的。

模糊理论的数学基础(模糊集合)

定义

  1. 论域:所讨论的全体对象,一般用U表示
  2. 元素:论域中的某个具体对象,可以用x1,x2,x3等表示
  3. 集合:论域中具有某种相同属性的确定的,可以区分彼此的元素的全体,常用A,B等表示。

模糊逻辑给集合中每一个元素赋予一个介于0和1之间的实数,描述其属于一个集合的强度,这个实数被称为元素属于一个集合的隶属度。集合中所有元素的隶属度全体构成集合的隶属函数。

表示方法

A={xi,μA(xi)∣xi∈U}A=\{x_i,μ_A(x_i)|x_i∈U\}A={xi​,μA​(xi​)∣xi​∈U}
μA(xi)表示元素xi属于模糊集合A的隶属度,U则是论域μ_A(x_i)表示元素x_i属于模糊集合A的隶属度,U则是论域μA​(xi​)表示元素xi​属于模糊集合A的隶属度,U则是论域

Zadeh表示法

  1. 论域是离散且元素数目有限
    A=μA(x1)/x1+μA(x2)/x2+…+μA(xn)/xnA=μ_A(x_1)/x_1+μ_A(x_2)/x_2+…+μ_A(x_n)/x_nA=μA​(x1​)/x1​+μA​(x2​)/x2​+…+μA​(xn​)/xn​
    或者
    A={μA(x1)/x1,μA(x2)/x2,…,μA(xn)/xn}A=\{μ_A(x_1)/x_1,μ_A(x_2)/x_2,…,μ_A(x_n)/x_n\}A={μA​(x1​)/x1​,μA​(x2​)/x2​,…,μA​(xn​)/xn​}
  2. 若论域是连续的,或者元素数目无限

    这里的积分符号只是表示所有元素,并非真正对其积分运算。

序偶表示法

A={(μA(x1),x1),(μA(x2),x2),…,(μA(xn),xn)}A=\{(μ_A(x_1),x_1),(μ_A(x_2),x_2),…,(μ_A(x_n),x_n)\}A={(μA​(x1​),x1​),(μA​(x2​),x2​),…,(μA​(xn​),xn​)}

向量表示法

A={μA(x1),μA(x2),…,μA(xn)}A=\{μ_A(x_1),μ_A(x_2),…,μ_A(x_n)\}A={μA​(x1​),μA​(x2​),…,μA​(xn​)}
若有出现某个元素隶属度为0的情况,Zadeh表示法和序偶表示法均可略过该元素,即模糊集合中不将此元素的隶属度写上去,可是向量表示法必须要写,否则查找时会发生错位情况。

隶属函数

常见隶属度函数有正态分布、三角分布、梯形分布

隶属函数确定方法

  1. 模糊统计法
  2. 专家经验法
  3. 二元对比排序法
  4. 基本概念扩充法

模糊关系

定义

A和B是模糊集合,则模糊关系用叉积表示:R=A×B,R∈[0,1]R=A×B,R∈[0,1]R=A×B,R∈[0,1]
叉积常用最小子运算:
μR(a,b)=min{(μA(a),μB(b))}μ_R(a,b)=min\{(μ_A(a),μ_B(b))\}μR​(a,b)=min{(μA​(a),μB​(b))}
所以A,B的隶属函数分别为
μA=[μA(a1),μA(a2),…,μA(an)]μ_A=[μ_A(a_1),μ_A(a_2),…,μ_A(a_n)]μA​=[μA​(a1​),μA​(a2​),…,μA​(an​)]
μB=[μA(b1),μB(b2),…,μB(bn)]μ_B=[μ_A(b_1),μ_B(b_2),…,μ_B(b_n)]μB​=[μA​(b1​),μB​(b2​),…,μB​(bn​)]
A到B的模糊关系R为μA转置成矩阵与μB相同位置的元素进行比较,然后做取小运算。

实现步骤

  1. 确定模糊规则;
  2. 输入相应参数并激活某些模糊规则,只有隶属度不为0的规则才能被激活;
  3. 通过比较隶属度大小来获得结论,但此时的结论并不是确定的;
  4. 利用结论确定实际输出。

应用

FCM在图像分割和大规模数据分析领域有较为广泛的应用。

代码实现

function[center, U, obj_fcn] = fcm_final(data,c,options)
% 输入:
% data 数据集 n行m列,n为样本数据数,m为数据的特征数
% c 聚类中心的个数
%options(1): 隶属度矩阵U的指数expo,>1(缺省值: 2.0)
%options(2): 最大迭代次数max_t(缺省值: 100)
%options(3): 隶属度最小变化量e,迭代终止条件(缺省值: 1e-5)
%options(4): 每次迭代是否输出信息标志(缺省值: 1)
% 输出:
% U 隶属度矩阵
% center 聚类中心
% obj_fcn 目标函数% 判断输入参数的个数只能是2个或者3个
if nargin ~= 2 && nargin ~= 3error('Too many or too few input argument! ');
end
data_n = size(data, 1);% 求数据的行,即样本个数
data_m = size(data, 2);% 求数据的列,即特征个数% 默认操作参数
default_options = [2; 100; 1e-5; 1];% 如果输入参数个数为2,调用默认的options参数
if nargin == 2,options = default_options;
else % 分析有options做参数的情况:% 用户在输入options参数时需注意,如果options参数的个数少于4个,则未输入参数的对应位置用nan来代替,这样可以保证未输入参数采用的是默认值,否则可能会出现前面参数占用后面参数的值的情况,从而影响聚类效果。if length(options) < 4,temp = default_options;temp(1:length(options)) = options;options = temp;end% 返回options中值为NaN的索引位置nan_index = find(isnan(options) == 1);% 将default_options中对应位置的参数值付给options中值为NaN的值options(nan_index) = default_options(nan_index);if options(1) <= 1,% 模糊因子是大于1的数error('The exponent should be greater than 1 !');endend% 将options中的分量分别复制给四个变量
expo = options(1);%模糊因子m
max_t = options(2);% 最大迭代次数
e = options(3);%迭代终止条件
display = options(4);%输出信息% 目标函数初始化
obj_fcn = zeros(max_t, 1);
U = initfcm(c, data_n);
% 初始化模糊分配矩阵,使U满足列上相加值为1% 主要循环
for i = 1 : max_t% 在第k步循环中改变聚类中心center和隶属矩阵U[U, center, obj_fcn(i)] = stepfcm(data, U, c, expo);if display,fprintf('FCM:Iteration count = %d, obj_fcn = %f\n',i,obj_fcn(i));plotfcm(data,center,U,obj_fcn);end%迭代终止条件的判断if i > 1,if abs(obj_fcn(i) - obj_fcn(i-1)) < e,break;endendend% 实际迭代次数
iter_n = i;
% 清除迭代次数之后的值
obj_fcn(iter_n + 1 : max_t) = [];
end% 初始化fcm的隶属度函数矩阵,满足列向量之和为1
% 一次聚类包含的过程:
% % (1)计算聚类中心,(2)目标函数,(3)距离函数,(4)计算新的隶属矩阵% 输入:data,U,c,expo(模糊因子)
% 输出:U_new(新的隶属矩阵),center(聚类中心),obj_fcn(目标函数)function[U_new, center, obj_fcn] = stepfcm(data, U, c, expo)% 对隶属矩阵进行指数运算(加上模糊因子)
mf = U.^expo; % 隶属矩阵模糊化
% 相当于一次性将所有聚类中心作为一个矩阵计算出来
center = mf*data./((ones(size(data,2),1)*sum(mf'))');
dist = distfcm(center, data); % 计算距离矩阵
obj_fcn = sum(sum(dist.^2 .* mf)); % 计算目标函数
temp = dist.^(-2/(expo-1));
U_new = temp./(ones(c,1)*sum(temp)); % 计算新的隶属矩阵
end

% 输入:data, center, U, obj_fcn
% 对数据集进行聚类function plotfcm(data,center,U,obj_fcn)figure(1)
subplot(2,1,1);
plot(U(1,:),'-b');
title('隶属度矩阵值')
ylabel('第一类')
subplot(2,1,2);
plot(U(2,:),'-r');
ylabel('第二类')
xlabel('样本数')figure(2)
grid on
plot(obj_fcn);
title('目标函数变化值');
xlabel('迭代次数')
ylabel('目标函数值')figure(3)
title('聚类图像');
plot(data(:,1),data(:,2),'*r');
maxU = max(U);
index1 = find(U(1,:)==maxU);
index2 = find(U(2,:)==maxU);
plot(data(index1,1),data(index1,2),'*g');
hold on
plot(data(index2,1),data(index2,2),'*r');
plot(center(1,1),center(1,2),'oy','Markersize',5,'linewidth',3)
plot(center(2,1),center(2,2),'ob','Markersize',5,'linewidth',3)
hold off;
end
% U--> c * n(c行n列) ,c为聚类数, n为样本数% 输入: c, data_n
% data_n  数据集data所含的样本数
% c       这组数据的聚类数
% 输出:U(初始化之后的隶属矩阵)
function[U] = initfcm(c, data_n)% 初始化隶属矩阵U:rand函数可产生在(0, 1)之间均匀分布的随机数组成的数组。
U = rand(c, data_n);    %%% sum(U)是指对矩阵U进行纵向相加,即求每一列的和,结果是一个1行n列的矩阵。(sum函数后面参数不指定或指定为1时均表示列相加)。col_sum = sum(U);U = U./col_sum(ones(c,1), : );% col_sum(ones(cluster_n, 1),:)等效于ones(clusters_n,1)*col_sum
% 上述目的是将col_sum扩展成与U(c,data_n)大小相同的矩阵,然后进行对应元素的点除,使隶属矩阵列项和为1。end

结果截图

第一次运行(隶属度最小变化量1e-5)
精度和部分隶属度矩阵


Accuracy =0.97242549 至 2561 列0.9992    0.9986    0.9997    0.9995    0.9999    0.9997    0.9837    0.9998    0.9989    0.9988    0.9987    0.9987    0.99860.0008    0.0014    0.0003    0.0005    0.0001    0.0003    0.0163    0.0002    0.0011    0.0012    0.0013    0.0013    0.00142562 至 2574 列0.9989    0.9986    0.9986    0.9992    1.0000    0.9991    0.9992    0.9990    0.9994    0.9996    0.9990    0.9991    0.99990.0011    0.0014    0.0014    0.0008    0.0000    0.0009    0.0008    0.0010    0.0006    0.0004    0.0010    0.0009    0.00012575 至 2584 列0.9997    0.9991    0.9995    0.9992    0.9997    0.9981    1.0000    0.9997    0.9992    0.99900.0003    0.0009    0.0005    0.0008    0.0003    0.0019    0.0000    0.0003    0.0008    0.0010时间已过 20.831562 秒。



第二次运行(隶属度最小变化量1e-2)
精度和部分隶属度矩阵

Accuracy =0.97242549 至 2561 列0.9992    0.9986    0.9997    0.9995    0.9999    0.9997    0.9837    0.9998    0.9989    0.9988    0.9987    0.9987    0.99860.0008    0.0014    0.0003    0.0005    0.0001    0.0003    0.0163    0.0002    0.0011    0.0012    0.0013    0.0013    0.00142562 至 2574 列0.9989    0.9986    0.9986    0.9992    1.0000    0.9991    0.9992    0.9990    0.9994    0.9996    0.9990    0.9991    0.99990.0011    0.0014    0.0014    0.0008    0.0000    0.0009    0.0008    0.0010    0.0006    0.0004    0.0010    0.0009    0.00012575 至 2584 列0.9997    0.9991    0.9995    0.9992    0.9997    0.9981    1.0000    0.9997    0.9992    0.99900.0003    0.0009    0.0005    0.0008    0.0003    0.0019    0.0000    0.0003    0.0008    0.0010时间已过 21.192296 秒。



第三次运行(隶属度最小变化量1e-6)
精度和部分隶属度矩阵

Accuracy =0.97242549 至 2561 列0.9992    0.9986    0.9997    0.9995    0.9999    0.9997    0.9837    0.9998    0.9989    0.9988    0.9987    0.9987    0.99860.0008    0.0014    0.0003    0.0005    0.0001    0.0003    0.0163    0.0002    0.0011    0.0012    0.0013    0.0013    0.00142562 至 2574 列0.9989    0.9986    0.9986    0.9992    1.0000    0.9991    0.9992    0.9990    0.9994    0.9996    0.9990    0.9991    0.99990.0011    0.0014    0.0014    0.0008    0.0000    0.0009    0.0008    0.0010    0.0006    0.0004    0.0010    0.0009    0.00012575 至 2584 列0.9997    0.9991    0.9995    0.9992    0.9997    0.9981    1.0000    0.9997    0.9992    0.99900.0003    0.0009    0.0005    0.0008    0.0003    0.0019    0.0000    0.0003    0.0008    0.0010时间已过 20.491563 秒。


第四次运行(隶属度最小变化量1e-8)
精度和部分隶属度矩阵

Accuracy =0.97242549 至 2561 列0.9992    0.9986    0.9997    0.9995    0.9999    0.9997    0.9837    0.9998    0.9989    0.9988    0.9987    0.9987    0.99860.0008    0.0014    0.0003    0.0005    0.0001    0.0003    0.0163    0.0002    0.0011    0.0012    0.0013    0.0013    0.00142562 至 2574 列0.9989    0.9986    0.9986    0.9992    1.0000    0.9991    0.9992    0.9990    0.9994    0.9996    0.9990    0.9991    0.99990.0011    0.0014    0.0014    0.0008    0.0000    0.0009    0.0008    0.0010    0.0006    0.0004    0.0010    0.0009    0.00012575 至 2584 列0.9997    0.9991    0.9995    0.9992    0.9997    0.9981    1.0000    0.9997    0.9992    0.99900.0003    0.0009    0.0005    0.0008    0.0003    0.0019    0.0000    0.0003    0.0008    0.0010时间已过 19.932578 秒。



第五次运行(隶属度最小变化量1e-1)
精度和部分隶属度矩阵

Accuracy =0.97242549 至 2561 列0.0008    0.0014    0.0003    0.0005    0.0001    0.0003    0.0163    0.0002    0.0011    0.0012    0.0013    0.0013    0.00140.9992    0.9986    0.9997    0.9995    0.9999    0.9997    0.9837    0.9998    0.9989    0.9988    0.9987    0.9987    0.99862562 至 2574 列0.0011    0.0014    0.0014    0.0008    0.0000    0.0009    0.0008    0.0010    0.0006    0.0004    0.0010    0.0009    0.00010.9989    0.9986    0.9986    0.9992    1.0000    0.9991    0.9992    0.9990    0.9994    0.9996    0.9990    0.9991    0.99992575 至 2584 列0.0003    0.0009    0.0005    0.0008    0.0003    0.0019    0.0000    0.0003    0.0008    0.00100.9997    0.9991    0.9995    0.9992    0.9997    0.9981    1.0000    0.9997    0.9992    0.9990时间已过 20.895177 秒。


结果分析

可以看出,不管迭代终止条件如何变化,精度不会变,隶属度矩阵也几乎不会变。目标函数形状几乎不会变化,只会随着迭代次数的变化延长。而且聚类的图像不会随着我修改数值而改变(因为精度一直是那样子),也许有轻微改变,但是肉眼观察不出来。

问题及解决办法

不知道为什么,从第三次运行开始,隶属度矩阵值就出了问题,图像都是一样的:

但是另外两幅图结果都是和其他一样的。
解决办法暂无。。

K均值算法

k均值介绍可以参考K-means聚类算法

原理

K-means(K均值聚类算法)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。
每一个聚类中心及分配给它的对象就是一个聚类。每一个聚类中的样本都具有相似的特征,不同的聚类之间差异性较大。

应用

k-means算法在图像分割领域也有应用,生活中也可以将k-means算法应用于客户分类等地方。

代码实现

我这里用的是matlab中自带的kmeans函数,可以在MATLAB帮助文档中找到。

%K-means聚类
% clc,clear;
load matdata;
earthquake=X;    %列向量变成行向量,209*180矩阵
[x,y]=size(earthquake);
opts = statset('Display','final');
K=16;           %将X划分为K类
repN=50;        %迭代次数,在repN次中选出一个最好的
%K-mean聚类
tic
[Idx,Ctrs,SumD,D] = kmeans(X,K,'Replicates',repN,'Options',opts);
%Idx N*1的向量,存储的是每个点的聚类标号
%打印结果
fprintf('划分成%d类的结果如下:\n',K)
for i=1:Ktm=find(Idx==i); %求第i类的对象tm=reshape(tm,1,length(tm)); %变成行向量fprintf('第%d类共%d个分别是%s\n',i,length(tm),int2str(tm)); %显示分类结果
end
toc

结果

由于数据量过于庞大,只截图部分
第一次运行

第二次运行

第三次运行

第四次运行

第五次运行

结果分析

这里使用的是MATLAB自带的用于聚类的kmeans算法的函数,出来的结果并不是非常准确。数据集中解释说,数据可分成两类,一类是2414个,一类是170个,可见该算法精度不算高。
通过结果对比计算可得,算法精度大约在0.9795左右。
我尝试修改迭代次数想获得不一样的结果,可是该算法还挺稳定……0.9795看起来是个挺高的精度,但我还是觉得不够
后面我会再寻找更优化的算法进行聚类。

问题及解决办法

由于数据集的文件类型出现了多次的问题,后来发现用save和load可以解决问题。
先选择要读入的数据文件,然后将数据一列一列读进X1,X2……,然后将其保存即可。

[filename,fpath] = uigetfile(...
{...'*.m;*.txt;*.data;*.arff',...'Data(*.m;*.txt;*.data;*.arff)';...'*.*','All Files(*.*)'...
},'Select data');
if ~filenamereturn
end
[X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,X16,X17,X18,X19] = textread(filename,'%s%s%s%d%d%d%d%s%d%d%d%d%d%d%d%d%d%d%d','delimiter',',');
X=[X4,X5,X6,X7,X9,X10,X11,X12,X13,X14,X15,X16,X17,X18,X19];
save matdata;%保存的文件名

结果对比

  1. 时间对比
    相同的数据,kmeans算法的运行时间大大低于fcm,这是我实验过程中最大的心得,也可能和我的fcm算法不够精简有关系。
  2. 精度对比
    上面也看到了,精度k均值的算法略微高于fcm算法。
  3. 总结
    kmeans算法是一种硬分类,它的某一点对某个集合的归属度要么为0要么为1,而fcm不同,它的每个点对某个集合都有一个隶属度,我选择的数据集中的数据大部分是隶属度比较强,大部分都在0.9990以上。

参考文章

FCM算法介绍

K-means算法和模糊C均值算法对比相关推荐

  1. K-means聚类算法和模糊C-means聚类算法

    K-means聚类算法和模糊C-means聚类算法 1.K-means聚类算法 K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数, ...

  2. 两种聚类方法——K均值聚类(K-means)算法和模糊C均值聚类(FCM)算法的简述与在MATLAB中的实现

    目录 1.K-means算法 1.1算法流程 1.2程序实现 1.3实验结果 原始数据集 聚类结果 2.FCM算法 2.1算法流程 2.2程序设计 FCM子函数 主函数 2.3实验结果 原始数据集 聚 ...

  3. r语言实现模糊c均值算法,R语言基本统计分析方法(包及函数)

    转载自:http://blog.csdn.net/s04023083/article/details/40344273 摘要:目前经典的统计学分析方法主要有回归分析,Logistic回归,决策树,支持 ...

  4. python计算iris数据集的均值_模糊C均值聚类算法及python实现

    目录 本文采用数据集为iris,将iris.txt放在程序的同一文件夹下.请先自行下载好. 模糊理论 模糊控制是自动化控制领域的一项经典方法.其原理则是模糊数学.模糊逻辑.1965,L. A. Zad ...

  5. 模糊聚类的代码实现python_Fuzzy C-Means(模糊C均值聚类)算法原理详解与python实现...

    目录 模糊理论 Fuzzy C-Means算法原理 算法步骤 python实现 参考资料 本文采用数据集为iris,将iris.txt放在程序的同一文件夹下.请先自行下载好. 模糊理论 模糊控制是自动 ...

  6. 【老生谈算法】matlab实现模糊K-均值算法——均值算法

    模糊K-均值算法及其matlab实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]模糊K-均值算法及其matlab实现.d ...

  7. 数据挖掘--“聚类”详解、K-means、K-平均值算法、K均值算法

    一. 什么是聚类 二. 聚类步骤 三. 聚类算法有哪些 1 层次聚类算法 2 划分聚类算法 3 基于密度的聚类算法 4 基于网格的聚类算法 5 基于模型的聚类算法 一. 什么是聚类? 物以类聚,人以群 ...

  8. 模糊聚类FCM算法和基于GA遗传优化的FCM聚类算法matlab仿真

    目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 在各种糊聚类算法中 ,模糊C -均值聚类算法FCM (FuzzyC MeanClusteri ...

  9. 模糊C均值聚类算法的实现

     模糊C均值聚类算法的实现 研究背景 聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类 图像处理和模糊规则处理等众多领域中获得最广泛的应用.它把一个没有类别标记的样本按照 ...

最新文章

  1. 驾驶员行为监控系统:需要它来管理车队
  2. iOS 直播专题2-音视频采集
  3. 项目管理——WBS工作分解法
  4. 直接用Win32 API创建对话框Demo
  5. Sql Server 2008 精简版(Express)和管理工具的安装以及必须重新启动计算机才能安装 SQLServer的问题和第一次使用sqlexpress的连接问题
  6. java string 反序列化_如何将java.lang.String的空白JSON字符串值反序列化为null?
  7. centos 虚拟机glibc升级_分享Centos6.5升级glibc过程
  8. 【CVPR 2021】VarifocalNet: An IoU-aware Dense Object Detector的译读笔记
  9. Powerset:超越Google的搜索引擎?
  10. 3850x5服务器装系统,IBM X3850 X5服务器ESXi 5安装配置全过程——安装
  11. 爬虫(六十九)简明 jieba 中文分词教程(六十)
  12. maya 阿诺德水晶材质_Maya自带Arnold中的Ai Standard Surface材质如何渲染透明贴图?...
  13. 理论+实验:Apache网页与安全优化(网页压缩、网页缓存、隐藏版本信息、网页图片防盗链)
  14. windows 下 tomcat 开机自启动
  15. cookie 、localStorage 和 sessionStorage 区别
  16. jQuery漂浮横幅图片广告代码
  17. K210应用2-使用GPIO控制LED状态
  18. C语言/C++编程学习:C语言环境设置
  19. 二十一、JVM可视化监控工具
  20. Docker内时区查询和修改方法

热门文章

  1. Android 仿网易一元夺宝客户端下拉加载动画实现(一)
  2. 富途网络科技有限公司2019秋招凉经
  3. Problem:Cow Art
  4. SpringBoot通过qq邮箱发送验证码
  5. 007.python科学计算库matplotlib(下)
  6. Android登陆页面
  7. 思创易控cetron-思创MS5000系列打造中南商务大厦智慧办公全网覆盖
  8. 基于SSM技术房屋出租信息管理平台的设计与实现
  9. 格式工厂 v4.0.0 最新去广告绿色纯净版
  10. 亚马逊店大欺客?要求缴纳100万美金保险费!