CART算法:决策树的双面剑

news2024/11/18 1:37:25

一 引言

上一篇文章 决策树算法:ID3与C4.5的对比分析 中介绍了ID3和C4.5两种决策树算法,这两种决策树都只能用于分类问题,而CART(classification and regression tree)决策树算法它可以处理分类问题(Classification)和回归问题(Regression)。

CART算法生成的决策树是二叉树形式,即每个内部节点都只有两个分支。

与ID3算法和C4.5算法相比,CART算法生成的决策树是二叉树形式,即每个内部节点都只有两个分支。也就是说在根据特征属性分裂数据集时,无论该特征属性有多少个可能取值,都只有两种选择——‘是’和‘否’,以上文中判断是否是程序员数据集为例,如果根据近视程度进行分裂,可以将数据集分为{‘轻微’}和{‘中等’,‘严重’}两个数据集(当然也可以是其两种组合)然后在进一步迭代中进一步细化分数据集。

下面,我们分别说说CART算法如何解决分类问题和回归问题。

二 分类问题

对于分类问题,CART算法采用基尼指数作为最优分裂特征属性选择标准。

先来说说基尼指数,与熵一样,基尼指数越小则数据集不确定性越小,代表着数据集纯度越高。给定数据集 X X X包含 L L L个分类,那么数据集 X X X的基尼指数为:

G i n i ( X ) = ∑ l L ∣ X l ∣ ∣ X ∣ ( 1 − ∣ X l ∣ ∣ X ∣ ) = 1 − ∑ l = 1 L ( ∣ X l ∣ ∣ X ∣ ) 2 Gini(X) = \sum\limits_l^L {\frac{{|{X_l}|}}{{|X|}}(1 - \frac{{|{X_l}|}}{{|X|}})} = 1 - {\sum\limits_{l = 1}^L {\left( {\frac{{|{X_l}|}}{{|X|}}} \right)} ^2} Gini(X)=lLXXl(1XXl)=1l=1L(XXl)2

假设 A A A是数据集 X X X中包含若干个可能取值的一个特征属性, a a a A A A的其中一个可能取值,将数据集 X X X按照 a a a进行划分,就可以分为两个数据集,分别是 X 1 = { x ∈ X ∣ x A = a } {X_1} = \left\{ {x \in X|{x_A} = a} \right\} X1={xXxA=a} X 2 = { x ∈ X ∣ x A ≠ a } {X_2} = \left\{ {x \in X|{x_A} \ne a} \right\} X2={xXxA=a},那么在特征 A A A下,集合 X X X的基尼指数为:

G i n i ( X , A ) = ∣ X 1 X ∣ G i n i ( X 1 ) + ∣ X 2 X ∣ G i n i ( X 2 ) Gini(X,A) = \left| {\frac{{{X_1}}}{X}} \right|Gini({X_1}) + \left| {\frac{{{X_2}}}{X}} \right|Gini({X_2}) Gini(X,A)= XX1 Gini(X1)+ XX2 Gini(X2)

接下来,我们通过实例演示如果应用基尼指数选择最优分裂特征属性。还是使用上篇博客中介绍ID3算法时使用过的数据集,如下所示。先来计算三个特征属性各个可能取值的基尼指数。

对属性 A A A的“穿格子衬衫”这个值计算基尼指数:

G i n i ( X , A 1 ) = 5 10 × { 2 × 4 5 × 1 5 } + 5 10 × { 2 × 3 5 × 2 5 } = 0.4 Gini(X,{A_1}) = \frac{5}{{10}} \times \left\{ {2 \times \frac{4}{5} \times \frac{1}{5}} \right\} + \frac{5}{{10}} \times \left\{ {2 \times \frac{3}{5} \times \frac{2}{5}} \right\} = 0.4 Gini(X,A1)=105×{2×54×51}+105×{2×53×52}=0.4

对属性 A A A的“不穿格子衬衫”这个值计算基尼指数,由于只有两个属性,无论按照哪个属性来计算结果都一样,所以:

G i n i ( X , A 2 )  =  G i n i ( X , A 1 ) = 0.4 Gini(X,{A_2}){\text{ = }}Gini(X,{A_1}) = 0.4 Gini(X,A2) = Gini(X,A1)=0.4

对属性 B B B的“严重”这个值计算基尼指数:

