文章快速检索  
  高级检索
基于核独立成分分析和支持向量数据描述的非线性系统故障检测方法
杨泽宇1, 王培良1,2     
1. 杭州电子科技大学新型电子器件与应用研究所, 浙江 杭州 310018;
2. 湖州师范学院信息与控制技术研究所, 浙江 湖州 313000
摘要: 复杂工业过程数据通常具有非高斯性和强非线性特征,为此提出了一种基于核独立成分分析和支持向量数据描述(KICA-SVDD)的非高斯非线性系统的故障检测方法.该方法首先运用核独立成分分析方法对数据进行特征提取,然后通过引入支持向量数据描述对独立主元成分进行建模,并计算相应的统计量及控制限,实现非高斯非线性系统下的故障检测.最后在Tennessee-Eastman(TE)过程上进行了仿真实验,结果表明所提出的方法降低了故障错分比例和漏检比例,验证了其可行性和有效性.
关键词: 核独立成分分析     支持向量数据描述     非高斯     非线性     故障检测    
Fault Detection Method for Non-linear Systems Based on Kernel Independent Component Analysis and Support Vector Data Description
YANG Zeyu1, WANG Peiliang1,2     
1. Institute of Electron Devices & Application, Hangzhou Dianzi University, Hangzhou 310018, China;
2. Institute of Information and Control Technology, Huzhou University, Huzhou 313000, China
Abstract: Complex industrial process data have the features of non-Gaussian and strong non-linear, so we propose a fault detection method for non-Gaussian and non-linear systems based on the kernel independent component analysis and the support vector data description (KICA-SVDD). Firstly, we apply the KICA method to extract the features of the data. Then we use the SVDD to model the extracted leading independent component and to calculate the statistics and the control limits. So that the faults on the non-Gaussian and non-linear system can be detected. Finally, the experimental results on the Tennessee-Eastman (TE) process's simulation study show that the proposed method reduces the fault misclassification ratio and the miss detection ratio, which verifies the proposed method's feasibility and validity.
Key words: kernel independent component analysis     support vector data description     non-Gaussian     non-linear     fault detection    

1 引言

面对复杂系统的故障检测与诊断[1],需要处理多种多样的问题,如多输入多输出问题、非高斯问题、非线性问题、动态问题等,而且在很多情况下,这些问题往往会同时出现.

目前针对单个问题的故障诊断研究比较多,比如非线性过程、非高斯过程和动态过程等,但是针对多个问题并存的研究比较少,如非高斯非线性过程.由于大多数的复杂工业过程往往都具有非高斯非线性特性,因此对于非高斯非线性系统的故障检测与诊断问题进行研究具有非常重要的现实意义.

针对非高斯非线性系统故障诊断的研究目前还比较少,文[2]中针对独立成分分析 (independent component analysis,ICA) 在处理非高斯信息方面有一定的成效而对非线性数据处理效果却不是很理想的情况下,提出了一种核独立成分分析 (kernel ICA,KICA) 方法,对非线性系统中带有非高斯工况数据进行了有效的特征提取与检测,但性能还能进一步改善.文[3]中提出了基于主成分分析和支持向量数据描述 (principal component analysis and support vector data description,PCA-SVDD) 的故障检测和自学习辨识模型,虽然模型利用了SVDD对数据分布没有限制的特点,但是在特征提取方面,PCA作为一种线性降维技术,没有充分考虑到复杂工业过程中工况数据的非高斯性和非线性.文[4]针对KICA方法不能突出于故障信息相关联的有用的独立成分的这个问题,提出了基于高斯混合模型 (Gaussian mixture model,GMM) 和加权KICA (weighted KICA,WKICA) 的非线性和非高斯过程监控方法,该方法对故障的检测精度优于传统的KICA方法.文[5]针对ICA方法在过程监控中无法识别影响故障诊断能力的重要组成部分的问题,提出了一种将ICA、杜宾沃森 (Durbin Watson,DW) 和SVDD结合的非高斯过程故障检测的方法 (ICA-DW-SVDD),但是该方法缺少对非线性数据的考虑.文[6]提出了一种基于核独立成分分析和最小二乘支持向量机 (least square support vector machine,LSSVM) 的滚动轴承的故障检测和分类方法,虽然能有效地进行故障分类,但是在故障检测上效果还有待提升.文[7]利用KPCA和KICA相结合的双核方法,虽然在一定情况下提高了对具有强非线性和非高斯性特征数据的化工生产过程的故障检测,但是部分故障仍存在着错分较高的情况.文[8]提出了一种将核慢特征判别分析和SVDD相结合的方法,虽然有效地解决了非线性数据存在的情况,但是对非高斯数据的处理能力欠佳.

