- 在线时间
- 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年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点, A+ i8 S7 i" j( C9 Q
9 I7 S3 R# ^; A% B# I
到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
0 F/ C, e1 {( C' A' a
, k# h* V' D4 `4 p) |6 S. M这就是无监督学习 。
9 j4 {% s- ]4 a5 Z, S6 } v* G6 z) t5 ?- o7 {
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
* o& s Z$ O8 |: b9 J9 X+ r9 }2 \9 t
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
! @- ~- s. \5 k# A作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。2 ?4 ^3 Z" |$ c' H( C k
: ]- h# Y) m' k! q! b7 s3 N4 O8 W
解决的问题
9 Z+ b; [+ H; c1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。) t) C9 j4 {; U* k3 J: L4 [
2.如何在层次树中使用聚类算法。他带来的好处有哪些。9 j4 Q A% o6 Z5 G! s
3.如何使用无监督学习,进行预处理,图像处理,分类。$ U; d! d/ ~7 E5 i0 E" G5 D
% a- ~1 v8 D: u' L" p3 `' X
1 理解无监督学习2 B4 c+ o9 H+ M5 K
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。; w7 P( T1 X! u
无监督学习的应用包括一下应用:% B; i. G# J- g7 K+ [1 z
1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
- j8 d! Z1 n5 I% b5 z9 j2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
! ?/ ^5 g! K; l( F' b, U" `" J _3聚类分析:, T" T" d( j, c) d9 \5 N8 i) O
尝试把数据分成相似元素组成的不同组。! I! q) r) f/ s0 b/ t
, N0 z5 R8 X" h$ w/ \, g F, H; ~& G% Q% u无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
1 Y' U4 |0 {/ ]4 j( G' B; k8 s1 K
/ g T" G! q; J$ e4 B话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
! _# f" R" `5 y: E! u3 c2 |, o+ G& D8 f X0 U, f
2理解K-means聚类# Z) b5 n( G5 h; K
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。" J# l, C9 P( j! E
' L% S8 q5 z) \
它通过两个简单的假设来完成最佳聚类了。% t8 O- i4 [, a2 T; a: F, W B5 d
1 每个聚类中心都是属于该类别的所有数据点的算术平均值, d# E+ ~- F! ~' w% K6 G- N2 H- m* z8 I: i
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
' u* F& T1 s# b9 {$ |" V, |3 Q# E4 i7 r% Z2 K
2.1 实现第一个kmeans例子" D3 z9 ?( e2 y" z n
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。# A. K+ }( }% A* F5 Z4 o
, d2 X0 H! k9 M9 [& J7 \: I
import matplotlib.pyplot as plt
5 C3 l7 p" S/ U4 m: A. `' x8 t3 {import pylab7 I4 w. l5 ^* j( p' t$ e3 a7 l5 f* A
from sklearn.datasets._samples_generator import make_blobs
6 F' T- \$ ]) r( F. O" ]. l, C. X" X2 t" |
plt.style.use('ggplot'), L# A( z, f0 d' C* l( b1 k6 }
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)# t0 i" b9 V5 S1 I9 F7 V
plt.scatter(x[:,0],x[:,1],s=100)& n1 l& u. g/ e4 O: |- ?8 e
pylab.show()
% ?: `# \. i0 b$ J& T8 U8 t* m) f- q( x3 @
' X5 x" G, f/ r/ j% G5 P$ J1. `! w* p0 p8 j3 T4 M6 _, H- w
2
$ z+ ~2 Y7 N* T* p1 E0 O3
5 T7 ?0 w: L# n- N4 C4
5 N7 j9 F; |7 \/ o$ e& E8 n5
& j# g' h4 o8 Y0 e5 a+ p6
' u; m1 Z3 G9 p; f- E5 u3 `' ^7; l! S+ J' N9 t! j
8
8 S9 z1 B" l. O/ k9* b# k: ^* n: N0 j* T: v$ p
10 M! K# a1 I, w" I5 G! s# D
4 S7 J8 v/ o& K, o, j" o3 K
我们创建一个四个不同区域的聚类,centers=4,一共300节点。! s a/ Z0 L+ T7 D& f" F7 C; i M
如上程序生成图像所示结果。) n; A3 i4 o' i& n" n Q
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。0 X) }4 h1 R$ T1 }6 f1 H* R
kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
9 d/ b g; V0 N( f j v5 |5 _3 e& |当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
- v( Z7 w: V5 \; ~& C
- [5 Z. K6 p% v8 o我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。' w" `3 X4 b9 L7 E- w. M' X
, ?. k$ x2 e) B/ Y
b% x/ N9 d1 M1 \
) Q. @, J p& a5 g7 yimport matplotlib.pyplot as plt! E9 l7 r9 z9 r/ S) f# E
import pylab# X, x8 o8 V: I% Z
from sklearn.datasets._samples_generator import make_blobs% E* q) l8 \! v P% l% {& [1 f+ `
import cv21 F, Q0 D8 r6 D! d
import numpy as np
8 f q B" y0 `& i3 F) N$ F
& `7 r- |3 c1 N6 rplt.style.use('ggplot')/ b# V8 n# L7 G6 w* O, t
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)$ A# t; W5 x6 U: s& X1 ?. i! ]: p0 m; ^
plt.scatter(x[:,0],x[:,1],s=100)$ G/ |, v; p4 i9 n+ u
; E r8 W1 O" k+ |9 b! H! q- O
; n7 Q$ a0 r) e, W) `criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
5 K0 g' a0 I9 Z; T0 t0 x# Oflags=cv2.KMEANS_RANDOM_CENTERS1 @# b7 @1 O* h+ q8 w
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
2 v+ v2 \4 a5 @print(compactness)
9 Q/ p: U# q4 w+ q2 d+ X% H7 {+ q1 I b6 w' _
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')+ d6 _* n6 ~, _ M$ A% o* G
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5); U1 C# C- [1 A. P9 t
' k3 t2 f( D- p m h$ X3 I; kpylab.show()2 ], ]2 D _& M! y5 `6 x
5 U; m" F: ~; P2 l6 _ b! f9 W+ [9 M7 U5 E& e
* x" H* T) T% G2 z% l# f4 A; P7 F6 s0 v
- x! T" @) L* U+ A/ P+ i+ z6 f* _# s! p) K: `% g% z5 t
% n0 v- J# u2 \. m1
9 `; A; ^" T; P( J9 d9 K( z6 o2' v2 c( i0 ?: y) }3 m/ Z, b
3
5 z4 c/ s' q4 x2 C4
9 ~1 I# r. [! D" p, ?3 q5* ^1 R" C2 Z7 c3 K2 ]7 m& R' t
6! I. M* D d5 {4 ?
7
1 S9 o' S& b% O5 C$ {8: ~& I$ j# m" |- l7 e
9) e" o* R1 T0 d; p& \
104 U* N& p* i; P+ n3 I9 ?
110 |4 f, j% K! p. C* f6 z& p
12: w# W# V* c# o8 \7 c; F* G
132 ]9 P5 I1 Q# c) n% X, `( d' j B
14
& [. q% C, Q& {( y15; E+ q8 a' N' d9 S
16
, H, v8 F9 _. v8 |( J) E2 ~17: P$ [. h: [% @9 S
187 E9 S% A/ ~, v8 A
19
2 n" k9 C& \5 W0 x5 X( M20
4 R d" Q3 z2 H5 s: Z217 M0 g& j$ d( Z! M/ k
22
1 G# H6 j0 ] D8 R7 C23
0 e. }) c$ |( \6 P249 s, A0 V; [: a/ O4 @: A5 B3 s
259 e$ m- Q$ C# q( S0 [( \6 k4 Z
26- V3 R* H1 X+ E
上面程序结果可以产生图2的效果。/ c# h G# l% a+ F
+ D# f5 t0 ?1 S: q1 W" l% E4 ^$ g Rprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
/ R/ r, ~8 I! ~# k; ]) a* V! N
* P2 W" z. ?( E' Q7 E当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
* T, j) g: V; c( Y8 W. l5 H. @, t$ ?' M& a( ]
3理解kmeans0 v2 ]4 B T6 T9 w: R% g
kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:! f- ?5 v- A) L& q' L- z3 V
1.从一些随机的聚类中心开始0 Z! w/ t; c+ D. K4 U
2.一种重复直到收敛
; w& o( V' V6 ^ F( l/ g
' w9 ]3 e- h7 O( j) P期望步骤:把所有的数据点分配到离他们最近的聚类中心。! f1 C! [( n: }- k- q
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
3 ?" n0 m; Z5 ]( T4 I: a+ _' `9 B* N; B+ ~0 ?
它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。: \* M; D, n; {4 V" K! }
————————————————
* z1 t* C" g4 W0 D6 C版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) d/ L8 Z. r: E+ L' o+ g$ N( H
原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000% s1 _8 ^: F) j( {
2 ]) H, M& T$ T0 v K3 ]
% R& }5 U# E0 k$ F* L3 s" w I: }
|
zan
|