G i n i ( X , B 1 ) = 3 10 × { 2 × 2 3 × 1 3 } + 7 10 × { 2 × 5 7 × 2 7 } = 0.42 Gini(X,{B_1}) = \frac{3}{{10}} \times \left\{ {2 \times \frac{2}{3} \times \frac{1}{3}} \right\} + \frac{7}{{10}} \times \left\{ {2 \times \frac{5}{7} \times \frac{2}{7}} \right\} = 0.42 Gini(X,B1)=103×{2×32×31}+107×{2×75×72}=0.42

对属性 B B B的“中等”这个值计算基尼指数:

G i n i ( X , B 2 ) = 4 10 × { 2 × 4 4 × 0 4 } + 6 10 × { 2 × 3 6 × 3 6 } = 0.3 Gini(X,{B_2}) = \frac{4}{{10}} \times \left\{ {2 \times \frac{4}{4} \times \frac{0}{4}} \right\} + \frac{6}{{10}} \times \left\{ {2 \times \frac{3}{6} \times \frac{3}{6}} \right\} = 0.3 Gini(X,B2)=104×{2×44×40}+106×{2×63×63}=0.3

对属性 B B B的“轻微”这个值计算基尼指数:

G i n i ( X , B 3 ) = 3 10 × { 2 × 1 3 × 2 3 } + 7 10 × { 2 × 6 7 × 1 7 } = 0.46 Gini(X,{B_3}) = \frac{3}{{10}} \times \left\{ {2 \times \frac{1}{3} \times \frac{2}{3}} \right\} + \frac{7}{{10}} \times \left\{ {2 \times \frac{6}{7} \times \frac{1}{7}} \right\} = 0.46 Gini(X,B3)=103×{2×31×32}+107×{2×76×71}=0.46

对属性 C C C的“严重”这个值计算基尼指数:

G i n i ( X , C 1 ) = 3 10 × { 2 × 0 3 × 3 3 } + 7 10 × { 2 × 4 7 × 3 7 } = 0.34 Gini(X,{C_1}) = \frac{3}{{10}} \times \left\{ {2 \times \frac{0}{3} \times \frac{3}{3}} \right\} + \frac{7}{{10}} \times \left\{ {2 \times \frac{4}{7} \times \frac{3}{7}} \right\} = 0.34 Gini(X,C1)=103×{2×30×33}+107×{2×74×73}=0.34

对属性 C C C的“中等”这个值计算基尼指数:

G i n i ( X , C 2 ) = 3 10 × { 2 × 1 3 × 2 3 } + 7 10 × { 2 × 5 7 × 2 7 } = 0.42 Gini(X,{C_2}) = \frac{3}{{10}} \times \left\{ {2 \times \frac{1}{3} \times \frac{2}{3}} \right\} + \frac{7}{{10}} \times \left\{ {2 \times \frac{5}{7} \times \frac{2}{7}} \right\} = 0.42 Gini(X,C2)=103×{2×31×32}+107×{2×75×72}=0.42

对属性 C C C的“轻微”这个值计算基尼指数:

G i n i ( X , C 3 ) = 3 10 × { 2 × 1 3 × 2 3 } + 7 10 × { 2 × 6 7 × 1 7 } = 0.46 Gini(X,{C_3}) = \frac{3}{{10}} \times \left\{ {2 \times \frac{1}{3} \times \frac{2}{3}} \right\} + \frac{7}{{10}} \times \left\{ {2 \times \frac{6}{7} \times \frac{1}{7}} \right\} = 0.46 Gini(X,C3)=103×{2×31×32}+107×{2×76×71}=0.46

可见,属性 B B B的“中等“取值时具有最小的基尼指数,所以这个值作为当前数据集的最优分裂特征属性值。分裂后,可以获得两个数据集,对获得的数据集继续计算基尼指数,选择最优分裂特征属性值,如此迭代形成一颗完整的决策树。

对于连续型特征属性,可以参照C4.5算法对连续型特征属性的处理方法,只不过在CART算法中是计算基尼指数。

三 回归问题

