- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565163 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174772
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点, l' \& c" D& ? A- [$ F) r$ A
" s4 D% Z J3 b- _! k+ \5 A到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。4 |- O- I5 m3 u7 A7 R7 p9 l- T7 Z
: `# Y; @2 w1 ]
这就是无监督学习 。
/ Z; K( G/ G) b% |! p
, N4 {* a/ z! ]- D在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。. @; ~: D' Z5 X, ? S
! j7 M3 g% l" t3 ?+ O/ ^6 t在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。6 Q$ Z% u0 s2 a9 P( k$ T
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
2 @* {( }4 Y# h% }
* v9 Q% R- ` p. I% T, ~ R! l解决的问题7 |7 M! R! ~" t/ Y
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
: m( y0 H6 q' B4 C8 i2.如何在层次树中使用聚类算法。他带来的好处有哪些。
]6 l G/ k9 _; @ N3 n3.如何使用无监督学习,进行预处理,图像处理,分类。
& \! I! K, ^7 F0 i6 J1 v; U( [& S. L' ^' C1 }
1 理解无监督学习
3 E1 O) q3 }* U无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
$ H8 R4 q8 J7 e2 W. o无监督学习的应用包括一下应用:
2 }2 N1 F0 o5 \/ L' r1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
7 \& B* J5 Y# x6 `2 {# g, X7 T2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
" J9 f" A: Y) y6 c3 V; M3聚类分析:2 S& I" ^' Y3 U" R1 Q) s
尝试把数据分成相似元素组成的不同组。0 R( I$ Z, f( _9 c# d
1 w# K, v6 @: |* Q" {7 D
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。* i4 v8 [9 S# ?3 I
" G3 n& y" \4 K. ^) B8 V8 B7 K话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
! g% h( M E4 C" H2 O; I( w
* @5 z' `9 S1 Z# D& r2理解K-means聚类4 x; V- A$ a: }2 u( M1 h
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
% N# X$ R D2 O1 o2 b4 H9 F `- r1 t) ~! J* q9 U7 h. ^' m
它通过两个简单的假设来完成最佳聚类了。* p. E5 B! t" {9 c3 b# z( ~
1 每个聚类中心都是属于该类别的所有数据点的算术平均值
% e0 K; y& k, S4 ?7 S2 |% o+ ]2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
% O. I5 D# d7 x' A
& _8 \3 K6 ?7 L: S) T2.1 实现第一个kmeans例子* E. T) ~9 c% ^6 D4 b% z
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
' [" @5 I8 l- [6 f: j7 K C( ?
import matplotlib.pyplot as plt
2 f `0 n0 v" I% u' pimport pylab1 p! r/ X0 E! c9 j! H* G5 M* \
from sklearn.datasets._samples_generator import make_blobs
, e. L6 g t* E# V/ C% u! E$ n3 x& s% a. D2 w( U$ X
plt.style.use('ggplot')' G% g% T' x6 L( X
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)/ N; K& `* k' E
plt.scatter(x[:,0],x[:,1],s=100)
5 o$ j- v/ O& r( F. a7 Tpylab.show()4 I( Y# P3 l( P. l+ n. h5 ]
: k/ r9 D1 O8 F4 a i
0 n/ @, A3 F4 y" \$ `5 O
1
6 s2 r) G6 c# e( S4 [" S; h2 }% `; h2! ] Q, k3 K% k7 b( q
3+ Z, J3 L: x' d' r) `. h, J" g
4
( t- e/ v. z# ]4 B& S. C5
H' Q6 H6 D9 L: _7 L' k2 k8 h67 }& r3 w) H+ P3 m
71 \( u% D5 T5 N B' {$ c2 N, x
87 I9 w. L) e" Y B; @6 j
97 v. w; a S5 A. u/ u+ t8 n
10
5 h# o5 ~9 I% }! t! O. N
) S9 m- S% T: I! I& B* |) Q我们创建一个四个不同区域的聚类,centers=4,一共300节点。
9 Y0 v4 M- F0 W1 c如上程序生成图像所示结果。
" M/ J1 @& @; L' Q: i( @尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
- ]4 L u! x; N! s" x; e" ekmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。1 r/ r7 \: l3 F# R
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
! e, r$ L( t7 W. L, H. {& ?9 ?! w8 d# y* S$ l% u, G
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
0 X+ L/ V+ A# i6 A% r0 @4 Q& L/ w5 S) @ K3 ]0 \2 n) x5 X- b
% M( t! N- e8 Y" v2 T2 S; S
9 N; o8 {4 d: cimport matplotlib.pyplot as plt
1 N Z/ {3 f V- B8 p( n1 t9 }4 Rimport pylab8 v4 Y, ?4 i- @6 Z! T( z
from sklearn.datasets._samples_generator import make_blobs
5 j0 c, _" j. |) cimport cv2
4 M( L. N. N: L% L2 cimport numpy as np
9 n- c; v8 A# I" r7 m" I; } Y# ^4 j0 s5 g' w
plt.style.use('ggplot')
; l4 ]( @$ z+ Z) Y" {5 Yx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
6 m1 }1 @, Y* n% `9 _plt.scatter(x[:,0],x[:,1],s=100)
$ p0 Q0 Q: y( H" i* c/ }* X5 g* o% r% f. d @1 k
9 K k; ~7 C* r4 A+ A
criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
% d: {! Y1 O& l1 ~% d4 [) p; V+ c1 Pflags=cv2.KMEANS_RANDOM_CENTERS
! D) Q$ V4 i4 I N7 N$ x& L$ Lcompactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)5 s5 c0 G& Q1 x+ c/ V3 ^% D, s( ?4 E9 n
print(compactness)
/ J, H# f. o4 ]; W
, L% g) O$ y" t* ~' m' D, o) ^plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')8 r8 |, M. g9 y: E% U" q
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)) M8 h% E6 ^8 K4 v. d
" l) G4 N, G1 x4 U( Q8 m$ C5 m
pylab.show()
p! m1 G) K0 t3 Y0 P; C
( x9 I) e/ l" l, G+ f, E
1 A# ~3 i4 r- d9 I3 T
. h, s; O' g' W. ~
. X9 k6 k" T) g7 ?$ n9 g7 a- O) P" o) m9 K- x, `1 z% f
" X+ [) n; Q2 `* o c; P
3 Y; j. Z+ K' {& q @( ~, ~10 ~; i2 I& H# U7 f0 B! |+ W
2, ?* q0 I" l9 A8 C$ U
3 n0 a/ f( u( c
4! H {7 {5 a6 A2 R4 T: h
5& L+ B/ w* C; x" J! r( I
6% M; s* f$ ]- N2 A) F4 D
7
, c: N C F7 C/ n# f3 G' H8
1 b7 L$ T9 Z2 j! X/ P" A0 i9$ B V, m! `4 v6 ~; w
10" T$ A+ |* o/ }# w( ~5 \ }
11
, O6 b; A' u+ P# @9 ?# h12
0 Y( D' o# @: g. t; v" w( C- x2 I; f- D13& F* r" g& q% z8 ]; h
14. K p- ~0 ]8 k* t) K
15
1 P& C# C7 b, C16
2 C, |$ P3 c2 O% L17
k+ G! k+ v W3 }: T. I4 F& y/ U* R; ~18. R+ H8 m* A. ?: p E/ _' x1 n% o/ ^
19( k0 S2 i+ a* n6 R. ~' u
20
0 J* }& o, P$ O+ r219 g- d1 q! }0 | e; [
22) b8 v! ~; R2 ]5 C$ }* k: G
23$ r; I5 n6 Z1 b. B" F* {
24$ J; g( e- _3 h% s2 X& c# `
25! v% [# X/ f- z
26: T; z7 d( O5 `; g5 y5 w
上面程序结果可以产生图2的效果。
6 @0 N) K2 ?$ t
4 _) {( c! n, G3 H: C9 |print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
: a8 m( v( i( ]
1 O1 s% h* S, q. D- X& T当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。7 u5 [+ ^4 ?7 t8 q) P
' y' R$ ?! R7 h0 U0 P3理解kmeans
5 k7 z4 J! [2 ^/ a' ?kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:4 j# \( ?5 q5 @# T9 D
1.从一些随机的聚类中心开始
( U+ c! b, V' Y# r1 \( S& n7 e2.一种重复直到收敛
* ?7 o. C) G2 Y5 i; b1 }. V3 r; V0 M9 m
期望步骤:把所有的数据点分配到离他们最近的聚类中心。
I/ A) `# h" C7 ~6 v最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
$ H3 U' Z+ e6 F: M" ^
" T$ K8 B2 d5 j" l" h, k* F4 _它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。0 u4 {6 I- L+ i3 H% D
————————————————
* B1 a4 J, }/ P# P版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
* m- v. l5 R% C原文链接:https://blog.csdn.net/qq_43158059/article/details/1267890007 _6 b2 G6 O& H
% Z* q2 h) j. U: B8 ] M z0 d
* N% L8 ?1 P w1 b( }. D% w |
zan
|