本文拟解决对于工业工程中数据具有非高斯性和非线性特性情况下的故障检测问题,为了进一步提高检测性能,提出了一种KICA-SVDD方法.首先对正常工况数据利用KICA进行特征提取,分离出主导独立成分进行SVDD离线建模,求得超球体的球心a和半径R2,从而构建相应控制限R2;然后对故障数据进行相同的KICA特征提取,计算数据样本到球心a的距离从而求得其统计量Dist,判断Dist是否超限从而实现故障的在线检测.将上述方法应用于TE过程的仿真实验,通过计算各类故障数据当前统计量,判断其是否超过正常工况数据控制限来验证故障检测性能,并与KPCA-SVDD在TE过程中的故障检测结果进行对比,表明本文方法的故障检测结果整体优于KPCA-SVDD方法,并在一定程度上提高了故障检测速度.

2 核独立成分分析

独立成分分析 (ICA) 的目的就是从混合信号X中找到未知的混合矩阵A,实现源信号的盲源分离[9].假设有m个未知的源信号si(i=1,2,…,m) 的线性混合,构成一个列向量S=[s1s2,…,sm]T.混合矩阵是一个l×m的矩阵,X=[x1x2,…,xl]T为观测信号矢量且X=A·S. ICA的任务就是找到分离矩阵W,使得y=W·Xy=[y1y2,…,ym]就是从混合信号中分离出的独立源信号S的估计值[10],常用的ICA算法为基于负熵的定点FastICA算法[11].

但是考虑到过程测量变量间的非线性关系,核独立成分分析 (KICA) 被引入到过程故障检测和样本特征提取中,其核心思想是将原输入数据映射到高维特征空间中进行独立成分分析[12],即白化的核主成分分析 (KPCA)[13]加上独立成分分析 (ICA),最后求得原数据的独立成分.

KICA对数据特征提取的主要步骤[14]

首先将正常工况数据矩阵X=[x1x2,…,xn](n为数据的样本数量) 通过引入非线性函数ϕ(·) 将X变换到高维映射空间,得Φ=[ϕ(x1),…,ϕ(xn)].通常函数ϕ(·) 是未知的,因此要借助核矩阵K完成非线性变换,其转换可表示为

(1)

对数据Φ进行中心标准化,核矩阵变为

(2)

式中,En为各元素均为n×n常数矩阵.

进行特征值分解,取得前m个特征值λ1λ2λ3,…,λm及其对应的特征向量α1α2α3,…,αm;然后对数据进行白化处理,得

(3)

其中Λ=diag (λ1,…,λm),H=[α1,…,αm].

最后采用基于负熵的定点FastICA算法得到正交分离矩阵W和独立成分数据矩阵S=W·Z,按一定顺序对分离矩阵W进行行排序,根据每一行范数对所有行范数综合的贡献率选择独立成分个数,选取W的前p行,即得到S的前p列为主导独立成分[15].

3 支持向量数据描述

支持向量数据描述 (SVDD) 是一种单值分类方法,最早由Tax等提出,其基本思想是先把数据从原始空间投影到特征空间,再在该特征空间构造一个体积尽可能小而包围数据样本点尽可能多的超球体[16].该球体由少量支持向量 (support vector,SV) 决定且对于一个有限的训练样本数据,SV是位于高维数据分布边缘的少量样本. SVDD依据结构风险最小化原理,通过求取一个尽可能少的包含非目标类的点数据且体积最小的超球体来描述样本数据,即求满足一定条件的半径为R和球心为a的超球体.此方法对数据的分布没有任何限制,因此其可以很好地处理非高斯和非线性数据[17].

针对数据分布的强非线性特性,SVDD首先要通过一个非线性映射φ(·) 变换R:xF将训练样本数据X={xi∈Rdi=1,2,…,n}映射到一个高维特征空间中,然后在该空间内寻找一个最小体积的超球体,使其包含尽可能多的高维数据点[18-19].因此,满足条件的超球面可以通过以下优化问题解决[20-21]