此时,我们研究的已经是回归问题了,所以,请转变思路,对于任意一个 x ∈ X x \in X xX,经过决策树后的输出 f ( x ) f(x) f(x)的可能取值已经不再像之前的分类决策树那样, f ( x ) f(x) f(x)的取值只可能是在 X X X中出现过的那几种取值,回归树最后的输出 f ( x ) f(x) f(x)可能是之前没有出现过的,甚至连可能值的个数都不固定。所以,对于回归树,首先解决的问题就是如何确定 f ( x ) f(x) f(x)的可能值。

对于数据集 X X X,假设我们在其特征属性 A A A上取一个值 a a a将数据集划分成两类:

X 1 = { x ∣ x A ⩽ a } {X_1} = \{ x|{x_A} \leqslant a\} X1={xxAa}

X 2 = { x ∣ x A > a } {X_2} = \{ x|{x_A} > a\} X2={xxA>a}

在这两个类上的输出值 f ( x ) f(x) f(x)分别为 c 1 {c_1} c1 c 2 {c_2} c2,那么根据特征属性 A A A的值 a a a X X X进行划分,所产生的总误差是:

L o s s A , a = ∑ x ∈ X 1 ( y − c 1 ) 2 + ∑ x ∈ X 2 ( y − c 2 ) 2 Los{s_{A,a}} = \sum\limits_{x \in {X_1}} {(y - {c_1}} {)^2} + \sum\limits_{x \in {X_2}} {(y - {c_2}} {)^2} LossA,a=xX1(yc1)2+xX2(yc2)2

式中, y y y x x x对应的真实值。我们的目标就是使得 L o s s A , a Los{s_{A,a}} LossA,a最小化时的 c 1 {c_1} c1 c 2 {c_2} c2,目标函数为:

min ⁡ ∑ x ∈ X 1 ( y − c 1 ) 2 + min ⁡ ∑ x ∈ X 2 ( y − c 2 ) 2 {\min \sum\limits_{x \in {X_1}} {{{(y - {c_1})}^2}} + \min \sum\limits_{x \in {X_2}} {{{(y - {c_2})}^2}} } minxX1(yc1)2+minxX2(yc2)2

那么,当 c 1 {c_1} c1 c 2 {c_2} c2取什么值的的时候 L o s s A , a Los{s_{A,a}} LossA,a最小呢?根据最小二乘的性质可知,当 c 1 {c_1} c1 c 2 {c_2} c2分为为 X 1 {X_1} X1 X 2 {X_2} X2中所有 y y y的平均值的时候 c 1 {c_1} c1 c 2 {c_2} c2去的最小值,即:

c i = a v e ( y ∣ x ∈ X i ) {c_i} = ave(y|x \in {X_i}) ci=ave(yxXi)

所以,如果根据 a a a划分之后得到的是叶子结点,那么最终输出的值就是所属样本子集所有 y y y的平均值。
f ( x ) = c i = a v e ( y ∣ x ∈ X i ) f(x)={c_i} = ave(y|x \in {X_i}) f(x)=ci=ave(yxXi)

对数如何确定输出值的问题,就已经解决了。接下来还剩两个个问题需要解决,那就是选择哪个属性作为最优分割特征属性以及选择哪个值作为最佳的分割点。

对于这个问题,可以通过遍历数据集各特征属性的可能取值的方式来解决:对数据集 X X X中各特征属性 A A A,计算其所有取值 a a a下的 L o s s A , a Los{s_{A,a}} LossA,a,然后对比所有 L o s s A , a Los{s_{A,a}} LossA,a,取值最小的 L o s s A , a Los{s_{A,a}} LossA,a所对应的特征属性 A A A为当前最优分裂特征属性, a a a为最佳分裂点。

至此,如何确定各分支的输出值、如何选择最优分割特征属性和分割点的问题都已解决,最后总结一下CART算法在回归问题中的决策树构建流程:

(1)对当前数据集 X X X,计算所有特征属性 A A A下所有取值 a a a作为分割点时的最小 L o s s A , a Los{s_{A,a}} LossA,a

(2)对比所有 L o s s A , a Los{s_{A,a}} LossA,a,选择最小的 L o s s A , a Los{s_{A,a}} LossA,a所对应的特征属性 A A A为当前最优分裂特征属性, a a a为最佳分裂点将数据集划分都左右两个子树中;

(3)对左右两个子树的数据集重复(1)、(2)步骤继续划分,直到节点中数据集满足指定条件则决策树构建完成。

四 树剪枝

