- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566251 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175098
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点/ B* [1 k+ ]; s8 z6 c. a$ M. D
" H9 F9 {7 S7 v5 U7 y7 W7 z4 G到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。) F- l; U7 U3 p* B' R$ E( N/ T
9 K P4 u6 v5 z5 p5 B8 S( H
这就是无监督学习 。 [1 T4 b+ e% p, L4 r7 ^
( }2 U$ |# R' G
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
4 p/ W( b3 m! W; X7 R% o* G' d; c c
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
6 \% t8 H# Z+ M/ `( r# {作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。4 O3 c' [+ e& e
9 i2 O# I1 a3 z( n3 f2 c \
解决的问题
4 t9 B- N* H4 R9 C$ U, X1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。/ I7 ^1 H( e1 Z2 a; c
2.如何在层次树中使用聚类算法。他带来的好处有哪些。
1 V0 d! S( a4 D, y- I) y( v: T* C* M3.如何使用无监督学习,进行预处理,图像处理,分类。
, ~0 T, ~; G4 ^/ q5 c
$ ^% P) ]) E0 u/ C+ {1 理解无监督学习
8 h! {+ U, x, B% u0 l0 r2 e; y1 o无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
+ d6 T5 u- t' A; I0 r9 s无监督学习的应用包括一下应用:
' o- J9 J h# g# R1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。' C( v+ x' F \# e, s5 q
2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。4 u2 Q4 c1 n9 A; h# j
3聚类分析:5 n( r! o; r) u) C2 b0 `. W
尝试把数据分成相似元素组成的不同组。
! |: o% Y2 s9 C2 J! s( h2 c( @5 ]. x8 g
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
# `, s+ s/ B g$ U
5 {2 K0 P. L! r) y& G话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
3 w1 ^$ ~/ \, G" g ?- E( Q& t- D9 i' M0 Q
2理解K-means聚类4 c3 t% s+ G6 w
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。7 u4 [. n' D* B! ^
0 B, C( V, F9 h' m
它通过两个简单的假设来完成最佳聚类了。; `2 g9 X" y/ C! X8 z
1 每个聚类中心都是属于该类别的所有数据点的算术平均值$ y$ L1 Q7 H+ t# L4 e$ q
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。" d& a m8 T7 h
4 ]2 t8 W: C2 l8 ~0 Q) Y
2.1 实现第一个kmeans例子1 z% j4 S7 U5 r9 B+ V; t$ u0 l
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
/ ~: [; }+ d5 @0 T3 B0 k9 Y$ v+ ?$ g. s
import matplotlib.pyplot as plt* z; r. N4 ~+ v/ {- R4 e
import pylab
4 M% i0 X! f9 B# L' Xfrom sklearn.datasets._samples_generator import make_blobs
! G8 d* v# C" T' `" a+ K% }- p" U, i
plt.style.use('ggplot')
+ A; X2 s; w0 S. zx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)( H) K1 z* N# B- x$ y5 d9 e8 V( x+ [
plt.scatter(x[:,0],x[:,1],s=100)
+ }4 p" E' I4 I/ B: Dpylab.show()
$ N S, o3 v6 ]- `; C# q
. Q- U( o1 y" V/ M, X1 K) I3 J
) k* {% Y" t0 @3 ^; D6 K' r1
! c* b, N: U" T0 x& o2
- ?* v) I. A# N$ [3; x6 k# T8 X2 [7 O' }
4
4 g9 Z# ?* U3 R9 z0 }5
* a- N) A7 G" L b( l: f6
2 x8 C1 i7 t9 q, P- G7
6 u1 w/ l$ P# _! q7 [2 n, ]" }, z88 E! P( [: O8 b& P) w8 z# z
9" b; l$ O, W; K4 G( n0 U) t2 q
10
% P! j$ u6 q3 p/ T; Z% B3 R2 U. m
5 O$ M0 R0 `4 ?- K5 ?4 J我们创建一个四个不同区域的聚类,centers=4,一共300节点。
; L: A h1 a/ u. e如上程序生成图像所示结果。5 U( p, A6 u3 }9 J6 `
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
0 ^7 L3 h' Z' p7 Lkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。& r* D1 i6 I$ A
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。9 v" i' h% j- {+ _9 A3 `' ]% W5 d
/ i+ q" e* _. f8 }我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。5 b9 X' ?: F, y5 d
* Z7 w3 U9 a U ~( B0 _% M- J
7 I; k6 K% H& s* |
' i, F" {/ o% a: m5 ]import matplotlib.pyplot as plt
" B; N, I$ ]- w/ c+ _import pylab
4 k) `5 W3 e- b" qfrom sklearn.datasets._samples_generator import make_blobs
% r" t6 {* i% o! b; s0 g9 S* u2 Ximport cv2
* N4 O5 X1 K! j0 t, x1 X9 Dimport numpy as np: L d% X; \0 ^" u5 p( N# _
/ e: z0 S5 F/ H5 u$ B. a/ g; X: `, u3 eplt.style.use('ggplot')
; X5 o2 r' z. n/ \9 B1 _x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)" I9 f' T+ E3 p \
plt.scatter(x[:,0],x[:,1],s=100)- z/ Z" ^/ S! S, p5 b* _
0 ?$ X4 d I/ Y2 _0 _/ R7 ^5 l4 [
0 i1 u- h8 B# o( K6 mcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)* L9 X, w; D7 E% o% ]0 P+ K, E
flags=cv2.KMEANS_RANDOM_CENTERS- P/ Z! ?6 S6 T& A! ~! Z% w1 g: j
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)9 c0 D: L; `) x
print(compactness)
8 L# \/ l; {- l) \
3 @0 ~5 {- P. @plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
1 v" _3 a; p# B4 v" n$ Nplt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)) F( W5 O% G; }' e% c- K7 m) J
" f G0 K6 m4 V% `% O( Npylab.show()
9 a! d# j' P+ W7 F/ L. d
) i5 J. C$ T5 N9 e5 [
) x% p, D5 ~& E; b- {
& ^5 v3 j3 ?- g/ Z$ w: ]% ~2 R8 |. S( M2 R# ]" h
0 l; w9 R6 f/ E. c9 I" B F- A3 k/ [9 T
* w2 q7 [& M0 o) d" ?# W+ l: H
1
: {0 [( L" n3 ^2! l% p8 a _9 d" N) w. s, H
3& ?, t% D/ j, Y9 n9 }
4
1 ]# I* q4 h+ w54 i: ?; ^9 ~; u8 t8 Z
6. L! ^% q( O. F" ~! O
7
4 D, O, N) B6 [$ T" s3 ^- e8& R+ x6 k/ u# L
9. d8 O& k2 Q6 V W9 w
10* M& K" ?* G1 h+ E3 k7 ~
11; {5 Y4 I" }' e8 O, ~* X
12! }$ G0 {( B* B( O
13# V1 m. }" X1 Z2 K- s) r
14
% V; y) O& {7 x X' k8 ]+ e% o4 B15# _( Z" o. ? W( b6 P) ?, p
16
$ O- C$ V# m$ h v" G6 e17( s* M; @! K0 s, J5 g' O
18' M9 T! y# w P
19: x- z0 P, |2 E0 s% T
20! L6 X8 Y. N6 j* s
216 V5 H- a+ W6 x) m& f# R3 F+ J
22
& k2 c% y7 ^' x23
9 Z# U4 k) X& S: n# d/ T; ~24/ L. L$ @" f; v: b: [
25
1 j& N, f0 S4 P, W3 u26
2 }1 u0 _* a1 `/ p3 N上面程序结果可以产生图2的效果。
2 q7 h7 p8 m- V6 j, R8 W3 T$ V( x- z1 i j" |. ?& d6 Q
print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
/ n" s% b4 L- \( Y; p. P% t7 ^! v6 q" S& w4 N5 e7 D- N
当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。$ {. T3 M' `2 u! M: q( d
" H# e) k$ } ?# [! z$ l6 _
3理解kmeans, F4 f2 d1 U& S+ b9 U* q
kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:/ K2 o1 a* g8 ?, C! k5 f, Y* l
1.从一些随机的聚类中心开始! B( r3 K0 H$ {# r7 p9 P. s( q. I
2.一种重复直到收敛
+ k: N, w6 J0 V9 x# f' V9 j1 R Z: \. q+ a
期望步骤:把所有的数据点分配到离他们最近的聚类中心。# A% k! y# n1 m" t
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。% }8 P9 q. s' J$ A
$ T9 \; F* r! w$ T q8 p5 H它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。1 T. r8 r# r6 X |; p* b
————————————————
2 }4 L, @3 \% d2 b9 M* `9 {1 o版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
" p8 g& G% N8 U/ \7 t; C. l" P+ Y原文链接:https://blog.csdn.net/qq_43158059/article/details/1267890001 L3 {4 l! p/ X7 S
, U- K3 \: ]4 C1 m+ z, Y4 b G3 X, n2 b7 k' H" n; F
|
zan
|