赞
踩
声明:该文章为作者整理和简略的,非原创,是多方资料的整合,为方便所以标注的原创,有错别字欢迎指正
统计学习是关于计算机基于数据构建概率模型并运用模型对数据进行预测与分析的一门学科。统计学习也称为统计机器学习。
(1)统计学习以计算机及网络为平台,是建立在计算机及网络之上的;
(2)统计学习以数据为研究对象,是数据驱动的学科;(3)统计学习的目的是对数据进行预测与分析;
(4)统计学习以方法为中心,统计学习方法构建模型并应用模型进行预测与分析;
(5)统计学习是概率论、统计学、信息论、计算理论、最优化理论及计算机科学等多个领域的交叉学科。
统计学习的对象是数据
从数据出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到对数据的分析与预测中去。
统计学习关于数据的基本假设是同类数据具有一定的统计规律,这是统计学习的前提。
统计学习的方法是基于数据构建模型从而对数据进行预测和分析。
这里主要讨论的是监督学习(就是拿来训练的数据都是有对应的label的)。这种情况下统计学习的方法可以概括如下:从给定的、有限的、用于学习的训练数据(training data)集合出发,假设数据是独立同分布的;并且假设要学习的模型属于某个函数的集合,称为假设空间(hypothesis space);应用某个评定准则(evaluation criterion),从假设空间中选择一个最有的模型,使它对·已知训练数据及未知测试数据(test data)在给定的评价准则下有最优的预测:最有模型的选取由算法实现。这样。统计学习包括模型的假设空间、模型选择的准则以及模型学习的算法,称其为统计学习方法的三要素,简称为模型(model)、策略(strategy)和算法(algorithm)。
对于上面的这段话,我举个例子来说明下:比如给定了一个训练集,搭建一个网络(一个最简单的线性网络,即y = a * x + b)这就是我们的模型,然后我们选取的策略就是通过模型预测出来的结果和真实标注的label越接近越好,然后通过算法,不断地调正模型中地参数a和b,让其结果越接近label越好。
实现统计学习方法地步骤如下:
(1)得到一个有限的训练数据集合;
(2)确定包含所有可能的模型的假设空间,即学习模型的集合;
(3)确定模型选择的准则,即学习的策略;
(4)实现求解最优模型的算法,即学习的算法;
(5)通过学习方法选择最优模型;
(6)利用学习的最优模型对新数据进行预测或分析。
统计学习包括监督学习、非监督学习、半监督学习及强化学习。这里主要涉及监督学习。
监督学习的任务是学习一个模型,使模型能够对任意给定的输入,对其相应的输出做出一个好的预测(注意,这里的输入、输出是指某个系统的输出、输出,与学习的输入与输出不同)。计算机的基本操作就是给定一个输入产生一个输出。
1、基本概念
(1)输入空间、特征空间、输出空间
在监督学习中,将输入与输出所有可能取值的集合分别称为输入空间(input space)与输出空间(output space)。 输入与输出空间可以是有限元素的集合,也可以使整个欧式空间,输入空间与输出空间可以是同一个空间,也可以不是同一个空间,但通常输出空间要远远小于输入空间。
每个具体的输入是一个实例(instance),通常由特征空间(feature vector)表示,这时,所有特征向量存在的空间称为特征空间(feature space)。特征空间的每一维对应于一个特征,有时假设输入空间与特征空间为相同的空间,对它们不予区分;有时假设输入空间与特征空间为不同的空间,将实例从输入空间映射到特征空间。模型实际上都是定义在特征空间上的。
在监督学习过程中,将输入与输出看作定义在输入(特征)空间与输出空间上的随机变量的取值。
监督学习从训练数据集合中学习模型,对测试数据进行预测。训练数据由输入(或特征相邻)与输出对组成,训练集通常表示为
T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) T = {(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)} T=(x1,y1),(x2,y2),...,(xN,yN)
测试数据也由相应的输入与输出对组成,输入与输出对又称为样本或者样本点。
(2)、联合概率分布
统计学习假设数据存在一定的统计规律,X和Y具有联合概率分布的假设就是监督学习关于数据的基本假设。
(3)、假设空间
模型属于由输入空间到输出空间的映射的集合,这个集合就是假设空间。假设空间的确定意味着学习范围的确定。
监督学习模型可以是概率模型或非概率模型。
2、问题的形式化
监督学习就是利用训练数据集学习一个模型,再用模型对测试样本集进行预测。监督学习分为学习和预测两个过程,有学习系统与预测系统来完成。
首先给定一个训练数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
T = {(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)}
T=(x1,y1),(x2,y2),...,(xN,yN)
其中(xi, yi), i=1, 2, …, n,称为样本或者样本点,xi是输入或者实例, yi是输出。
监督学习中,假设训练数据与测试数据是依联合概率分布P(X, Y)独立同分布产生的。
由上图,在学习过程中,学习系统利用给定的训练数据集,通过学习(或训练)得到一个模型,表示为条件概率分布 P ^ \hat{P} P^(Y|X)或者决策函数Y = f ^ \hat{f} f^(X)。条件概率分布 P ^ \hat{P} P^(Y|X)或者决策函数Y = f ^ \hat{f} f^(X)描述输入与输出随机变量之间的映射关系。
在预测过程中,预测系统对于给定的测试样本集中的输入XN+1, 由模型yN+1 = argmax P ^ \hat{P} P^(yN+1|xN+1)或者yN+1 = f ^ \hat{f} f^(XN+1)给出相应的输出yn+1.
在学习过程中,学习系统(也就是学习算法)试图通过训练数据集中的样本(xi, yi)带来的信息学习魔性,具体的说,对于输入xi,一个具体的模型y=f(x)可以产生一个输出f(xi),而训练数据集中对应的输出是yi,如果这个模型有很好的预测能力,训练样本输出yi和模型输出f(xi)之间的差就应该足够小。学习系统通过不断的尝试,选取最好的模型,以便对训练数据集有足够好的预测,同时对未知的测试数据集的预测也有尽可能好的推广。
统计学习方法=模型 + 策略 + 算法
1、模型
统计学习要考虑的问题是学习什么样的模型,在监督学习过程中,模型就是所要学习的条件概率或决策函数。模型的假设空间(hypothesis space)包含所有可能的条件概率分布或决策函数。
假设空间用 τ \tau τ表示,假设空间可以定义为决策函数的集合
τ = { f ∣ Y = f ( x ) } \tau = \lbrace f|Y=f(x) \rbrace τ={f∣Y=f(x)}
其中,X和Y是定义在输入空间和输出空间上的变量,这时
τ
\tau
τ通常是由一个参数向量决定的函数族:
$
τ
=
{
f
∣
Y
=
f
θ
(
X
)
,
θ
∈
R
n
}
\tau = \lbrace f|Y=f_\theta(X), \theta \in R^n \rbrace
τ={f∣Y=fθ(X),θ∈Rn}
参数向量 θ \theta θ取值于n维欧式空间Rn,称为参数空间(paramteter space)。
假设空间也可以定义为条件概率的集合
τ = { P ∣ P ( Y ∣ X ) } \tau = \lbrace P|P(Y|X) \rbrace τ={P∣P(Y∣X)}
其中,X和Y都是定义在输入空间和输出空间的随机变量,这时 τ \tau τ通常是由一个参数向量决定的条件概率分布族:
τ = { P θ ( Y ∣ X ) , θ ∈ R n } \tau = \lbrace P_\theta(Y|X), \theta \in R^n \rbrace τ={Pθ(Y∣X),θ∈Rn}
参数向量 θ \theta θ取值于n维欧式空间Rn,也称为参数空间。
2、策略
有了模型的假设空间,统计学习接下来需要考虑按照怎么样的准则学习或者选择最优的模型,统计学习的目标在于从假设空间中选择最优模型。
首先就说说损失函数和风险函数
监督学习问题是在假设空间 τ \tau τ中选取模型f作为决策函数。对于给定的输入X,由f(X)给出相应的输出Y,这个输出的预测值f(X)与真实值可能一致也可能不一致,用一个损失函数(loss function)或者代价函数(cost function)来衡量预测错误的程度。损失函数是f(X)和Y的非负实值函数,记作L(Y, f(X))。
统计学习常用的损失函数有以下几种:
(1) 0-1损失函数(0-1 loss function)
L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y, f(X))=\left\{ 1,Y≠f(X)0,Y=f(X) \right. L(Y,f(X))={1,0,YY=f(X)=f(X)
(2)平方损失函数(quadratic loss function)
L
(
Y
,
f
(
X
)
)
=
(
Y
−
f
(
X
)
)
2
L(Y,f(X))= (Y - f(X))^2
L(Y,f(X))=(Y−f(X))2
(3) 绝对损失函数(absolute loss function)
L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y, f(X)) = | Y - f(X)| L(Y,f(X))=∣Y−f(X)∣
(4) 对数损失函数 (logarithmic loss function) 或者对数似然函数 (loglikehood loss function)
L ( Y , f ( X ) ) = − l o g P ( Y ∣ X ) L(Y, f(X)) = -logP(Y|X) L(Y,f(X))=−logP(Y∣X)
这里我重点讲下对数损失函数
比如在一个二分类问题中, 正确lable为
y
∈
{
0
,
1
}
y \in \lbrace0,1 \rbrace
y∈{0,1} , 概率评估为$p = P_r(y=1)(也就是根据分类器得出啊概率为1的概率是多少),从而得到log loss 为:
L
l
o
g
(
y
,
p
)
=
−
l
o
g
P
r
(
y
∣
p
)
=
−
(
y
l
o
g
(
p
)
+
(
1
−
y
)
l
o
g
(
1
−
p
)
)
L_{log}(y, p) = -logP_r(y|p) = -(ylog(p) + (1-y)log(1-p))
Llog(y,p)=−logPr(y∣p)=−(ylog(p)+(1−y)log(1−p))
然后将其拓展到多分类的例子中去,让正确的标签(label)集合被编码成1-of-K的二进制指示器矩阵Y(例如有50个样本,10个label,从而这个矩阵Y的大小就为50 * 10, 其中Y[10, 9] = 1 就表示第11个样本的label就是9,当然每一行也只有一个·1,因为一个就是一个sample, 每个sample就是对于一个lable,每个不同的label对于矩阵不同的列),例如y_{i, k}=1表示样本i的标签是k。P为概率评估矩阵,其中P_{i, k} = P_r(t_{i, k} = 1)。log loss为
L
l
o
g
(
Y
,
P
)
=
−
l
o
g
P
r
(
Y
∣
P
)
=
−
1
N
∑
i
=
0
N
−
1
∑
k
=
0
K
−
1
y
i
,
k
l
o
g
P
i
,
k
(*)
L_log(Y, P) = -logPr(Y|P) = -\frac{1}{N}\sum_{i=0}^{N-1}\sum_{k=0}^{K-1}y_{i, k}logP_{i, k}\tag{*}
Llog(Y,P)=−logPr(Y∣P)=−N1i=0∑N−1k=0∑K−1yi,klogPi,k(*)
from sklearn.metrics import log_loss
log_loss(["spam", "ham", "ham", "spam"],
... [[.1, .9], [.9, .1], [.8, .2], [.35, .65]])
0.21616187468057912
[
0
1
1
0
1
0
0
1
]
\left[ 01101001 \right]
⎣⎢⎢⎡01101001⎦⎥⎥⎤
对应的矩阵P为:
[
0.1
0.9
0.9
0.1
0.8
0.2
0.35
0.65
]
\left[ 0.10.90.90.10.80.20.350.65 \right]
⎣⎢⎢⎡0.10.90.80.350.90.10.20.65⎦⎥⎥⎤
根据公式(*)即可求得上面的结果。
损失函数值越小,模型就越好,由于模型的输入、输出(X, Y)是随机变量,遵循联合分布P(X, Y),所以损失函数的期望值是
R
e
x
p
(
f
)
=
E
P
[
L
(
Y
,
f
(
X
)
)
]
=
∫
x
∗
y
L
(
y
,
f
(
x
)
)
p
(
x
,
y
)
d
x
d
y
R_{exp}(f) = E_P[L(Y, f(X))] = \int_{x*y}L(y, f(x))p(x, y)dxdy
Rexp(f)=EP[L(Y,f(X))]=∫x∗yL(y,f(x))p(x,y)dxdy
这是理论上模型
f
(
X
)
f(X)
f(X)关于联合分布
P
(
X
,
Y
)
P(X, Y)
P(X,Y)的平均意义下的损失,称为风险函数(risk function)或期望损失(expected loss)。
学习的目标就是选择期望风险最小的模型,由于连个分布 P ( X , Y ) P(X, Y) P(X,Y)是未知的, R e x p R_{exp} Rexp不能直接计算。实际上,如果知道联合分布 P ( X , Y ) P(X, Y) P(X,Y),可以从联合分布直接求出条件概率分布 P ( X , Y ) P(X, Y) P(X,Y), 也就不需要学习了。正是因为不知道联合概率分布, 所以才需要进行学习。
给定一个训练数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
T = {(x_{1}, y_{1}), (x_{2}, y_{2}), ... , (x_{N}, y_{N})}
T=(x1,y1),(x2,y2),...,(xN,yN)
模型
f
(
X
)
f(X)
f(X)关于训练数据集的平均损失称为经验风险(empirical risk)或经验损失(empirical loss),记为
R
e
m
p
R_{emp}
Remp:
R e m p = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) (1) R_{emp} = \frac{1}{N}\sum_{i=1}^{N}L(y_i, f(x_i))\tag{1} Remp=N1i=1∑NL(yi,f(xi))(1)
期望风险 R e x p ( f ) R_{exp}(f) Rexp(f)是模型关于联合分布的期望损失,经验风险 R e m p ( f ) R_{emp}(f) Remp(f)是模型关于训练样本集的平均损失,根据大数定律,当样本容量N趋向无穷时,经验风险 R e m p ( f ) R_{emp}(f) Remp(f)趋向于期望风险 R e x p ( f ) R_{exp}(f) Rexp(f).所以一个很自然的想法是用经验风险估计期望风险,但是由于现实中训练样本有限,甚至很小,所以用到经验风险估计期望风险常常不理想,要对经验风险进行一定的矫正,关系到经验风险最小化和结构风险最小化。
在训练样本很大的时候采用经验风险最小化(ERM)
在假设空间、损失函数以及训练数据集确定的情况下,经验风险函数式(1)就可以确定,经验风险最小化(empirical risk minimization, ERM)的策略认为:经验风险最小化的模型就是最优的模型, 根据这一策略, 按照经验风险最小化求最优模型就是求解最优化问题:
m
i
n
f
∈
τ
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
min_{f \in \tau} \frac{1}{N} \sum_{i=1}^{N}L(y_i, f(x_i))
minf∈τN1i=1∑NL(yi,f(xi))
其中, τ \tau τ是假设空间。
当样本足够大的时候,经验风险最小化能保证很好的学习效果,在现实中广泛使用。
在训练样本容量很小的时候采用结构风险最小化(SRM)
因为在样本容量小的时候,结构风险最小化学习会产生过拟合现象。
结构风险最小化(structural risk minimization, SRM)是为了防止过拟合而提出来的策略。结构风险最小化等价于正则化(regularization)。结构风险在经验风险上加上表达模型的复杂度的正则化项(regularizer)或罚项(penalty term)。在假设空间、损失函数以及训练数据集确定的情况下,结构风险的定义为
R
s
r
m
=
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
R_{srm} = \frac{1}{N} \sum_{i=1}^{N}L(y_i, f(x_i)) + \lambda J(f)
Rsrm=N1i=1∑NL(yi,f(xi))+λJ(f)
其中
J
(
f
)
J(f)
J(f)为模型的复杂度,是定义在假设空间
τ
\tau
τ上的泛函。模型
f
f
f越复杂,复杂度
J
(
f
)
J(f)
J(f)就越大;反之,模型越简单
f
f
f就越简单,复杂度
J
(
f
)
J(f)
J(f)就越小,也就是说, 复杂度表示了对复杂模型的惩罚。
λ
≥
0
\lambda \geq 0
λ≥0是系数,用以权衡经验风险和模型复杂度,结构风险需要经验风险与模型复杂度同时小。结构风险小的模型往往对训练数据以及未知的测试数据有较好的预测。
结构风险最小化的策略认为结构风险最小的模型就是最优的模型,所以求最优模型,就是求解最优化问题:
m
i
n
f
∈
τ
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
min_{f \in \tau} \frac{1}{N} \sum_{i=1}{N}L(y_i, f(x_i)) + \lambda J(f)
minf∈τN1i=1∑NL(yi,f(xi))+λJ(f)
3、算法
算法是指学习模型的具体计算方法。即考虑用什么样的方法求解最优模型。
这时,统计学习问题归结为最优化问题, 统计学习的算法称为求解最优化问题的算法。
上面的过程可以解释为:
注意:统计学习具体采用的损失函数未必是评估时采用的损失函数。
假设学习到的模型是Y =
f
^
(
X
)
\hat{f}(X)
f^(X), 训练误差是模型 Y =
f
^
(
X
)
\hat{f}(X)
f^(X)关于训练数据集的平均损失:
R
e
m
p
(
f
^
)
=
1
N
∑
i
=
1
N
L
(
y
i
,
f
^
(
x
i
)
)
R_{emp}(\hat{f}) = \frac{1}{N} \sum_{i=1}^{N}L(y_i, \hat{f}(x_i))
Remp(f^)=N1i=1∑NL(yi,f^(xi))
其中N是训练样本容量。
测试误差是模型Y =
f
^
(
X
)
\hat{f}(X)
f^(X)关于测试数据集的平均损失:
e
t
e
s
t
=
1
N
′
∑
i
=
1
N
′
L
(
y
i
,
f
^
(
x
i
)
)
e_{test} = \frac{1}{N'} \sum_{i=1}^{N'} L(y_i, \hat{f}(x_i))
etest=N′1i=1∑N′L(yi,f^(xi))
其中N‘是测试样本容量。
测试误差反映了学习方法对未知的测试数据集的预测能力,是学习中的重要概念。
训练误差和测试误差与模型复杂度之间的关系。由此我们要进行最优的模型选择,即选择复杂度适合的模型,以达到测试误差最小的学习目的。常用的模型选择方法有:正则化与交叉验证。
正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或罚项(penalty term)。正则化项一般是模型复杂度的单调递增函数。
正则化一般具有如下形式:
m
i
n
f
∈
τ
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
min_{f \in \tau}\frac{1}{N} \sum_{i=1}^{N}L(y_i, f(x_i)) + \lambda J(f)
minf∈τN1i=1∑NL(yi,f(xi))+λJ(f)
其中,第一项是经验风险,第二项是正则化项, λ ≥ \lambda \geq λ≥ 0为调整两者之间关系的函数。
正则化到具体实现时有不同形式。如:
(1)
L
(
w
)
=
1
N
∑
i
=
1
N
(
f
(
x
i
;
w
)
−
y
i
)
2
+
λ
2
∣
∣
∣
w
∣
∣
2
L(w) = \frac{1}{N} \sum_{i=1}^{N}(f(x_i; w) - y_i)^2 + \frac{\lambda}{2}|||w||^2
L(w)=N1i=1∑N(f(xi;w)−yi)2+2λ∣∣∣w∣∣2
这里,
∣
∣
w
∣
∣
||w||
∣∣w∣∣表示参数向量w的
L
2
L_2
L2范数。
(2) L ( w ) = 1 N ∑ i = 1 N ( f ( x i ; w ) − y i ) 2 + λ ∣ ∣ w ∣ ∣ 1 L(w) = \frac{1}{N} \sum_{i=1}^{N} (f(x_i; w) - y_i)^2 + \lambda ||w||_1 L(w)=N1i=1∑N(f(xi;w)−yi)2+λ∣∣w∣∣1
这里, ∣ ∣ w ∣ ∣ 1 ||w||_1 ∣∣w∣∣1表示参数向量的 L 1 L_1 L1范数。
适合数据不充足的情况,交叉验证的基本想法就是重复地使用数据,把指定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复进行驯良、测试以及模型的选择
简单交叉验证
首先随机地将已给数据分成两部分,一部分作为训练集,另一部分作为测试集(例如7-3),然后用训练集在各种条件下训练模型, 从而得到不同地模型,在测试机上评价各个模型地测试误差,选出测试误差最小的模型。
S折交叉验证(应用广泛)
首先随机的将已给数据切分成S个互不相交的大小相同的子集,然后利用S-1个子集的数据训练模型,利用余下的子集测试模型;将这一过程对可能的S种选择重复进行,最后选出S次评测后平均测试误差最小的模型。
留一交叉验证(往往在数据缺乏的情况下使用)
S折交叉验证的特殊情形是S = N, 称为留一交叉验证,往往在数据缺乏的情况下使用, N是给定的数据集容量。
监督学习的任务就是学习一个模型,应用这一模型,对给定的输入预测相应的输出。这个模型的一般形式为决策函数
Y
=
f
(
X
)
Y = f(X)
Y=f(X)
或者条件概率分布:
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)
监督学习方法分为生成方法(generative approac)和判别方法(distriminative approach)。对应的模型称为生成模型(generative module)和判别模型(distriminative module).
监
督
学
习
方
法
{
生
成
方
法
:
由
数
据
学
习
联
合
概
率
分
布
P
(
X
,
Y
)
,
然
后
求
出
条
件
概
率
分
布
P
(
Y
∣
X
)
,
即
生
成
模
型
:
P
(
Y
∣
X
)
=
P
(
X
,
Y
)
P
(
X
)
判
别
方
法
{
定
义
:
由
数
据
直
接
学
习
决
策
函
数
f
(
X
)
或
者
条
件
概
率
分
布
P
(
Y
∣
X
)
作
为
预
测
的
模
型
。
判
别
模
型
关
心
的
是
对
给
定
的
输
入
X
,
应
该
预
测
怎
样
的
输
出
Y
典
型
的
生
成
模
型
有
:
k
近
邻
法
、
感
知
机
决
策
树
、
逻
辑
斯
蒂
回
归
模
型
、
最
大
熵
模
型
、
支
持
向
量
机
、
提
升
方
法
和
条
件
随
机
场
等
监督学习方法 \left\{ \begin{aligned} 生成方法 :& 由数据学习联合概率分布P(X, Y),然后求出条件 概率分布P(Y|X),即生成模型:P(Y|X) = \frac{P(X, Y)}{P(X)} \\ 判别方法&\left\{ \begin{aligned} 定义:由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测的模型。判别模型关心的是对给定的输入X,应该预测怎样的输出Y\\ 典型的生成模型有:k近邻法、感知机决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、提升方法和条件随机场等 \end{aligned} \right. \end{aligned} \right.
监督学习方法⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧生成方法:判别方法由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y∣X),即生成模型:P(Y∣X)=P(X)P(X,Y){定义:由数据直接学习决策函数f(X)或者条件概率分布P(Y∣X)作为预测的模型。判别模型关心的是对给定的输入X,应该预测怎样的输出Y典型的生成模型有:k近邻法、感知机决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、提升方法和条件随机场等
参考文献:
【1】统计学习方法-李航
【2】scikit-learn log loss
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。