无论是面对分类问题,还是回归问题,最终生成的树都有可能过于复杂,容易发生过拟合的情况,所以决策树构建完成后,有必要进一步完成数剪枝。

本文代价复杂度剪枝 Cost-Complexity Pruning(CCP) 方法,过程如下:

输入:CART算法生成的决策树 T 0 T_0 T0
输出:剪枝后的最优决策树 T α {T_\alpha } Tα
(1)令 k = 0 k=0 k=0 T = T 0 T=T_0 T=T0,$\alpha = + \infty ;( 2 )自上而下地对各内部节点计算 ; (2)自上而下地对各内部节点计算 ;(2)自上而下地对各内部节点计算C({T_t}) , , |{T_t}|$以及

g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t) = {{C(t) - C({T_t})} \over {|{T_t}| - 1}} g(t)=Tt1C(t)C(Tt)

α = min ⁡ ( α , g ( t ) ) \alpha = \min (\alpha ,g(t)) α=min(α,g(t))

其中, T t T_t Tt表示以 t t t为根节点的子树, C ( t ) {C(t)} C(t)是对 t t t进行剪枝后对训练数据集的预测误差, C ( T t ) {C({T_t})} C(Tt)是对训练数据集的预测误差, ∣ T t ∣ {|{T_t}|} Tt T t T_t Tt的叶子结点个数;
(3)自上而下地访问内部节点 t t t,如果有 g ( t ) = α g(t)=\alpha g(t)=α,则对 t t t进行剪枝,并对叶子结点 t t t以多数表决法决定输出,得到树 T T T
(4)令 k = k + 1 k=k+1 k=k+1 α k = α {\alpha _k} = \alpha αk=α T k = T {T_k} = T Tk=T
(5)如果 T T T不是由根节点单独构成的树,则回到步骤(3);
(6)采用交叉验证法在子树序列 T 0 , T 1 , ⋯   , T k = T {T_0},{T_1}, \cdots ,{T_k} = T T0,T1,,Tk=T选取最优的子树 T α {T_\alpha } Tα

要理解CART决策树的整个剪枝过程,关键是明白 g ( t ) g(t) g(t)的含义,对于一颗理想的决策树,我们当然希望预测误差越小越好,树的规模也越小越好,但是两者却不能两全,因为往往预测误差随着树规模的增大而减小,所以单独考虑预测误差变化或者树规模变化都不合适,最好是选择一个衡量标准能够同时考虑到预测误差变化量和树规模变化,例如两者的比值。

仔细 g ( t ) g(t) g(t)的计算发现,分子是剪枝前后预测误差相减,也就是预测误差变化量,分子是剪枝前后叶子结点数的变化量,所以我们可以认为两者的比值就是树 t t t每个叶子节点所带来的的预测误差的变化量,或者说树 t t t所带来的的预测误差变化率——这就是 g ( t ) g(t) g(t)的含义。
为什么每次对 g ( t ) g(t) g(t)最小的节点进行剪枝呢?因为 g ( t ) g(t) g(t)越小代表对 t t t对整个决策树的作用越小,对其进行剪枝对决策树的准确率影响也是最想的,当然应该优先被剪枝。

如果还不明白,那么通过下面的例子来理解吧。

有下面这个坐标中中的数据集,以及根据数据集构建好的决策树,如下图所示:

此时, α 1 = 0 {\alpha _1} = 0 α1=0,树中共有3个节点,对每个节点分别计算其 g ( t ) g(t) g(t)

t 1 t_1 t1 t 2 t_2 t2节点的 g ( t ) g(t) g(t)最小,我们选择剪枝少的节点,也就是 t 3 t_3 t3进行剪枝,并且令 α 2 = 1 8 {\alpha _2} = {1 \over 8} α2=81。剪枝后决策树如下:

剩下两个节点,继续计算每一个节点的 g ( t ) g(t) g(t):

显然, t 2 t_2 t2 g ( t ) g(t) g(t)更小,所以对 t 2 t_2 t2进行剪枝,并令 α 3 = 1 8 {\alpha _3} = {1 \over 8} α3=81

这时候仅剩下一个 t 1 t_1 t1,计算后有 g ( t 3 ) = 1 4 g({t_3}) = {1 \over 4} g(t3)=41,所以 α 4 = 1 4 {\alpha _4} = {1 \over 4} α4=41

