- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566251 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175098
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点/ G% e% X4 Q6 N. M V
, c" ]! i+ L! g# }到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。4 p3 m* C& _$ U3 j- ^
, J% U( O/ ~5 L! j6 i" X$ m
这就是无监督学习 。# e# h! z+ a) a4 U+ I% T2 y
# k) u. q' g9 k5 c- o0 q1 e& p
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。) l! F& V0 |2 x: Z- g( W* K: G
4 L* k9 q! D6 N+ d2 J在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
0 s5 Y' N8 }! V% y5 Y0 U. M5 _0 y作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。- Z9 ^3 H5 K1 I
, E& }) U) B6 C, R9 t! f! E解决的问题1 u4 d- G8 I! R9 q9 B1 t2 m
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
2 B' C+ c& A, z6 K2.如何在层次树中使用聚类算法。他带来的好处有哪些。$ W# l, Y2 |' v" `7 L4 Y$ a
3.如何使用无监督学习,进行预处理,图像处理,分类。% R0 U7 r5 D9 ~- e* D' q0 d
' K) s2 F5 l; ^) P. k* w+ h7 Q1 理解无监督学习
( p2 K& i6 W+ p. q5 v无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。; V9 D6 Y1 @( N
无监督学习的应用包括一下应用:
3 l* b8 _; ]6 r3 D1 D1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
+ C/ Y2 u4 C" m. Y$ o1 d2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
/ B7 g% p! p3 o" k6 B0 n3 H1 N% f2 g3聚类分析: n* q, r4 \& R% P: a
尝试把数据分成相似元素组成的不同组。/ R0 u, s" W# ?4 v" }7 D& H
9 y$ T2 ]- H/ M+ f- |' ?无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。# Y9 [- c8 W3 _. }) T
- j: M4 Z$ `8 D# h+ _, G9 x话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
; P4 J+ `* b8 K2 `) L7 n
2 u3 K& y9 }) C2理解K-means聚类* ]) ~, v {3 P* M! t8 N; b
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。. C3 Z+ d+ r$ p& V9 B" t" e" M2 h- C
+ c" G2 j; _6 M6 W3 i
它通过两个简单的假设来完成最佳聚类了。3 j6 b" d) R8 `
1 每个聚类中心都是属于该类别的所有数据点的算术平均值& T9 z. C% T3 K/ ]. t* q( \5 C
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
+ F8 N8 L* P- c
, p; }/ T5 n* h2.1 实现第一个kmeans例子
" L& K. B7 a' y7 Y首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
2 l5 v* H4 K6 y# \4 j7 l; P0 Z# z! K) v% s1 S" I, J
import matplotlib.pyplot as plt
- }/ n Z4 R9 [1 Z5 K& g% Wimport pylab
! x# |% h/ S, J( ^! hfrom sklearn.datasets._samples_generator import make_blobs$ S) F) M& A) J, E$ Y, E0 Z
, @: l8 J3 s; F5 A6 W" Y
plt.style.use('ggplot')
. l; m& J7 {7 A; zx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)7 o: h- k. f! _6 F2 j! g4 e5 t9 A" x; o4 Z
plt.scatter(x[:,0],x[:,1],s=100)
2 t. a' s) {* ~7 Tpylab.show()
2 |& l8 P6 G! E) F. |! y
, M% O! b5 ?, p/ F" ?5 a& X
; F Z* f+ j! h' D6 @1
/ Q- o; X8 I4 S5 V, p( y2
/ v: ` E3 E+ B6 P: Z: Q1 `; C3
) k5 r' ?8 u2 Y- E! e6 p4, P' e7 q5 I8 O! b( x- i
5! W& r3 r) e2 t, F
6
1 c: W, L( W x7) o# j( ~& W; G/ p6 i4 N, v
8
8 Q4 h2 C) b) B9 Y; b* `& I& Z9. \ A6 [' F( X `
10) v) `1 g9 a8 o# ~; R
+ |# ^% i5 v- s+ r
我们创建一个四个不同区域的聚类,centers=4,一共300节点。 I6 D' O0 N! g* p- \% I
如上程序生成图像所示结果。- {+ Q6 l/ y6 j. w' b
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
2 s+ l' u( `2 k* e# Lkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
: Q3 B% ~( n4 [6 J5 M4 d7 u5 x9 l当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。. o3 [2 b, u! A2 \# c1 X
" i+ y0 {0 J, Z+ k) F2 k
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
7 U% N, r' y7 I% G1 F L+ M
. [- m2 Q; {, \& e% F/ @* X+ o
2 ^, w5 I. S6 s. a' ^1 }5 y, w; F" q1 g
import matplotlib.pyplot as plt
3 ~, Q* N. c# `6 |* N" zimport pylab
! @/ }; p" F9 F0 `! g8 Nfrom sklearn.datasets._samples_generator import make_blobs% t9 Q1 e: }' O, U( j5 c+ T+ H
import cv25 b' m w4 r C4 @* r) \" _5 X
import numpy as np
+ m: F' a- M( m( @6 n! Y& `; [ B9 L) R
plt.style.use('ggplot')
8 L6 V" g" j j1 r* P6 L( ?2 Z& Yx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)& s( }" t8 G% J3 n( F
plt.scatter(x[:,0],x[:,1],s=100)
4 H! ]3 b" x# P5 f- |& }6 x8 J
8 X& g' n w0 g6 |* j% Bcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)5 Q' |+ ]9 e' [' Q6 Q
flags=cv2.KMEANS_RANDOM_CENTERS
% m; N, @& h2 _4 G7 [compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
' ^* ~1 G8 W) o# Z c$ c3 cprint(compactness)
& u! k/ ~. m5 T7 k# E1 f( r/ w( B% u7 l
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')1 D6 n5 D2 e7 \% h3 K
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)- U/ B1 w D$ I0 {
2 J5 U* Q, ]% ?! u' Spylab.show()
* F, Y4 O+ O- \. B5 Q* K ?: v4 }/ d6 l" d5 m* g: b4 J& I5 S& a" R% E
5 C( K U; ^% T0 V1 l9 z3 z/ @7 y; p
. N. X$ c4 D& T9 Z7 U8 L [6 ]
+ S! h e- e, W3 M2 T0 {, ?
4 Z b9 o5 r/ Z( d6 S) W) ]8 p* v5 Z# ^9 g- G% O
$ Z( V7 {! u/ p0 M* `0 l
1* _: I- v" `7 P2 x8 v' l3 E" p
2
! x* ?( z, }- v3+ e0 c& Z( }& _/ R9 m/ w9 C
4
' S7 @4 u8 J0 O4 H5 a3 }* Z: i1 h5" d/ N ^1 h$ f
6, E6 `! @+ k% f& {' K! J; P3 k
7. a+ e9 G( U) ^" H! i
83 ]" \. V l" ]% `6 x- w9 V- ~3 x
93 `5 b$ C6 D, j+ A; m' N8 s: K/ f
10
9 f: b& v% @% C% R11
- b! D8 z6 q: Y. X1 g( e12) U8 o. D2 N$ o/ d: ~3 f
133 d7 C: l" ?5 c$ P) ~7 v
14 M8 S% f0 @! t; G5 f
15
' T/ F% @0 z; K! a+ j ?4 u x16: _' k1 P+ {, V. z
176 _% @$ [1 m6 ^9 d' N' X; g
18
+ G8 H& C* A9 V0 B19
6 w. U) t& W! D; a6 {$ w; o! v20& M, |5 D _& ^! [& [6 p3 @
21
W/ V( \" r" J* s22
8 k4 x, {' K3 K9 K2 |9 z23
3 y; V& w" M' y- t24
4 N" I8 V/ c% g) }25
- J& j& \. [& ^261 S1 p$ J) g% f& \$ ?/ N
上面程序结果可以产生图2的效果。0 f6 F5 @; [+ E( L, O4 W
0 {6 q/ X" Y! W% Eprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
, I6 M! V# M0 y% f& K" _, n5 D, L' K( k3 g) E/ V
当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
6 {5 S- m- P, Z& K5 y4 R
( H( j# ` |1 M- Y7 Z7 i8 t$ G# Y3理解kmeans
& J$ K& m6 Q+ fkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
! |8 P9 T! u& I3 T* ?1.从一些随机的聚类中心开始
( j4 C: ], m. C" m2.一种重复直到收敛5 S4 c1 l: }/ h" C/ d% S8 o
5 m4 t- k7 R; o' M7 c/ Q
期望步骤:把所有的数据点分配到离他们最近的聚类中心。
" s2 T n5 n4 p! B% R: u) ~最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
; D- ~1 S$ f5 t7 ?0 h& C% F
. I3 @& l# ~, }6 G- k它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
$ P ]' O$ l( P: |( o3 Q————————————————5 S5 L- a' T1 M6 x) s& H3 E6 a" h C
版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。3 g I3 G. c2 b8 n( a9 Q, p
原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
" s% b, g% i+ D, Z; ]* D8 J w' F- S) e* T9 e. l/ E4 y
. W @: X7 Q7 @$ t. O9 Q |
zan
|