- 在线时间
- 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年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
3 ^8 g1 N8 `% z! Z3 Y4 i# @! a; @& E5 Y7 \2 c {2 v5 V; u O8 V0 z
到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
- e: ~( }, e0 T. L: J/ y* i/ Y7 t: V) X
这就是无监督学习 。4 c# _5 x' S0 V; a, P4 u. _$ M
5 u' K" t2 V7 ~7 Y; p
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
+ B3 ]) P$ {* W% C0 h# u) u, i
$ g! ?; U5 R$ T6 P在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。" m* A% w- e4 G- a+ Q
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。' k7 P6 W* z4 F3 t, R2 q
) ]5 R+ R" P/ r% n) d O
解决的问题- P( P7 O0 k) D% a
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
L: V" f! Z! ?7 J2.如何在层次树中使用聚类算法。他带来的好处有哪些。' g/ o- H+ O0 v; }; W# P
3.如何使用无监督学习,进行预处理,图像处理,分类。
o/ W) M8 b+ D! {" X: o a8 Q; Z* ^$ M& P6 w7 Y
1 理解无监督学习; O; k3 W1 S. z, `& h
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。4 k! {, ]% W, e1 H p
无监督学习的应用包括一下应用:
, A) R: l6 E, y9 ?# w& }1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
( R7 g T' c8 ?0 `2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
# @* P7 X: k1 W$ w; ]3聚类分析: P5 @- _7 a5 x2 s* w, m0 c
尝试把数据分成相似元素组成的不同组。
' `% N( h, F6 N% S) C" I
2 P) p7 p( p0 h( Y3 r无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。 V6 J; R# Q1 j/ V
* q6 Y! {0 ~4 J$ Y# w7 z1 O. l
话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
# t, A' W" x% U8 W2 D
$ e& z8 z0 ]" N+ Z8 z# ^2理解K-means聚类
, c! R+ E6 @, s) w8 D# k4 F% OOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。- j6 \" N; }- d) L
9 H3 n7 U6 J) u2 o' o- F$ @0 W它通过两个简单的假设来完成最佳聚类了。
5 m8 T( h0 q! A2 a1 t5 _' z1 每个聚类中心都是属于该类别的所有数据点的算术平均值
9 J3 l/ o# E0 a8 R- R& A" N! K/ x2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。/ z) B8 C- z! `3 S9 ~+ \
0 G% \( @" L6 ?) W2.1 实现第一个kmeans例子
4 C8 j9 i" _ U5 c: P& [首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
2 O: N. S0 k" t9 |9 r; s( ]9 s# T X& e, E8 _
import matplotlib.pyplot as plt8 V6 O: C$ d" P* ^3 E% r
import pylab
* r" G5 H1 L/ E" efrom sklearn.datasets._samples_generator import make_blobs3 P8 {( _* w% g* C
# }+ Y$ `" Q( x; Pplt.style.use('ggplot')
$ h; d2 v% \0 }/ F4 ^$ wx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10): k9 x( }' I k ~! M/ v; w& J" A
plt.scatter(x[:,0],x[:,1],s=100)+ w7 E0 U) p- q
pylab.show()
8 I" }$ c- f2 `9 K3 n& X+ G* j/ w2 T% B3 z( M" @- m
4 B# m) m. d# Q; }1
" |; ^- b4 n+ E4 H4 w7 x2! ^- g1 F2 ?; ^+ d! G8 W1 V5 C, T
3
' W, }5 m3 b$ O2 u4
8 V9 V! s( b5 b" s* G$ ?1 [59 D5 F$ T, d8 l; |5 x
6
9 H3 p7 y& q3 y2 Q9 H7
& u$ `: g& g8 ]80 H' ~) l, _+ t6 G9 p
9( n {9 Q, F: ^/ S% i
10/ b; M7 y" n, `2 R: e, v2 h
$ s% b- J% n% s$ F我们创建一个四个不同区域的聚类,centers=4,一共300节点。/ o* s7 A, N7 x
如上程序生成图像所示结果。
, O: i% U$ v4 p0 X尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。; h& ?1 i! @. o/ N0 a: Z/ e
kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。" T1 }/ @' s- p3 V
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。6 _8 A4 M3 A- f6 k1 o- X6 K
/ g2 j# H8 w. M. W/ O- ~5 o
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
1 x, v3 f1 `: H2 X
* A$ x7 j; \3 }& _& f4 ^2 n7 t! `" C- P) |) Z1 S8 R4 ], d
2 K% z/ P& c& z. w
import matplotlib.pyplot as plt
' I0 u' f; x' ^) }* r9 b: eimport pylab
1 p Y ~4 ?1 J* Afrom sklearn.datasets._samples_generator import make_blobs
7 Y' B! D$ X0 ^: _import cv2, D/ }) ^2 L2 `; |0 L4 b& I* _# _
import numpy as np
- Y* V- z! g" Y3 @$ e4 o+ Y+ @5 g; g% z: R
plt.style.use('ggplot'). D; }. g, e3 e+ z
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
8 E* H* x$ T; X! V! `, W9 Gplt.scatter(x[:,0],x[:,1],s=100)
! O! w+ i0 y5 W& F+ o8 |9 L+ x) q0 O% l
/ {5 C! M, c& [5 c) q6 g, @criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
; L) c! a( o/ j4 u8 kflags=cv2.KMEANS_RANDOM_CENTERS4 ~' S. ~" @( h' p- _
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
' {# T- v4 e9 i: ~; l' H$ Lprint(compactness)" X5 ]% B( w7 U7 z! f! Q
q! ?# B7 z+ \0 ^( K% P
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')8 @* V) k0 S8 E
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)' h& W/ r1 y% n3 C& t
! c' Y5 d# w0 w1 M. c. L: z8 J0 Qpylab.show()# ?4 ^: w" E1 A
. k- _6 h0 n8 g \
: U% n/ b5 |# o' ?
7 I2 A7 d- p; X( Q' ]$ [4 j
9 p2 N! N( U1 g8 e$ L; p
6 U2 N- ?9 L+ H: }. {
4 r. _" k3 b8 |: P' G) n: u$ o% \
10 u/ a, a6 g$ L8 C
2, x# w& L" Q/ g& p9 p# n1 L- K- c4 ?# P
3" ?& \# X8 Z6 {4 J9 o
4' E _" H4 q3 V( \
5
D$ v8 F8 B }7 L4 E' p6 o+ S& U, w+ v+ z& P) V# g) o
77 B' \. ^! ~- m; c. Y
8
& l0 G- L# G! ^/ H+ u9
, y& p6 O; m4 N0 _; l% b v10
: |( v! a5 c J4 S5 w% j11
% v' C5 s" J& y6 q) @12
9 I7 i. N+ L/ a$ {# Z$ ?3 L+ d* x13; L. w2 P+ U2 Y [) U3 {
14% |- J% \2 Z7 j) M
150 j( a* G8 x( V% R
16
; s! C' \6 x' N9 U# g, G1 E17) I# Z1 Y. l1 M% G- r6 d. @
188 ~! ?+ p$ D- F; V
19$ y: O0 E/ n. X9 C
20; E0 \# G% r5 c3 P7 ?& w7 C" E
21, N0 H! U! S1 |$ Z I
22- u3 V% h7 i2 L2 w/ H
233 q0 ~- i1 J' W: z1 k, g3 z1 a
24+ v; s" k: y$ s: x8 ?, T
25
1 e3 z2 @4 C4 }! W* d; D26
. l8 B, L3 L& l" _上面程序结果可以产生图2的效果。
: U+ y$ d" u2 ~2 w, d) s0 F
9 S+ T' J6 f% c) j$ U( a, B& Bprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
0 s# f7 X I% l: t0 _
' I. }$ ~/ }" P当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
* j7 ~6 c3 c# J6 [5 Z' Z5 @8 y# M- R# T+ E
3理解kmeans
, c) ~3 `4 L1 Z3 B( B- B' dkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
h4 i+ o! e, p2 k: I1.从一些随机的聚类中心开始
- j5 l: k6 @, {9 B+ [ v' |- u1 _2.一种重复直到收敛
% s2 S; l |# r( }; [ f
7 M& i+ ~# `0 d( |' O期望步骤:把所有的数据点分配到离他们最近的聚类中心。- X- B* @7 a" h/ f7 e
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
' A. h' ~. x' |, ^6 p! ?) O- R$ l5 a' ?* o [! N
它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
+ |; Q2 B" N9 n" v. t& H————————————————# a# Q% c6 D8 Q# i& A. b$ H o
版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
, |+ C/ X0 o3 b$ y* O$ }1 p原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
$ i4 N* D; s$ Y* f1 J, x" f7 U+ S5 S: k% g# T5 c
+ k6 b4 k8 X+ }( ?% L8 C |
zan
|