完成上述所有计算后,我们得到序列 α 0 = 0 , α 2 = 1 8 , α 3 = 1 8 , α 4 = 1 4 {\alpha _0} = 0,{\alpha _2} = {1 \over 8},{\alpha _3} = {1 \over 8},{\alpha _4} = {1 \over 4} α0=0,α2=81,α3=81,α4=41,以及对应的子树。接下来剩余的工作就是利用独立的验证数据集计算每个子树的平方误差或者基尼指数,选择误差最小的那个子树作为最优的剪枝后的树。

五 总结

对3种决策树算法做一个简单对比总结:

之前我们已经知道了逻辑回归、SVM等多种分类算法,相比之下:

  • 决策树的思路简单易懂,浅层的树可解释性很好,并且易于可视化,这种特点使得其颇受一些传统行业的青睐;
  • 同时,决策树对数据分布没有假设,且可以处理离散型数据和连续型数据,而之前那几种分类器显然对连续型数据更友善;
  • 决策树可以直接实现多分类;
  • 对批量数据预测速度比较快,因为CART二叉树的结果,其预测的时间复杂度为 O ( l o g 2 N ) O(log_2N) O(log2N),其中 N N N为数据量。

决策树还是有其局限性及缺点的,包括:

  • 决策树每次用一个特征分裂,容易忽略特征间的相互关联,这个问题可以通过多变量决策树来优化;
  • 决策树容易发生过拟合,需要花很大功夫来调整其结构如剪枝等来控制;
  • 决策树容易因为样本的小的变化而过分改变其结构,使模型稳定性和抗震荡性差,这个问题可使用集成模型来优化;
  • 对缺失值的处理不够好等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修复数据库中的 “Access Denied: SUPER Privilege Required” 错误

当您使用数据库时,您可能会看到错误消息:“Access denied; you need (at least one of) the SUPER privilege(s) for this operation”。当您的数据库用户没有足够的权限来执行某些操作时,就会发生这种情况。 本文中,我们将查看导…

SQL手工注入漏洞测试(MongoDB数据库)靶场通关攻略