(4)

式中,R为超球体半径,C是控制误差和超球面半径间的折中系数,ξi是为了允许一些数据点存在误差而引入的松弛因子,a为超球体球心.

将式 (4) 的最小化优化问题转化为其对偶问题的最大化问题:

(5)

式中,内积 (xixj) 可以用核函数k来描述.常用的核函数有高斯核函数,多项式核函数和Sigmoid核函数,本文采用式 (6) 所示的高斯核函数:

(6)

用式 (6) 来描述式 (5) 中的内积,得到:

(7)

根据以上分析可求得最小L的情况下的最优解αi

αi=0→‖xi-a2‖ < R2,即高维数据点在超球体内;

0 < αi < C→‖xi-a2=R2,即高维数据点在超球体上;

αi=C→‖xi-a2>R2,即高维数据点在超球体外.

在超球体上的数据即作为支持向量,令支持向量的样本数据为xsv,则超球体的球心a和半径R分别为

(8)

对新采样的数据距离超球体球心的距离为

(9)

DR2,则新数据属于该类;否则,不属于该类. SVDD算法单分类的2维仿真如图 1所示,利用已训练好的SVDD模型对测试样本检测,在超球体内的测试数据属于目标类,在超球体上的测试数据为支持向量,在超球体外的测试数据则属于非目标类.

图 1 SVDD单分类2维仿真 Figure 1 2D simulation of the single classification SVDD
4 基于KICA-SVDD的故障检测方法 4.1 统计量和控制限的构建

本文采用SVDD方法对经过KICA提取出的主导独立成分进行描述,建立SVDD模型:

(10)

式中,xi表示第i个样本,αi为各个样本的拉格朗日乘子,k(·) 为高斯核函数.得到相应SVDD超球体的球心和半径:

(11)

定义新的统计量Dist为样本数据到球心的距离[22]

(12)

该统计量的控制限即为该超球体的R2,因此当DistR2时,可认为检测的样本是属于该类,否则就认为不属于该类.

4.2 基于KICA-SVDD的故障检测

基于KICA-SVDD的故障检测方法主要包括离线建模和在线检测两个部分.首先利用KICA对数据进行特征提取,然后再通过已建好的正常工况数据的SVDD模型对故障工况数据进行检测.

4.2.1 离线建模

(1) 收集正常数据并建立正常数据集;

(2) 对正常数据进行标准化处理;

(3) 利用KICA方法对正常数据进行特征提取,提取主导独立成分;

(4) 将上述主导独立成分作为SVDD的输入,建立KICA-SVDD模型,由式 (11) 得到故障检测的控制限R2.

4.2.2 在线检测

(1) 按照训练建模中的步骤 (1)~步骤 (3) 对被测故障样本进行标准化和KICA特征提取主导独立成分等处理.

(2) 依据式 (12) 计算被测故障样本的统计量Dist,与控制限R2比较,检测被测故障样本是否超过控制限.若超过控制限,则为故障样本;否则,为正常样本.

(3) 定义故障错分比例为测试样本被错分的比例,定义故障漏检比例为将目标外的异常状态或发生的故障判定为目标内正常状态的比例,最后比较上述两种比例完成故障检测.

5 仿真研究

通过对Tennessee-Eastman (TE) 过程的仿真研究来验证本文方法的有效性. TE过程是由美国田纳西—伊斯曼化学品公司创建的,是国际上公认的评价监控方法的仿真平台. TE过程是一个典型的复杂的具有非高斯特性和一定非线性的化工过程,包括5个主要单元:反应器、冷凝器、压缩机、分离器和气提塔;包括A~H总共8种成分,其中A、C、D、E为反应物,B为催化剂,G、H为最终的产物[23];共有41个测量变量和12个控制变量,共52个观测变量;过程共设置了21种故障状况,其中故障16~20未知.正常工况的960个样本数据采自过程平稳的运行状态,各个故障工况数据前160个时刻的样本为正常数据,后800个时刻的样本为故障数据.本文对故障2、故障5、故障7、故障8、故障10、故障12、故障13、故障14进行检测,表 1对上述8种故障进行了详细描述[24].

