- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563322 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174219
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
, r: g* o& O$ C* ~# V4 D
, m9 z, P' Z/ O: [2 y4 J. Z到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。6 G5 d S( U0 T+ b0 s: S
2 W4 Q' i1 }9 |) d& _2 e这就是无监督学习 。& z# o* n$ L c+ h$ e) _& p
! P! g- j5 H2 J6 j+ n3 G在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。5 o6 X5 K: }' ^2 Z
; w' q$ G# W& i s在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
Y! y5 q4 a# e( k6 n! g1 v% R作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。1 {. [& }$ Z- c1 ?8 W
6 }/ x3 R+ x+ K) G. x/ c解决的问题
; A7 u1 w3 K/ d' K1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。/ x( |) y( K; j/ r; z" R
2.如何在层次树中使用聚类算法。他带来的好处有哪些。
6 o' n: m- ?! f1 R N3.如何使用无监督学习,进行预处理,图像处理,分类。
`" h! x' t3 X3 t: L! F3 c" \4 U2 c0 Y# W+ Q/ Q$ k
1 理解无监督学习8 P. e: t5 `9 n% q& q/ K
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
6 a A. x2 `, t% K) O, ^/ g无监督学习的应用包括一下应用:
+ D. U% N4 @% X m+ w1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
' F# w4 `# Q \0 I/ C% a6 o2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。6 `' o0 N4 c, |. |! K8 e5 w
3聚类分析:4 k1 Q' f# f$ J* ~4 y0 i
尝试把数据分成相似元素组成的不同组。( }4 q& m9 x4 A1 U$ A0 u: h% f D
9 W$ F( b) I! P$ Y! l
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。3 Q$ y }5 c; {1 j
! r$ T2 A) r& u9 p. ~
话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。2 t2 ~4 @. x# }* v9 o' J7 X
7 p/ i* |: Q: p5 i0 i
2理解K-means聚类9 ]) m% h4 r7 G/ F% n
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
( B3 [) h* u, b! S# v
1 u) Z+ _4 ^" [) S& ^它通过两个简单的假设来完成最佳聚类了。) e' t/ l) `% d
1 每个聚类中心都是属于该类别的所有数据点的算术平均值' G& C% H( H) t& t6 F+ c
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。7 w: f$ ?. n) I8 k) w4 @
8 |2 S1 x T* U+ P" |* F
2.1 实现第一个kmeans例子& R7 v1 G5 {% O3 ~. b
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。5 b* L# L' z, S9 b7 _. @
- r3 S) a+ J, B `9 m9 qimport matplotlib.pyplot as plt
7 [4 s" R& m' w. s% i. u* B, O* gimport pylab
! G5 v$ |) h/ h$ Wfrom sklearn.datasets._samples_generator import make_blobs
' _/ t; {' h# n9 X, y: J9 ^# r8 P1 d0 L7 C
plt.style.use('ggplot')$ T$ |; U+ ?% H; h& s: s
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)1 L/ q1 t2 s- F# B
plt.scatter(x[:,0],x[:,1],s=100)
" t5 ~: A F( Z9 zpylab.show()$ _$ d, `. O X% `
! {2 R9 f: l' a1 H
- z' R8 ?7 c0 u
12 P% t0 I8 Z0 c6 V: |- A
2# k" `6 ]+ x8 P h; q: ?) }# H
3
4 R" Y6 t2 |6 L' {* } [ N# V: B4. `# {2 W. T7 t z2 e3 \ T- ]( `
5
. K& G2 {1 J) N/ m/ J' w) p7 a6* c/ S0 j; s( F, Z5 R( H
7
: C9 y5 W% G ?8% R3 }; ^/ @; ~5 d$ G& y3 d
9% I( R+ B S% d, [* K b8 q- {
10/ t# ~3 N1 L5 m1 h, B( D3 N
1 V9 Z! z: Z% ]0 u! ^
我们创建一个四个不同区域的聚类,centers=4,一共300节点。, n+ B4 c$ R L, q4 P9 ~5 ], a6 P! E
如上程序生成图像所示结果。
+ }) ~- I, Z! w2 _2 w- Q4 _9 {5 K尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
. d- ]7 ^: d9 f& c. P* R: S2 Mkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。0 a( c$ N1 Z; }( B2 f
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
% w2 K# ? f/ v2 I0 B( c, B+ V& t* U; O& d0 ~4 D; Y
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
9 G0 X, |9 W! v# V2 u# N" h0 U @* y4 t* _' Z
0 o0 [; K. E" i: ~: j
- I0 `$ C% n0 G( n/ X- Y* a! q! Simport matplotlib.pyplot as plt
& e5 i3 K3 w" Y* I" h1 W! Gimport pylab
1 I& u% I+ l2 ]7 M/ d, g3 }' Pfrom sklearn.datasets._samples_generator import make_blobs l) ^9 u1 H! x1 {. ]: o5 e) ^
import cv2( m' J$ o3 P& W1 }
import numpy as np
* {) r2 @& K- {) i6 @& R: X' e3 U7 \7 D
plt.style.use('ggplot')9 F$ q4 }' V$ K) \
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
: F0 g* W1 |* X+ Pplt.scatter(x[:,0],x[:,1],s=100)
& q+ a' m1 ^' w- v# O& O3 I! ?( T7 S# v8 j, G7 U
' T) m' H( B0 i' h N+ Q4 A. rcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
; Y$ Y0 \! z# c( Pflags=cv2.KMEANS_RANDOM_CENTERS" E# \ b( n6 @' i! J
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)! V" F7 E4 S* i' v: t( C
print(compactness)
& y2 R' S! P7 ^9 F6 A
' Q# \1 ~( G6 Q# `plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
5 C9 W; j9 ]% uplt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
) f7 t$ ^" @/ H, d! v- G; x. z+ d. m( D3 ~& t, Z8 F
pylab.show()% `+ D5 X0 |! ?( f7 K+ s! M0 z
. H$ k+ x: |4 [. n3 c' ?' ~+ p- [. J' s. z# C
+ F) }% T: v4 M' j! \5 x& C4 _0 K
2 b- E& ~( A- V3 H+ l4 |3 O4 ]* A9 ?- r
: m8 v. n: Y; r9 I* k9 T
4 G# h2 A, c0 N% J( O1 R( @
1
6 P0 L) c( R; y) X& y24 m! ~; s: r1 F) d
36 Q( F4 b) {, C. F+ a2 `# R( r1 [
4
2 x5 T, @9 I2 I7 r5
/ @: ]" o- f$ \! u6" M; z* O u+ s' z$ u
7
( E9 U8 c. u: h% z88 a5 [4 X9 Z% Z! L8 i
9, G# }- l1 D9 T% {4 K8 N! C0 R# `8 n8 G1 l
10' V& x; p! X4 u( b
11( y+ F1 A [' `7 s) @+ T
121 Z7 {, N# ^5 z* O! Z9 Q
13$ Z8 J, N. p/ F* {% g' P+ K, S* A
14 F7 y: f M/ B& r3 u
150 Z) x! O( ]( B2 _+ I/ N3 O' O* {6 \
16- N$ W$ [) a. p. }' D$ d: m
171 Q2 R( U8 v# L) Q$ o) H
18- z7 T; @7 \: a3 q ~7 d2 w
19" j' N. A9 S1 s% ?+ L
20
+ E8 F$ L! y% q21
, W: v0 R; i5 H, O. [; S22
3 t7 ?2 N. i. q5 @8 `23
( _" \3 w1 G: `5 m, |24
% g! r# w6 |4 Q2 W257 p) E' P0 O4 Q* r1 u
26
, N7 m- l+ T; [上面程序结果可以产生图2的效果。
8 t W8 n: m5 `8 q1 M1 c2 S& C7 p0 P0 G+ C6 X
print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。2 {0 ?3 y; ]. X t E% T8 {* N
W; T6 N+ L' Y+ [6 R当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
( D9 v4 y" b% B$ x" a1 A* _2 u3 l9 F# D/ V& m* C2 G, L' {
3理解kmeans
, G! x) ? V9 B) V) W& Y7 [7 Mkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:0 Q4 Y( S. V" l2 c: E W
1.从一些随机的聚类中心开始
! S4 w+ j8 ~2 z- n. e7 k" [5 j2.一种重复直到收敛! {4 G5 }7 O3 e$ T
- o; l( C$ w- x2 W, G0 {" u
期望步骤:把所有的数据点分配到离他们最近的聚类中心。
5 s% }0 l" C8 J- I最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。, ?8 n9 _% ?2 \, ~9 [
" g! {! G5 f, @它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。2 u7 O7 v. q% H: t$ S. B
————————————————
; R9 p/ ]* g0 l版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
! ~ Q7 O ~' Z- T原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000 s2 d9 A8 C0 _8 E# }
% K5 V1 ?6 b3 i7 {; G8 s
" k1 H3 R$ V+ b+ m1 V* o
|
zan
|