构造数据回显 });return ({title:1,content:2 成功回显1,2,接下来我们开始尝试查询数据库 });return({title:tojson(db),content:2 得到之后我们就可以继续查询他的表名了 });return({title:tojson(db.getCollectionNames()),content:2 最后我们就可以爆出他表里的数…

【EI会议截稿通知】第六届光电科学与材料学术会议 (ICOSM 2024)

第六届光电科学与材料学术会议 (ICOSM 2024) 2024 6th Conference on Optoelectronic Science and Materials 重要通知 重要通知:经组委会商议决定,第六届光电科学与材料学术会议 (ICOSM 2024) 将于2024年9月7日线上召开,具体议程及线上参…

20L水箱植保无人机技术详解

1. 性能与载重 高效作业能力 本款20L水箱植保无人机专为大面积农田作业设计,具备出色的性能与载重能力。其最大载重量可达20kg,不仅轻松搭载20L的水箱及药液,还能根据实际作业需求配置额外的传感器、摄像头等设备,实现多功能集成…

string类题目(上)

string类题目 题目来源(Leetcode) 题目一:仅仅反转字母 分析 这个反转的特点在于只反转字母,不反转特殊字符。 法一:如果我们让一个正向迭代器指向第一个字符,让一个反向迭代器指向最后一个字符&#xf…

如何使用C4D云渲染服务打开图片渲染器窗口?

C4D以其对第三方渲染器的广泛支持而闻名,能够创造出高质量的视觉作品。这些渲染效果涵盖了逼真的光照和阴影效果、真实的材质质感、精细入微的图像细节,以及令人印象深刻的快速渲染能力。C4D云渲染功能进一步增强了其性能,用户可以通过一个统…

Win10用户必备!三款超实用第三方录屏软件大推荐

大家好!今天我要和大家分享一下Win10的录屏操作以及使用体验,并且还会推荐几款好用的录屏工具,希望对大家有所帮助。 Win10录屏操作以及使用体验: Win10自带的录屏主要是为游戏录制而开发的,系统自带不需要额外下载客…

拍立淘API返回值:商品搜索与广告推广的完美结合

拍立淘(一种基于图像搜索的购物功能,常见于淘宝等电商平台)的API(应用程序接口)返回值在商品搜索与广告推广的结合中扮演了关键角色。这种结合不仅提升了用户体验,还通过精准推荐和广告展示增加了商家的曝光…

DDIA 分布式数据的分区与复制 - 基于 Redis、Kafka、Elasticsearch 的深入分析

引言 本文基于《Designing Data-Intensive Applications》一书(设计数据密集型应用,简称 DDIA),深入探讨了 Redis、Kafka 和 Elasticsearch 等常用组件的分区与复制机制。通过这些案例分析,我们可以更好地理解分布式系…

python-竞赛技巧(赛氪OJ)

[题目描述] 在 ACM 竞赛中,当遇到有两个队伍(人) 解出相同的题目数量的时候,我们需要通过他们解决问题的总时间进行排序。 一共有 N 条时间被以时( Hours ), 分( Minutes ),秒( Seconds )的形式记录。 你必…

​北斗终端:无人驾驶领域的导航新星

一、北斗终端在无人驾驶领域的应用 北斗终端,作为我国自主研发的北斗卫星导航系统的重要组成部分,其在无人驾驶领域中的应用正逐步显现其独特魅力。北斗系统的高精度、高可靠性和良好的抗干扰性能,为无人驾驶车辆提供了精确的定位和导航服务…

生信圆桌x 生信人论坛:生物信息学爱好者的交流与学习社区

介绍 生信人论坛是一个专为生物信息学(生信)领域的研究人员、学生和爱好者创建的在线社区。在这里,用户可以分享他们的研究经验、讨论最新的生信技术和工具,并向同行请教各种生信分析问题。生信人论坛不仅是一个知识分享的平台&a…

云朵备份:微信的云备份工具

什么是 云朵备份 ? 云朵备份 是一个微信云备份程序,使用云朵备份可以将微信数据备份到服务器,通过浏览器访问数据,你可以像正常使用微信一样浏览数据和搜索数据(参考微信网页版),除了不能发消息…

3d网格补洞算法

1.RBF径向基函数法 原文链接:https://blog.csdn.net/feengg/article/details/80849516 算法流程:   1.检测孔洞边界   三角网格由一系列顶点 V V V ,以及这些顶点所构成的三角面片 F F F所组成,由三角面片可以得到网格的边 E E E。通常一条边连接两个三角面片,这种边…

Spring横向渗透

这篇文章给师傅们分享下,前段时间的一个渗透测试的一个项目,开始也是先通过各种的手段和手法利用一些工具啊包括空间引擎等站点对该目标公司进行一个渗透测试。前面找的突破口很少,不太好搞,但是后面找到了spring全家桶的相关漏洞…

基于图神经网络的EEG分类

摘要 图神经网络(GNN)越来越多地用于情绪识别、运动想象以及神经疾病等任务的脑电信号(EEG)分类。人们已经提出了一系列方法来设计基于GNN的分类器。因此,有必要对这些方法进行系统回顾和分类。本文对已发表的文献进行了详尽地检索,并总结了几种用于比较…

IT统一运维平台案例

功能模块图 运维平台的架构图,划分为三个主要部分:统一运维门户、报告与决策中心、运维服务调度中心。以下是对每个部分的解析: 1. 统一运维门户 这是用户的统一入口,提供了一系列运维相关的服务和功能,包括&#xf…

艾体宝干货丨Redis与MongoDB的区别

Redis(Remote Dictionary Server,远程字典服务器)和 MongoDB 是两类知名的 NoSQL数据库,其以非结构化的方式存储数据。与传统关系数据库使用表格、行和列来组织数据不同,NoSQL数据库采用了不同的数据存储模型。Redis是…

go 系列实现websocket

一、简介 websocket是个二进制协议,需要先通过Http协议进行握手,从而协商完成从Http协议向websocket协议的转换。一旦握手结束,当前的TCP连接后续将采用二进制websocket协议进行双向双工交互,自此与Http协议无关。 二、websocket…

Windows10企业版找不到微软商店以及微软商店打不开问题解决

目录 找不到微软商店解决方案重置缓存安装微软商店 Microsoft Store 无法打开问题 找不到微软商店解决方案 重置缓存 打开设置->应用和功能 找到Microsoft Store(如果没有则需要手动安装),点击高级选项,选择重置,或者管理员下命令行执行 wsreset 安装微软商店 打开 http…