- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564443 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174556
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
0 s" |( H+ P: b9 L1 N
4 I2 Q/ l, K& [到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
# [0 M3 H$ ^0 Q4 T( G# g% Z9 O1 U4 g* i
这就是无监督学习 。" y: q/ ?7 c* z
/ G+ r) q7 j8 h
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。/ d9 b: D g) b; `/ } _5 ~
; S& c) W$ b; V5 b6 V+ S
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。9 Q8 P1 m0 T# h: Z7 |' x
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。& Y( Y5 @1 T: D& x: }
* G3 @/ q+ `. w* P: s1 y0 R/ V
解决的问题
0 K% Z( S3 A q& p+ {1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
# i2 U( O8 M$ b& `7 |2.如何在层次树中使用聚类算法。他带来的好处有哪些。
' G9 G( {# W( S9 j- q3.如何使用无监督学习,进行预处理,图像处理,分类。3 \8 c- b' d" o$ e8 |1 p
' `. c" \0 P- [. I) @
1 理解无监督学习/ O+ U% b8 W+ p0 k! q* D- m
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
* A: y2 T; K& t% }无监督学习的应用包括一下应用:
' M: L z" n/ O9 _ n# X8 `1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。" w% V3 z$ d* \; |% e/ U
2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。/ h) x" m6 B" \& L& ?+ q
3聚类分析:( o/ m, ^! {2 F5 l w$ h
尝试把数据分成相似元素组成的不同组。3 i0 \/ N) R! Y
! N# z; T/ ^5 W
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。- q h+ e4 a. D4 \9 G& B
, S8 Y2 {7 b* `$ |+ A' l
话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
. s3 e& S5 u' t" N2 C$ D2 G }4 E
2理解K-means聚类' V/ ~* Y3 T9 m. n- C& E, p" u
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
' H4 J# W. v5 p" w8 W2 [ x# k0 ~. ]+ X
它通过两个简单的假设来完成最佳聚类了。, _) A, ?0 }8 F+ u+ K# j' N4 W
1 每个聚类中心都是属于该类别的所有数据点的算术平均值
* p/ j! S d! w o2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
4 P. P" N3 j. F9 K. S! C) w9 C- n1 k/ J$ `2 b" i4 c
2.1 实现第一个kmeans例子
. x% ] }6 j X; z/ K0 y首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
- i) H" K- A4 L% t9 J: s( S7 W! _# }* @/ v; |6 R% ?
import matplotlib.pyplot as plt
0 n5 `$ e5 |. l+ W; Q* Jimport pylab* Z1 f( U1 E3 R% j
from sklearn.datasets._samples_generator import make_blobs
6 [0 F! u" S& \6 g7 A& U! e' F: R1 @% k/ `2 G3 d( E) I
plt.style.use('ggplot')
' v* D: d( W6 i2 R0 p s- nx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)! r' V- ^, n% |0 m% Z% k# u1 A* U' n2 @
plt.scatter(x[:,0],x[:,1],s=100)
$ _( h; O; ~% a+ [+ mpylab.show()3 Q8 `9 J7 d+ @3 c; ]3 s: A# H
2 g. j0 n+ j* L0 x& u0 p' X- \7 t( ]4 T. Y$ u
1& \# J) E5 f/ l$ _5 ~2 V
2
! f" ?6 K$ E5 W% `* ?3
* c& }# x/ R* i5 n4
5 C; @& k* @7 e- y3 m6 r& X5
2 m& Q/ r4 C- O" a+ H' a62 @# G/ g+ C* V) E4 b
7, w3 P' I" K$ _: n' h2 c
8, h# D! o6 P, X' c+ y$ H# V
9
: b( s( p2 v8 J104 M- o, U# G V
! b8 ?" n' x: a" [我们创建一个四个不同区域的聚类,centers=4,一共300节点。
4 E$ e3 s7 \7 q( l3 `9 j8 R如上程序生成图像所示结果。. L6 p3 `+ k, ?8 P
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
2 f9 z6 x9 o/ F4 u8 rkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。! ^, [$ W6 \' S. V4 e- V5 ^
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
# u" V% g* p+ r4 h1 B+ F% _
6 @) {/ {1 ^8 ]# X我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。" `3 W1 F/ x- g4 X! C3 Z# E
& U+ U+ _. ~% C5 R% J: a$ j: l9 R O; i+ j
( ~/ }; i2 K, @0 b$ ~7 B* a7 ^import matplotlib.pyplot as plt7 \4 S/ O4 N$ |6 i+ P" x
import pylab
3 I( u! Q c' M9 d! }" N6 yfrom sklearn.datasets._samples_generator import make_blobs4 f+ ~; T9 D" x6 e/ p' O8 H
import cv2: d6 o. C, F i
import numpy as np" v4 k4 m1 l. Z' I& E
' `. c2 N- K. Z3 U! v! L
plt.style.use('ggplot')
6 p( E5 R8 Q( H, jx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)* [! V" V; }: `9 {* K
plt.scatter(x[:,0],x[:,1],s=100)* \0 A# e* f! R# D& ~
* b6 F# d: r3 A- |1 @2 I. k( G
' B* U9 [ j, d2 J7 M: q6 a9 wcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
2 l" w" D! r7 w7 C$ a. O4 @% K: Xflags=cv2.KMEANS_RANDOM_CENTERS$ N& B6 k7 T9 S G. Z5 i y: B
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)7 s: H: X+ L. R N
print(compactness)
% ?4 S b" e+ _ A& Y2 f! T0 X4 j. P( l* k7 p" c# ~
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')% g7 O5 j9 g3 J- n* q0 y
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)! {: S+ \6 \ F% m+ F
6 F2 w; p5 r1 H" o$ j1 `2 _
pylab.show()
6 v+ e4 {: q6 U# m" g$ l( B- T9 W) l2 U! P
# L" F% x, y$ [. Q
- [( ^ Z( G+ c
6 R& r# { Z( L& |$ l' H
8 F+ ~- G) A5 u& S& A: B% t5 j0 t3 p# n) O! ^0 ^2 u, v
0 g+ d0 \4 l* Y2 ~6 `7 Y) x5 j( `1
# a/ A& [3 j5 e: v- r% M2
) n+ j' p3 D5 v. W36 t3 u; u8 E; `# {
4% F- V$ o4 a! z4 q8 b
5: n% s9 m K# C- ^0 H/ ]
66 d1 D: ?$ Y2 V3 [
76 L5 f- Z. y2 m* M$ C$ h% n" I+ W
8, c' Q8 ?, t& Y& X
9$ Z: ^ ~. g. g! b) z' E
10 N2 g. r% v2 X2 Q. |6 \
11: J/ f X# e, q1 K- n7 }
128 W9 T! @0 i, W
13
0 |0 F1 B$ B1 I5 Z5 \! p* Y* A14$ v) Q I9 ?$ V; m
15 Q' f) G G: C: D2 N" i2 S6 A, s& U
163 y3 ^0 x. D* V
17
" o1 P/ F' G& ]* x: |& `18- X, V) s3 P4 [* s* h
19: Z1 A" P0 n8 s" ^3 l. g# t# l+ P
20
. q# A+ O8 U9 H1 \21
! d0 X! v8 N, j+ _$ f" Q* h22
( S0 c1 s0 V3 B23! D+ |/ V2 S0 _4 r1 p6 P
24" t( F0 S: p% `9 x) I5 ^& W
25
S6 ]+ u1 m: w! O4 t n0 A: J& a26
" w' W) ^1 V9 b. p上面程序结果可以产生图2的效果。
$ D2 A1 I; C# p/ W: R7 T
; h$ ~/ J2 R- @( R0 N1 Zprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
, P& I) h7 S: p: U- j% I& `! v/ W! o8 z" R5 T( u3 l
当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。9 h; |0 d& O. L6 b0 U n+ o
8 B1 {3 {$ _# q- N! i/ P! l+ p3理解kmeans
& H; k" n' r: w7 [7 }4 d; Ukmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
; z% W$ i1 K. j( b3 _! W R1.从一些随机的聚类中心开始/ Y% g9 n/ @6 d" w: [0 v/ l
2.一种重复直到收敛
. A, k/ I6 q0 u2 i: W
6 |5 E$ j% w# ~* m3 x$ S6 N期望步骤:把所有的数据点分配到离他们最近的聚类中心。& L( J" _. i. M* g' K+ |5 f6 W1 v
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。7 ^/ e, J9 U& o+ K1 q/ C
+ z$ \* F2 g' X
它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
" T* t- }/ E8 b" G# ]% l————————————————
{4 J3 o% S- h) O版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: Q+ K) i0 c) ]- B' v$ i+ N5 u
原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
' i8 g% K- m% }% H% q* B5 t4 h6 N3 q/ S9 a+ A
6 ~7 J: e( ?, N
|
zan
|