表 1 TE过程故障描述 Table 1 Fault description of the TE process
故障 故障描述 类型
故障2 A/C恒定,B变化 阶跃
故障5 冷凝器冷却水入口温度变化 阶跃
故障7 物料C压力损失 阶跃
故障8 物料A,B,C的组成变化 随机
故障10 物料C温度变化 随机
故障12 冷凝器冷却水入口温度 随机
故障13 冷凝器冷却水入口温度变化 慢漂移
故障14 反应器冷却水阀门 粘滞

本文通过仿真来进一步地验证KICA-SVDD算法.对于SVDD单类分类器,有两种错分情况应当予以最小化:一是拒绝目标数据,在状态监控中被称之为“虚警”;另一种是接受非目标数据,即将目标外的异常状态或发生的故障判定为目标内正常状态,称之为“漏检”[25].对于大型复杂系统这的状态监控,分类器接受非目标数据漏检的情况比拒绝目标数据虚警更糟糕,严重危及复杂系统的运行安全,由此带来的损失更大,因此本文着重对故障数据的错分比例和漏检比例进行探讨.

表 2为KPCA-SVDD和KICA-SVDD对8种故障的检测结果. KICA方法能有效的处理一些非高斯非线性数据,对特征提取和故障检测也有一定的显著性,本文KICA中的核函数采用高斯核函数:

(13)

本文对每次实验共进行了10次仿真,最后取中位值作为仿真结果,如表 2所示.对于每一种故障,最小的错分比例和漏检比例以加粗形式显示.

表 2 故障数据集的错分比例和漏检比例 Table 2 Misclassification rate and miss detection rate of the fault data set
故障类别 错分比例/(%) 漏检比例/(%)
KPCA-SVDD (Dist) KICA-SVDD (Dist) KPCA-SVDD (Dist) KICA-SVDD (Dist)
故障2 1.35 1.25 1.563 1.5
故障5 65 63.438 71.75 70.75
故障7 0.208 0 0 0
故障8 6.146 2.292 4.25 2.75
故障10 55.938 40.459 66.875 48
故障12 4.875 2.188 3.125 1.375
故障13 5.104 4.792 6.875 5.625
故障14 2.813 0.208 2.125 0

表 2可以看出,对于故障13,KPCA-SVDD的Dist统计量虽能检测出故障发生,但是本文的方法进一步地降低了故障13的错分比例和漏检比例,分别达4.792%和5.625%;对于故障5和故障10,KPCA-SVDD和本文算法都不能对其进行有效地检测,但是相对于前者,本文算法的效果有所提高,但也同时存在着检测缺陷;而对于故障2、故障7、故障8、故障12、故障14,相对于KPCA-SVDD方法,本文算法利用新的控制限和统计量较有效地提高了故障的检测精度,错分比例和漏检比例都控制在3%以内.因此,对于所有故障,本文方法对故障检测的效果整体优于KPCA-SVDD方法,说明了本文提出方法的优越性和可行性.这里KPCA-SVDD建模的R2控制限为0.418 835,本文方法KICA-SVDD建模的R2控制限为0.552 628.

图 2以图示的形式展示了2种方法对于故障8的检测结果.在图 2(a)中,KPCA-SVDD中的Dist统计量虽能检测到该故障的发生,但是检测的错分比例和漏检比例都在4%以上.相比而言,如图 2(b)可见,本文提出的KICA-SVDD方法可以有效的检测到该故障的发生且故障错分比例和漏检比例都有所下降,分别为2.292%和2.75%.

图 2 故障8的检测结果 Figure 2 Detection results of the fault 8

图 3以图示的形式展示了2种方法对于故障14的检测结果.在图 3(a)中,KPCA-SVDD方法的Dist统计量能检测出故障的发生,但是总体精度不是很高.而在图 3(b)中,KICA-SVDD方法可以快速地检测到故障的发生且故障样本数据一直位于R2控制限以上,漏检比例为0%,错分比例为0.208%,几乎为0%.

图 3 故障14的检测结果 Figure 3 Detection results of the fault 14
6 结论

由于一些复杂系统同时具有非高斯性和非线性等特点,以往的ICA、PCA等数据处理方法并不能很好地同时处理数据的这些复杂特性,为降低对复杂系统故障检测的错分比例和漏检比例,本文提出了一种KICA-SVDD算法,利用两种方法对数据处理的优势而相结合是有一定成效的.运用KICA提取特征后利用SVDD建模从而进行故障检测.并对比了KPCA-SVDD方法,证明了本文方法的有效性,但仍有些许不足,下一步将在复杂数据特征提取和SVDD核函数优化方面进行更深入的研究.

