|
介绍:/ `4 [! e+ S7 I9 t3 P+ |
" ~ x' w. U2 z8 T" z, {- C+ v7 Q+ p. z 《机器学习实战》没有从理论角度来揭示机器学习算法背后的数学原理,而是通过“原理简述+问题实例+实际代码+运行效果”来介绍每一个算法。学习计算机的人都知道,计算机是一门实践学科,没有真正实现运行,很难真正理解算法的精髓。这本书的好处就是边学边用,非常适合于急需迈进机器学习领域的人员学习。实际上,即使对于那些对机器学习有所了解的人来说,通过代码实现也能进一步加深对机器学习算法的理解。
- Y+ H6 f6 {5 v7 B0 c' `! C 《机器学习实战》的代码采用Python语言编写。Python代码简单优雅、易于上手,科学计算软件包众多,已经成为不少大学和研究机构进行计算机教学和科学计算的语言。相信Python编写的机器学习代码也能让读者尽快领略到这门学科的精妙之处。
+ s9 `) y2 z. ^2 }
& n9 ]( u' c( w8 d* V, R/ f3 f" q
p4 [$ s5 ]3 V* U$ a" Q0 y e. R% w9 V5 ?, B) Y, e; h
* J9 w5 \9 k+ p% u# o
& S0 Q3 X: t1 R) A5 I
1 S ?6 k6 K& L' e内容简介:
/ e! Q9 m/ x% ]( i( b4 N ]
1 `% o- X) O9 `5 Z! K5 ^
8 V/ m! K- {# A 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存、谋发展的决定性手段,这使得这一过去为分析师和数学家所专属的研究领域越来越为人们所瞩目。
) c) M# p \' s% x
! y8 Q! W0 y. N- `1 S# G" J, I6 }* q" d! x1 U0 ?% w7 m
, y4 ^ \( i: g4 `# V 《机器学习实战》主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍了多种经典的监督学习算法,如k近邻算法、朴素贝叶斯算法、Logistic回归算法、支持向量机、AdaBoost集成方法、基于树的回归算法和分类回归树(CART)算法等。第三部分则重点介绍无监督学习及其一些主要算法:k均值聚类算法、Apriori算法、FP-Growth算法。第四部分介绍了机器学习算法的一些附属工具。
; \( D$ J) \* }% S5 I4 c( s% X
& B, u$ B% K% O/ ^ }; a N
* N. O" u# X/ V) W 《机器学习实战》通过精心编排的实例,切入日常工作任务,摒弃学术化语言,利用高效的可复用Python代码来阐释如何处理统计数据,进行数据分析及可视化。通过各种实例,读者可从中学会机器学习的核心算法,并能将其运用于一些策略性任务中,如分类、预测、推荐。另外,还可用它们来实现一些更高级的功能,如汇总和简化等。
9 |* v& O: D' O6 T' v
6 `- {- f* m: C3 L. D: R8 l. \
; _# |! \, _* r! Q4 K+ z作者简介:
9 _+ |. C/ w+ t8 [5 W/ T# E/ m6 L( g0 R4 i* y1 Z4 e. O
$ X4 z: y. g9 _8 x/ k
拥有电气工程学士和硕士学位,他曾经在美国加州和中国的英特尔公司工作7年。Peter拥有5项美国专利,在三种学术期刊上发表过文章。他现在是Zillabyte公司的首席科学家,在加入该公司之前,他曾担任2年的机器学习软件顾问。Peter在业余时间还参加编程竞赛和建造3D打印机。* t# N, K9 B* \- d& I' p% t2 F
# r4 L0 ?; U( j: H: j! X6 L. T* `6 u
经典点评:1 B# E( h2 U( m- O/ q
* P. _! F6 n8 {7 A
$ _6 I4 g! a' K2 Y* ?* ^ “易学易懂,用处很大。” ' |6 l$ y+ T/ Z
——Alexandre Alves,Oracle CEP的架构师
. f- @3 A! S. ]8 B- F( k& V7 Z& X' @6 i
7 j$ j8 l5 G ]0 q/ p7 e% y “精心织构的代码完美地诠释出机器学习的核心要义。” 9 e5 i# I( o5 U9 r
——Patrick Toohey,Mettler-Toledo Hi-Speed软件工程师
1 i, Q9 K* P4 `# e' N* z
) j1 U- d* r& u4 K; P6 T# h V
3 J8 W$ R4 S. L2 e( ^1 K9 I+ V2 K “实例很棒!可用于任何领域!” . O, n! N7 E" W8 t2 @* x( Q, `
——John Griffin,Hibernate Search in Action一书的合作者 6 Z8 W8 @( L% d3 L4 t
' y! x3 d4 [# @4 v+ k3 H6 W3 \
+ f, {% p9 W/ y, i. Q “叙述循序渐进,巧妙地阐述了算法之间的差异。”
4 U8 D! T4 z6 m ——Stephen McKamey,Isomer Innovations技术实践总监# M: H' ?2 Z4 n/ w- Z6 c
% e3 L# Z# a7 r' Z7 R; ?
# l9 |% a# D r, f书籍目录:
, h; {8 s, D. r R4 g9 e
, i9 q$ k' O/ F- _, X9 V
/ ~, K) t1 k7 s: v( T第一部分 分类
* I6 S- {$ `9 Y( t/ U1 `3 e. I! \第1章 机器学习基础 $ H1 _5 C( Z5 ?3 |; C2 s9 n8 d
1.1 何谓机器学习 - |- u( w2 W$ \9 a' x1 \ Q
1.1.1 传感器和海量数据 ( s/ p8 Y& s5 o. C
1.1.2 机器学习非常重要 ' Y2 U6 b7 H4 R) o9 t
1.2 关键术语 4 \/ q, z$ I) `( ^- c
1.3 机器学习的主要任务 ' F! y$ @' ^4 I/ Y0 t
1.4 如何选择合适的算法 ( x/ N2 N; ?" d- n/ }8 B
1.5 开发机器学习应用程序的步骤 7 T- E0 i& O: `, o9 ]2 N3 V c
1.6 Python语言的优势 1 d. x; ^2 s2 r
1.6.1 可执行伪代码
: f+ ?! w8 k4 Z8 \3 p1 D1 t1.6.2 Python比较流行
n0 ?6 W. S( J# P7 i+ I- Y1.6.3 Python语言的特色 + g% ?# Q" j n; i
1.6.4 Python语言的缺点 % }& }6 G- N* J" `. U( x9 ~
1.7 NumPy函数库基础
' V9 a% p4 F, j o1.8 本章小结 + P# @/ ?8 ?2 p& w1 o; g, J
第2章 k-近邻算法 7 e- X) r1 l1 R
2.1 k-近邻算法概述 + `! h9 ?) t& Y& l* s
2.1.1 准备:使用Python导入数据 " B7 l3 B* H# S: c/ {- E5 J
2.1.2 从文本文件中解析数据 2 L6 \0 X. {$ F* j
2.1.3 如何测试分类器 6 B6 {; j m- t; H
2.2 示例:使用k-近邻算法改进约会网站的配对效果
7 g) ~( N2 K& e7 b2.2.1 准备数据:从文本文件中解析数据
u4 U: }3 M; ~# z0 f7 e" w L6 ~2.2.2 分析数据:使用Matplotlib创建散点图
( I3 [1 g7 w9 n& b: e2.2.3 准备数据:归一化数值
" k& ^$ A; L1 i2.2.4 测试算法:作为完整程序验证分类器
6 ]. ]6 M3 W' [+ _. R8 P9 G: X8 i' K4 l2.2.5 使用算法:构建完整可用系统 4 G" Y' F, S+ e* Q3 f2 f. s' p
2.3 示例:手写识别系统
& e/ t! ~$ k6 X b1 D- o; v2.3.1 准备数据:将图像转换为测试向量 2 Y$ S. V8 \: {, k: a* f I8 q
2.3.2 测试算法:使用k-近邻算法识别手写数字 % |* y7 X5 T L
2.4 本章小结 / d4 R4 k* I- I0 a- f: R8 D
第3章 决策树
$ F+ w* Y! n' x' G$ f! J3.1 决策树的构造
- z$ X2 V) r, p: B: ]. X5 s+ {5 z3.1.1 信息增益 5 f8 s7 C2 e( D- F
3.1.2 划分数据集 3 Y, e. D: v/ u: j& D
3.1.3 递归构建决策树
+ F" M/ }( S, x) H' X; l1 Q# B- N3.2 在Python中使用Matplotlib注解绘制树形图 _- E) N+ C1 t& z' {( D0 \9 G
3.2.1 Matplotlib注解
/ p2 s( n4 c8 R6 C: ?3.2.2 构造注解树 : x2 G0 n9 R+ y% G$ e
3.3 测试和存储分类器 - {6 W/ s/ M9 `/ D& X
3.3.1 测试算法:使用决策树执行分类
1 v1 {% Y9 P i% F/ f3.3.2 使用算法:决策树的存储
F0 m# o5 @3 Q' b3.4 示例:使用决策树预测隐形眼镜类型 9 G0 }8 Z6 b% J5 J# @' o
3.5 本章小结 ( q7 |" m4 a/ e7 u2 A, J7 G
第4章 基于概率论的分类方法:朴素贝叶斯
1 x; D. p t- w) t4.1 基于贝叶斯决策理论的分类方法
h, g- u: q) v$ P! C2 e( E. E4 C4.2 条件概率 8 O; D8 D: _# ?- c
4.3 使用条件概率来分类 1 z' n; }3 r9 r
4.4 使用朴素贝叶斯进行文档分类 7 V- ]9 A7 C0 `
4.5 使用Python进行文本分类 ) T" L ^4 Z: k2 s6 {
4.5.1 准备数据:从文本中构建词向量 ! |8 S0 R, E8 {0 H4 {
4.5.2 训练算法:从词向量计算概率
: h% r' Y9 Q7 `( r9 {4.5.3 测试算法:根据现实情况修改分类器 " _$ h6 V/ B0 M* ?$ p: r% ^. d! Y
4.5.4 准备数据:文档词袋模型 2 L) z/ S' u) W
4.6 示例:使用朴素贝叶斯过滤垃圾邮件
. V; v9 V" U& L, l5 K# R, W, f4.6.1 准备数据:切分文本
& k4 j) x' O9 g/ A& q4.6.2 测试算法:使用朴素贝叶斯进行交叉验证
8 x& {6 a5 x& S7 ^' C; Q- }4.7 示例:使用朴素贝叶斯分类器从个人广告中获取区域倾向
- R, Z) }: d( D2 K8 k, C% u( U! D4.7.1 收集数据:导入RSS源 ! v, b* E' X5 O1 l
4.7.2 分析数据:显示地域相关的用词
/ P0 z; p* O( o4.8 本章小结
2 a6 M3 H$ l% r( P7 j! ]第5章 Logistic回归 " O( v; ?& S C# h5 h2 D/ o. ]* D
5.1 基于Logistic回归和Sigmoid函数的分类
! X: h6 \# N. t* e$ {6 b$ J5.2 基于最优化方法的最佳回归系数确定 % F$ P' c! I; k; z: O' b
5.2.1 梯度上升法
! i* E$ @( B; E+ f0 @5.2.2 训练算法:使用梯度上升找到最佳参数
: W. [: g6 S) G% m6 x! n5.2.3 分析数据:画出决策边界 2 J0 Z( G& K/ V+ L* p- |
5.2.4 训练算法:随机梯度上升
; s" K. D7 ^9 _5.3 示例:从疝气病症预测病马的死亡率 0 ? a. h! y/ y$ c& h7 {
5.3.1 准备数据:处理数据中的缺失值
- P+ r. R: {. V1 ^( u5.3.2 测试算法:用Logistic回归进行分类
% x& o5 D4 Y2 d g1 W o$ s5.4 本章小结 . N9 D" N/ P" F W
第6章 支持向量机 3 T# D6 T1 L! h1 y$ h* T5 B
6.1 基于最大间隔分隔数据
, w m6 v- T' a4 T9 H6.2 寻找最大间隔 3 Q$ d' x: H2 ]. h) h# X
6.2.1 分类器求解的优化问题
: d8 m/ L7 W: H9 b6.2.2 SVM应用的一般框架 ' R- p$ ^/ X" J8 L3 @
6.3 SMO高效优化算法
9 u) s. I6 j, c& q1 p* {6.3.1 Platt的SMO算法
2 r% ]0 W3 }2 Y7 _; T; M1 {! |6.3.2 应用简化版SMO算法处理小规模数据集 / y5 }& X" E }
6.4 利用完整Platt SMO算法加速优化 7 u& {. r5 R! z) P; I* ~
6.5 在复杂数据上应用核函数 ) S) r( }& x, e4 E7 \+ g
6.5.1 利用核函数将数据映射到高维空间 7 u6 r' u) J6 u5 u* g
6.5.2 径向基核函数
8 v. I/ r( n3 f5 Y8 K6.5.3 在测试中使用核函数 . X1 W: |) N; p$ F
6.6 示例:手写识别问题回顾
+ d) `( E- Z; \; |8 Q! Q7 h& v! Q6.7 本章小结 ; w$ Y$ e6 W4 ] f
第7章 利用AdaBoost元算法提高分类 i; M9 u7 u1 {% I; N6 W
性能 ! _; R: l+ b- ?* p
7.1 基于数据集多重抽样的分类器
, f5 E6 c) b5 h' G& ~; o7.1.1 bagging:基于数据随机重抽样的分类器构建方法
) \7 A5 `3 N- }) I5 s# e! ?3 X7.1.2 boosting * u7 Z- _- G; }3 u7 z/ m, f
7.2 训练算法:基于错误提升分类器的性能
Z# c3 s. a2 \) n+ |5 C7.3 基于单层决策树构建弱分类器
+ R7 p; J) R* u3 x7.4 完整AdaBoost算法的实现 3 n6 d2 U) l$ p4 |( i& _& k
7.5 测试算法:基于AdaBoost的分类 4 p# P, a1 `! s# @# w# H9 k
7.6 示例:在一个难数据集上应用AdaBoost + v2 J: o, R8 K- B" i, L, Z
7.7 非均衡分类问题 4 K- f* I- y/ b0 ^4 h: _' _$ j% M
7.7.1 其他分类性能度量指标:正确率、召回率及ROC曲线 : K: `! ^( C, P4 t6 U D
7.7.2 基于代价函数的分类器决策控制
# ^; s! X& l; i* |7.7.3 处理非均衡问题的数据抽样方法 ! F! y3 Y) `/ \
7.8 本章小结 ) |1 F: s) N. B
第二部分 利用回归预测数值型数据 3 U! L% E1 |5 L" R F
第8章 预测数值型数据:回归
+ H1 F& K- ]% Q' K: o- |1 r8.1 用线性回归找到最佳拟合直线
/ J/ Z# w2 g2 c% [8.2 局部加权线性回归
0 d! c. x5 D) l8.3 示例:预测鲍鱼的年龄
8 ^1 I+ s# s; B* l8 [, r8.4 缩减系数来“理解”数据 ; {. K+ @4 D) t$ k* ^0 q
8.4.1 岭回归 * k# L& Q- ~4 @
8.4.2 lasso % q9 E% ]2 s) n: y# F7 {9 F5 H& v
8.4.3 前向逐步回归
& ^% V8 u3 W) w# G8 x1 g/ ?, h8.5 权衡偏差与方差 ( j2 d' o4 `$ s) y! E
8.6 示例:预测乐高玩具套装的价格 $ _9 S" p4 e6 U& X( y) }+ R# r
8.6.1 收集数据:使用Google购物的API
* F( U4 n8 Q3 M% s% G, k# ]+ V( m/ W8.6.2 训练算法:建立模型 : q3 |/ q7 [" x2 \& Z* W; {+ |; B
8.7 本章小结
" T% A9 g8 ?6 `3 R. V4 y, g9 k第9章 树回归
) F( W8 h- U+ M7 o: \! ]9.1 复杂数据的局部性建模 ; M3 N; J% v8 q
9.2 连续和离散型特征的树的构建 $ l9 H6 m. t: `" ?4 }) S1 z' K9 K
9.3 将CART算法用于回归
$ }" ^7 f4 b) @5 a$ p, s' q( m9.3.1 构建树 ! J* r5 r8 x+ a; C4 r
9.3.2 运行代码
8 Z% V3 m2 ]! J$ @9.4 树剪枝 ( s2 r1 l- m, z* t/ k) C% f
9.4.1 预剪枝 - I* Q7 {8 }' h1 C* `% B: J3 Z
9.4.2 后剪枝 5 J' M4 X }: B K$ S0 O" L
9.5 模型树 / `! S+ w0 I3 Q' I
9.6 示例:树回归与标准回归的比较
9 m# i* m2 s9 S+ X9.7 使用Python的Tkinter库创建GUI
% s) X h. c& P0 T" l$ l$ H2 {9.7.1 用Tkinter创建GUI $ [, V; ~1 P2 K' t1 G5 F
9.7.2 集成Matplotlib和Tkinter
# R4 V, b$ V- ?% u% e/ R2 H4 [) B9.8 本章小结
% ?: O* `8 i7 c第三部分 无监督学习 ; z" ^% q6 _9 h0 [
第10章 利用K-均值聚类算法对未标注数据分组 " B" g y! _ {: }7 U; G5 R
10.1 K-均值聚类算法 + n, P2 p" x$ n* ^" B9 O# G9 f! c
10.2 使用后处理来提高聚类性能 a& ]8 x' @5 D
10.3 二分K-均值算法
9 ~: c% y" M9 L [' Z, p/ A10.4 示例:对地图上的点进行聚类
2 z+ }2 C+ e; n e4 m$ F10.4.1 Yahoo! PlaceFinder API # o1 W1 \- A4 {7 T7 D
10.4.2 对地理坐标进行聚类
% _+ r" @% r- m, j) g: |10.5 本章小结
* C) E V* j) s( s第11章 使用Apriori算法进行关联分析
; Z5 |8 M( R2 x3 n11.1 关联分析
: a+ I; k( z# ^11.2 Apriori原理 H2 b* X6 L S0 X1 Y) d
11.3 使用Apriori算法来发现频繁集
0 L6 }3 U5 X; c1 s11.3.1 生成候选项集 ' p( Z i! S. k# T% ]! t1 V
11.3.2 组织完整的Apriori算法
# s0 D9 S7 o" V5 \11.4 从频繁项集中挖掘关联规则
% ^6 Y0 Y4 ?: A0 O/ ?11.5 示例:发现国会投票中的模式
) K* c j6 d7 D) q11.5.1 收集数据:构建美国国会投票记录的事务数据集 / x+ v, ]) h$ c# g0 }7 s
11.5.2 测试算法:基于美国国会投票记录挖掘关联规则
, p5 M$ E" h8 N, V. S& U; N11.6 示例:发现毒蘑菇的相似特征
4 L, |2 F; u' z) d11.7 本章小结
5 `$ v% g$ c/ z$ H M2 Q; W9 P第12章 使用FP-growth算法来高效发现频繁项集 , \, f) r- T* M# N" m9 G8 T5 Z
12.1 FP树:用于编码数据集的有效方式
* n% ~, b0 `2 {0 ^4 m' l& w V# y12.2 构建FP树 & s8 ^$ N. P; D' w0 Y
12.2.1 创建FP树的数据结构 m( @. w3 B2 D' s* M6 c6 `
12.2.2 构建FP树 / |& q f Z( ]4 v/ v8 Z
12.3 从一棵FP树中挖掘频繁项集
8 X% W# r3 g% F- l. g& h+ \. j& {12.3.1 抽取条件模式基 3 M* c$ ~- ~! ?3 x" s3 w1 u
12.3.2 创建条件FP树 . F5 x* n0 Y. a& \& a- ~( a6 L
12.4 示例:在Twitter源中发现一些共现词
2 K3 p1 p- \1 H( u0 N3 ?12.5 示例:从新闻网站点击流中挖掘
# v3 c4 P( D0 d/ j12.6 本章小结 & x( |- W" m) W' h
第四部分 其他工具
! C! F6 L+ {9 m2 _8 y+ i8 f第13章 利用PCA来简化数据
* V, D7 j, a+ P13.1 降维技术
. i& U: w, w3 k4 s( g13.2 PCA 0 e7 L2 z G3 |# P
13.2.1 移动坐标轴
* d( P; ]0 U4 p5 _% }. a13.2.2 在NumPy中实现PCA
0 l7 x8 X, {( {9 ~13.3 示例:利用PCA对半导体制造数据降维 7 H( k- o; H& {+ z) P
13.4 本章小结 2 `& M- n( q) ~/ @9 \
第14章 利用SVD简化数据
/ v6 r- E; a. a5 W+ ~# D14.1 SVD的应用
. j+ N1 n, I" C5 x14.1.1 隐性语义索引
5 N! z6 H: R( L2 g14.1.2 推荐系统 ; t6 C( A% A& q& _8 @, K9 L W j! ^
14.2 矩阵分解
1 a8 g/ l% w% c0 F# F# q9 k$ c14.3 利用Python实现SVD * B U3 g& u4 o% H g- N
14.4 基于协同过滤的推荐引擎 2 s" w& A" d7 \6 O3 Y- k* w
14.4.1 相似度计算 1 g! t. X+ s; x3 ~" r4 k
14.4.2 基于物品的相似度还是基于用户的相似度? Q9 x$ }. l: Y& _" T5 i
14.4.3 推荐引擎的评价
' S# t0 i, v) @" X: W14.5 示例:餐馆菜肴推荐引擎 8 d, E i' R* f8 \0 B# l
14.5.1 推荐未尝过的菜肴 / x5 _; O4 Z5 \3 [" w7 m
14.5.2 利用SVD提高推荐的效果 ; b* l1 M2 a+ ^3 V O$ W
14.5.3 构建推荐引擎面临的挑战
5 \7 F8 V) u2 |4 u8 b, k5 W4 p" a% D14.6 基于SVD的图像压缩 . G2 m: ~' a3 r' Y% @7 ~% Q4 M
14.7 本章小结
u! h/ v; \: a" a1 P- `: N/ F7 j! W第15章 大数据与MapReduce 2 M& ~, g; Z3 J9 E% M0 A
15.1 MapReduce:分布式计算的框架 3 F1 B( R; s) ^+ n" c: {# N( Q( n& f
15.2 Hadoop流 9 P# M/ w" P0 H4 {: S) f
15.2.1 分布式计算均值和方差的mapper
4 t8 y& d F2 Z P; g% v15.2.2 分布式计算均值和方差的reducer
) k/ Q1 B1 v6 k% e8 C) A15.3 在Amazon网络服务上运行Hadoop程序 + D) h% L) i5 { g' j3 m; x) e) {
15.3.1 AWS上的可用服务
) r# ?6 K8 L5 W: e15.3.2 开启Amazon网络服务之旅
: U$ Z' g! u. j0 [+ v) X9 H& _7 K4 K15.3.3 在EMR上运行Hadoop作业 ! A( Y2 Q0 k/ p' S' h
15.4 MapReduce上的机器学习 + C6 `: P$ g% ^# i) q. M# A* ~
15.5 在Python中使用mrjob来自动化MapReduce
( W! Q; l2 i) W4 i# d4 ~% c15.5.1 mrjob与EMR的无缝集成
4 H* P7 C' X# k4 x& \9 I |: F15.5.2 mrjob的一个MapReduce脚本剖析
: I k% k; O( U15.6 示例:分布式SVM的Pegasos算法
0 A; ]4 D4 d% J* D4 C15.6.1 Pegasos算法
" g5 R+ X, @0 P' H( z+ m5 w/ Q15.6.2 训练算法:用mrjob实现MapReduce版本的SVM
+ W. {. D' W( f& x9 v. @; N15.7 你真的需要MapReduce吗?
9 X& h$ y' v) U! X' E15.8 本章小结 # ]0 X+ [# o$ G* T* K& t4 k$ x
附录A Python入门 % t* w( a0 J: P- g2 D. [
附录B 线性代数 ! J, c% {% o7 j( u! u8 k5 F7 p% _* O
附录C 概率论复习 # O* g& R; g( v' u) z% i9 B
附录D 资源
5 q) U {. n+ r# X4 |. `0 N
~- H2 [" F9 P% a; `
. [0 F8 E/ D* ~3 A, n- z7 Z" m, U+ z
* N* q# o) v0 B9 N1 b2 b; }# a0 S
6 V; f& c$ w+ t! h8 S) M3 K0 V资源下载地址和密码(百度云盘): [/hide] 百度网盘信息回帖可见
' Q2 r3 |' n& X" q& m3 [
3 U+ k; a9 o3 t5 y
! W1 h! r: v4 g- S; F5 X1 o- e8 M$ I
5 l K7 D: K: U9 a- v( t本资源由Java自学网收集整理【www.javazx.com】 |
|