- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 570136 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 176264
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
1 [( G: E9 t1 M% x+ s+ k4 {' O/ V! I S( i" ]
到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
( Y7 i8 ^% w; v& b- v5 M5 r6 k* b- M1 C
这就是无监督学习 。
7 v/ K9 y. x7 B4 f) [( p( i4 x7 n, v5 M5 ^) g
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
o0 w- j; u( B% @: y2 H8 o4 o0 h# x3 `: a2 q! J+ q I
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
; J% B \' l. H3 X1 T$ L作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
& G" |6 ^" t8 b k. A m* R Q* G0 m) }! D) r
解决的问题1 |, e7 h- G& ~8 b) L
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。 `; X8 P1 Y" U) _. v1 `
2.如何在层次树中使用聚类算法。他带来的好处有哪些。
/ O; e1 ]1 t. @' Z; L0 d5 d [4 m3.如何使用无监督学习,进行预处理,图像处理,分类。
* w5 T. K8 T% K; F
& k1 M; R1 s! T2 a# z8 t1 理解无监督学习
3 h2 u) Z& J7 t$ r无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。* u( h4 P/ G) l* }4 j1 _6 i, W, c
无监督学习的应用包括一下应用:5 V2 T& C+ d C" T* A) T+ L
1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。4 y) X9 V' O1 e% [! I6 r4 W8 W
2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
; @2 s$ G% a: q# p7 a3聚类分析:: X/ u5 Y4 J# U2 V# Q% e2 B
尝试把数据分成相似元素组成的不同组。1 |3 j2 k6 a5 I% l+ r1 g; c# z
% w' [0 A5 q% j无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
4 `8 }( O# @& |: w- U7 D
8 f- ?. _/ }/ l话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
2 y2 J7 s0 F: U1 o" X& D' {, X
( ]7 r+ E% _1 ^2理解K-means聚类
! }+ F8 M+ O) W+ UOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。* Q+ q! X- p; d$ s* E! d
U }3 A! j7 M+ \3 t5 H. F& x它通过两个简单的假设来完成最佳聚类了。7 S6 ~) d H0 Q# R: Q3 n; g4 k# z
1 每个聚类中心都是属于该类别的所有数据点的算术平均值6 Z( l/ I: y# `$ d% l: q
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。4 ^1 o+ w9 Q6 K4 r7 O x
% D' O, E9 O! d5 v2 m% n) d- R2.1 实现第一个kmeans例子7 _ B Y. l, F9 z# g- f
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
4 s* ?* x/ ?9 V6 W* U
) J% b1 r2 I" [8 q' N; Dimport matplotlib.pyplot as plt h6 {5 l, Z0 D \/ r
import pylab. R0 G- O" c( ~) z5 x* r
from sklearn.datasets._samples_generator import make_blobs0 m0 [& p3 |/ j( K! Q
. [1 s' k. |' j$ Z& g$ |# e9 z2 M
plt.style.use('ggplot')
$ ~& |7 ?% n* d0 J& F* fx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)" t. W/ d I4 c; @. O& S
plt.scatter(x[:,0],x[:,1],s=100)
0 A* W( t; o) h+ n3 [: Apylab.show()
4 q, U* B" v2 c
3 S2 ^( C* w& M& K: S2 A2 Q) x9 J# U) p( c- Q
14 ?+ r: d* r' ]8 T8 H
2
: _- R( {9 u+ b) H6 ~+ ?/ q32 a0 Z" N) v( D( f* ^
49 r7 v5 k! Y0 s
5
4 U8 F4 x/ p+ W$ X6* L2 a8 W* J( y; [6 _6 z7 h& g
7
7 d, `( ?" | s0 W, S/ ]) _8' \: u/ c$ r5 o2 D( \0 U" Y# w
9
6 `9 z$ B: d4 N10" ^: g O5 u( ~3 z& o
) X, @3 b6 V7 u% ]- o8 R0 \3 b
我们创建一个四个不同区域的聚类,centers=4,一共300节点。
% o5 N* L, J. ~4 p如上程序生成图像所示结果。4 h9 {# F% j& J' |* R. ~
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
) j$ S2 s/ U* m$ Ykmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。5 p& x* T; m, I' w; G5 Z* a
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。1 u- q# u2 b! M" ~" `' v
) y0 v" V# f$ {' U我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。, Y% a0 `5 A: j1 x( Z
4 i, G, Y" T: A* \
( S# u! Y ?9 u# u% i0 F6 p7 L0 [8 n
3 _" m+ h j/ F" }" C/ Q9 ]import matplotlib.pyplot as plt9 B, M2 E' g2 T) F) G# I; I
import pylab
! A. P/ @5 C6 H, v0 mfrom sklearn.datasets._samples_generator import make_blobs: }, @ n& N8 u
import cv2( \+ M' ]$ O' r- p& U
import numpy as np0 T; U: l8 v5 E" N
' J/ O2 f$ Z) V) o1 G0 o5 I, i
plt.style.use('ggplot')% |% g6 l$ T; B- Y; V
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10); c9 i0 G# }2 w* q
plt.scatter(x[:,0],x[:,1],s=100)
7 f2 ^8 v# a' N$ Z; |& p( X9 Q8 S) E- y! v2 b, c
; g0 x8 r# l% H; scriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0); t# ?; l, l# A$ d6 ^/ h8 ~9 b. i
flags=cv2.KMEANS_RANDOM_CENTERS8 A8 X0 f! N1 }) ?3 D, g
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
$ t( b% q+ G, r. J3 R( yprint(compactness)
0 v1 B m0 Y# S: R# b9 J6 H3 u9 F& K* m0 Z
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis') u ~/ x2 Q. K
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)! _- Y& i6 ?: N1 y; v* x
% @' K# H: Q E3 f' T; d
pylab.show()
/ z; M! j! A' f8 m8 u! S
/ b' f/ e; C! T$ s [0 f
' W" n6 L w8 z5 k7 F9 [5 T6 }% V1 U, ?- R3 u6 B" X
5 P. U) R& ~" ^7 i; D9 W
$ ^+ i& g# c; i [1 s6 D" }1 C. |- `
5 ^, K9 y7 x! d. w! D5 C7 Z3 V4 R K: Q8 G
1
6 P. T! a. Q/ _2 C2
% p. K9 m1 \5 Y1 h3
5 [0 d: \7 R9 B" B, i. C! g4
& K8 m# `! U+ r; a* b2 p f# z5
' m7 J2 j0 z5 X- L( K m6
B$ N* }) u7 `- J% ?7# r5 z' `7 U) r- e. M( B
8/ z. z3 l1 P- J3 X$ F4 g
9
2 p- f# U; o# f: B1 B; D2 b10
, N! H' _; q* Z7 R11( Q/ s0 X) }) T
12
/ X* q: {+ R% d9 Y& t13
0 O3 _8 h6 V- j" z3 |( F/ e X14
/ I7 f8 t% k) A# S15, N9 B) m/ F% D- V1 P1 h
16: ^7 v1 x S9 k: f! {, i
17
3 b5 a: ^9 t* f% d18
& E) U. [$ o4 l( d$ m! T8 E. {19
3 O+ L/ g4 R5 s. ]* w) ?; ]/ w) e205 N l; l3 Z. M; c2 {; k
21+ v) ]7 c1 J4 M+ V H
22
5 [; D6 Q$ x4 l2 J( G q23
+ a; H' M2 G. c5 j# [! |. X" i" V7 T24, L4 Y9 Q u. ^$ e( m- G
25
9 d* L- f: x( w. p262 h6 v1 {. H2 R- B9 y' U: c
上面程序结果可以产生图2的效果。! ^7 z. X& h7 E/ G* k7 S
8 w1 @8 @. u3 e1 J; r& |
print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
7 L3 h3 f+ W4 G8 V( u# f) \; `; b
当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。( P: ]2 v. k4 F
, P+ A, E( h( i' b8 A, a
3理解kmeans
# g3 x+ M# L: s: @& qkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:- w* m% M9 z" ~3 I
1.从一些随机的聚类中心开始5 P. R7 J. n$ \, E) U
2.一种重复直到收敛
8 _% q0 ~& d( |, R$ l" { V0 m7 J$ k1 U; O* ~0 M
期望步骤:把所有的数据点分配到离他们最近的聚类中心。5 y& h2 V3 |$ q0 Q
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
! k9 C. `( E5 y6 @
; m- a( B# ?- ~: q. c$ m7 g0 [, z它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
w2 `3 f! b2 @% J; H* }$ _9 u0 p————————————————) y, Q/ y" v o- a3 b
版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# U: x$ ^/ M$ t! h& D/ I+ i* b8 V3 Q原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000& ?+ o! x. R, o' Z3 h x8 c* u% }+ r
y$ p% ?+ {. X" D: t, F3 p* j" b) J8 s% V, J6 P
|
zan
|