参考文献
[1] 张可, 周东华, 柴毅. 复合故障诊断技术综述[J]. 控制理论与应用, 2015, 32(9): 1143–1157. Zhang K, Zhou D H, Chai Y. Review of multiple fault diagnosis methods[J]. Control Theory & Applications, 2015, 32(9): 1143–1157.
[2] Lee J M, Qin S J, Lee I B. Fault detection of non-linear processes using Kernel independent component analysis[J]. The Canadian Journal of Chemical Engineering, 2007, 85(4): 526–536.
[3] 祝志博, 王培良, 宋执环. 基于PCA-SVDD的故障检测和自学习辨识[J]. 浙江大学学报:工学版, 2010, 44(4): 652–658. Zhu Z B, Wang P L, Song Z H. PCA-SVDD based fault detection and self-learning identification[J]. Journal of Zhejiang University:Engineering Science, 2010, 44(4): 652–658.
[4] Cai L, Tian X, Chen S. Monitoring nonlinear and non-Gaussian processes using Gaussian mixture model-based weighted kernel independent component analysis[J/OL]. IEEE Transactions on Neural Networks & Learning Systems, 2015, 99:1-14.
[5] Chen M C, Hsu C C, Malhotra B, et al. An efficient ICA-DW-SVDD fault detection and diagnosis method for non-Gaussian processes[J/OL]. International Journal of Production Research.[2016-03-17]. http://www.tandfonline.com/action/doSearch?AllField=An+efficient+ICA-DW-SVDD+fault+detection+and+diagnosis+method+for+non-Gaussian+processes&SeriesKey=tprs20.
[6] Ma B, Wu J D, Ma J, et al. Fault monitoring and classification method of rolling bearing based on KICA and LSSVM[J]. Advanced Materials Research, 2014, 971-973(971-973): 476–480.
[7] 赵小强, 钱君秀. 基于双核独立元分析的化工过程故障诊断算法研究[J]. 上海交通大学学报, 2014, 48(7): 1004–1008. Zhao X Q, Qian J X. A fault diagnosis algorithm for chemical process based on dual-kernel independent component analysis[J]. Journal of Shanghai Jiaotong University, 2014, 48(7): 1004–1008.
[8] 张汉元, 田学民. 基于KSFDA-SVDD的非线性过程故障检测方法[J]. 化工学报, 2016, 67(3): 827–832. Zhang H Y, Tian X M. Nonlinear process fault detection based on KSFDA and SVDD[J]. CIESC Journal, 2016, 67(3): 827–832.
[9] 王培良, 葛志强, 宋执环. 基于迭代多模型ICA-SVDD的间歇过程故障在线监测[J]. 仪器仪表学报, 2009, 30(7): 1347–1352. Wang P L, Ge Z Q, Song Z H. Online fault monitoring for batch processes based on adaptive multimodel ICA-SVDD[J]. Chinese Journal of Scientific Instrument, 2009, 30(7): 1347–1352.
[10] 王普, 贾之阳, 高学金, 等. 基于MICA-PCA的间歇过程故障监测[J]. 北京工业大学学报, 2014, 40(11): 1472–1477. Wang P, Jia Z Y, Gao X J, et al. Fault detection of batch process based on MICA-PCA[J]. Journal of Beijing University of Technology, 2014, 40(11): 1472–1477.
[11] Hyvarinen A, Oja E. Independent component analysis:Algorithms and applications[J]. Neural Networks, 2000, 13(4/5): 411–430.
[12] 唐勇波, 桂卫华, 彭涛, 等. PCA和KICA特征提取的变压器故障诊断模型[J]. 高电压技术, 2014, 40(2): 557–563. Tang Y B, Gui W H, Peng T, et al. Transformer fault diagnosis model based on PCA and KICA feature extraction[J]. High Voltage Engineering, 2014, 40(2): 557–563.
[13] Lee J M, Yoo C K, Sang W C, et al. Nonlinear process monitoring using kernel principal component analysis[J]. Chemical Engineering Science, 2004, 59(1): 223–234. DOI:10.1016/j.ces.2003.09.012
[14] 蔡连芳, 田学民, 张妮. 一种基于改进KICA的非高斯过程故障检测方法[J]. 化工学报, 2012, 63(9): 2864–2868. Cai L F, Tian X M, Zhang N. Non-Gaussian process fault detection method based on modified KICA[J]. CIESC Journal, 2012, 63(9): 2864–2868.
[15] Cardoso J F, Souloumiac A. Blind beamforming for non-Gaussian signals[J]. IEE Proceedings, F:Radar & Signal Processing, 1994, 140(6): 362–370.
[16] Tax D M J, Duin R P W. Support vector domain description[J]. Machine Learning, 2004, 54: 45–66. DOI:10.1023/B:MACH.0000008084.60811.49
[17] Ge Z, Gao F, Song Z. Batch process monitoring based on support vector data description method[J]. Journal of Process Control, 2011, 21(6): 949–959. DOI:10.1016/j.jprocont.2011.02.004
[18] 王国柱, 刘建昌, 李元. 稀疏性SVDD方法在故障检测中的应用研究[J]. 东北大学学报:自然科学版, 2015, 36(6): 761–764. Wang G Z, Liu J C, Li Y. An applied research of sparsity SVDD method to the fault detection[J]. Journal of Northeastern University:Natural Science, 2015, 36(6): 761–764.
[19] 程昊翔, 王坚. 基于快速聚类分析的支持向量数据描述算法[J]. 控制与决策, 2016, 31(3): 551–554. Cheng H X, Wang J. Support vector data description based on fast clustering analysis[J]. Control and Decision, 2016, 31(3): 551–554.
[20] 谢磊, 刘雪芹, 张建明, 等. 基于NGPP-SVDD的非高斯过程监控及其应用研究[J]. 自动化学报, 2009, 35(1): 107–112. Xie L, Liu X Q, Zhang J M, et al. Non-Gaussian process monitoring based on NGPP-SVDD[J]. Acta Automatica Sinica, 2009, 35(1): 107–112.
[21] 谢彦红, 孙呈敖, 李元. 基于滑动窗口SVDD的间歇过程故障监测[J]. 信息与控制, 2015, 44(5): 531–537. Xie Y H, Sun C G, Li Y. Fault monitoring of batch process based on moving window SVDD[J]. Information and Control, 2015, 44(5): 531–537.
[22] 杨雅伟, 宋冰, 侍洪波. 多SVDD模型的多模态过程监控方法[J]. 化工学报, 2015, 66(11): 4526–4533. Yang Y W, Song B, Shi H B. Multimode processes monitoring method via multiple SVDD model[J]. CIESC Journal, 2015, 66(11): 4526–4533.
[23] Downs J J, Vogel E F. A plant-wide industrial process control problem[J]. Computers and Chemical Engineering, 1993, 17(3): 245–255. DOI:10.1016/0098-1354(93)80018-I
[24] 王培良, 夏春江. 基于PCA-PDBNs的故障检测与自学习辨识[J]. 仪器仪表学报, 2015, 36(5): 1147–1154. Wang P L, Xia C J. Fault detection and self-learning identification based on PCA-PDBNs[J]. Chinese Journal of Scientific Instrument, 2015, 36(5): 1147–1154.
[25] 李岳. 机械动力传动系统核基故障识别与状态预测技术研究[D]. 长沙: 国防科学技术大学, 2007. Li Y. Research on Kernel based fault recognition and condition forecasting for mechanical power and transmission systems[D]. Changsha:National University of Defense Technology, 2007.
http://dx.doi.org/10.13976/j.cnki.xk.2017.0153
中国科学院主管,中国科学院沈阳自动化研究所、中国自动化学会共同主办。
0

文章信息

杨泽宇, 王培良
YANG Zeyu, WANG Peiliang
基于核独立成分分析和支持向量数据描述的非线性系统故障检测方法
Fault Detection Method for Non-linear Systems Based on Kernel Independent Component Analysis and Support Vector Data Description
信息与控制, 2017, 46(2): 153-158.
Information and Control, 2017, 46(2): 153-158.
http://dx.doi.org/10.13976/j.cnki.xk.2017.0153

文章历史

收稿/录用/修回: 2016-05-09/2016-07-05/2016-09-28

工作空间