在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 566250 点 威望 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年大象老师国赛优
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点 ! H7 S1 `* Y' w( w0 m
5 R+ t1 s' o, U
到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。3 T4 m6 r4 C0 q1 J( [7 v
! Y' e! S! t: r$ r2 ` 这就是无监督学习 。
; b% Z V% d1 c% S+ P; I# f
# e8 {0 D3 C) o# I9 ]7 X2 s) F 在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
5 d1 H2 K0 ~' N3 ?( E* J8 P : F# ^, x3 d0 \/ }
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。( y. s- i+ h) q: E3 F9 d+ D7 p0 \
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
; i! j7 Y7 `( u7 p. O0 z9 J* t2 u
# E1 O! D2 e: s8 r" Z, e0 X1 @ 解决的问题: w/ Y, r y, {8 Z1 `
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
% `" S3 [% k- g' {# E2 X. W9 E1 k1 ? 2.如何在层次树中使用聚类算法。他带来的好处有哪些。
% I7 w2 z7 Y x% t 3.如何使用无监督学习,进行预处理,图像处理,分类。
6 f" B0 T; ^! x+ r* T4 o
/ \& X- a/ q3 {; d" e7 p4 i* T 1 理解无监督学习
' Q6 i7 s! T$ `* p T8 l% {# s' m 无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
! H7 W2 u! J0 M 无监督学习的应用包括一下应用:; e P: V- m5 {) N2 M
1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
7 _/ c7 r/ w: R+ f" M: x 2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。2 c' @7 g7 Q; I; Y$ f, D, W
3聚类分析:- Y: i: C2 p1 u# d- T- {: ~/ K
尝试把数据分成相似元素组成的不同组。; y+ D2 Z+ n9 A' D! x) z1 R4 h
! \2 f7 N6 d% a1 U
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。: f: s7 p! J4 j# P; L& P
* W# z; t2 o; N- p 话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
, ?6 _+ X, H* _, X2 D2 w" F
7 z8 E- o& T: F5 z# @5 m& \ 2理解K-means聚类
& a; P7 R, I( ^. t* j. Y( ?6 s Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。& r- r* N) s' ]! v% e/ z7 h
% E% S6 P# s7 s% g& B5 ^ 它通过两个简单的假设来完成最佳聚类了。4 D1 d% s- S- B. g0 e
1 每个聚类中心都是属于该类别的所有数据点的算术平均值
) J0 i4 O0 s6 y6 z- {8 I2 ]1 S 2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
( ^- B2 Q4 E& u! C" G % p) q( L* Q2 |" z3 |/ f) T4 M `. w
2.1 实现第一个kmeans例子
$ R5 i" A- ^& B. | 首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。" s& Q+ w. x& y; Z* ^/ |- h
3 L. G7 Q, S& ^0 V import matplotlib.pyplot as plt
S7 b5 x" e) x3 X import pylab
% v( ]3 l C8 Y; R7 _, Z X; M7 E from sklearn.datasets._samples_generator import make_blobs+ T. i: W2 t8 W K+ g' \
( A2 F! U" [1 b, L' L9 D plt.style.use('ggplot')
- m8 f3 }' y% a2 a, S+ z x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10) M4 e; ^2 i3 o- a0 _2 k
plt.scatter(x[:,0],x[:,1],s=100)
8 }( C# ]4 W7 e- E" ]& n pylab.show()
. v0 T e2 Z" f3 ^) Y0 }1 [
! |* @5 ~, h+ O1 K
5 L) i2 [" H% u% _$ F. c: }! d 1- u/ N* s" y1 |4 I1 z5 Y$ p
2
6 d3 _' b Q; o0 k' |5 ~* h 3
0 }( k5 B! _& b# x2 A8 H) a4 o 4 I# V. d6 o; m; n
5' P( V, S" S1 A! B. r; b8 K
62 W- T3 p l+ f o, q( U4 N
7
5 D4 O! C* l+ Q+ { 85 s- N& q& e& w" i5 a& P. t" [$ u
91 \, J6 q) q' E, M! F
10
; b1 U7 x R& @7 n* w8 L8 U7 z. G$ b" h
9 j, h* _7 W1 r) [4 u 我们创建一个四个不同区域的聚类,centers=4,一共300节点。
9 Q. p+ m) Q6 ?% A 如上程序生成图像所示结果。
# y5 c. ^, W0 ~- H: q2 }8 _ 尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
" ]/ m% F. D/ D% b) O kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
5 ]7 v/ t1 l9 W7 [) _ 当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。+ ~& V; j- |' E; E+ k, G0 j
6 J& F# M2 O& g; M
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。' Z5 ^ K. t6 k* }- o2 k
5 `( }8 `3 K; p1 Y
. F8 J0 H: d4 Z( S; ^" d' k
( L" x- h8 n+ z0 d" M. x. A) V import matplotlib.pyplot as plt! q. Q J: Y9 G1 e* {1 ?" L) c
import pylab
k h- H& o2 B) B, e from sklearn.datasets._samples_generator import make_blobs- B' b5 f6 z+ |& ?
import cv2" W2 L2 x. ]1 [" Z# {6 I8 h
import numpy as np
% d% a" J8 I/ i( `6 Q! o; i
/ G0 j( X: D* K0 x) c plt.style.use('ggplot')
6 L% W) C5 a- i; c( N1 N& n0 b x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)* O6 U% E! t/ m7 e8 W2 ?
plt.scatter(x[:,0],x[:,1],s=100)% H' S5 A! C* j# W
$ _; C6 B7 v0 g5 @/ \
. _* D% m, v3 i criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
9 S( O7 t! @; Z' I) E! x& `8 y% M8 l. B! } flags=cv2.KMEANS_RANDOM_CENTERS* ~8 b/ @" U! f2 m4 n6 o
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)- W9 ^" G0 I5 z
print(compactness)
4 G9 Y7 S ?2 G5 D/ W; Y # P# y1 X: O1 a7 r
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')! ?: d8 J! e. m( b' ?' Z# N
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
' M ]. m) o% l+ K0 k7 Q
0 b- J3 \. p3 `- a6 q* n1 m* O" o pylab.show()
+ _: S4 G5 ~" u+ V7 V4 p9 _0 f
; j- Y! d6 L( Z7 u) A. f3 p8 Z
5 W, e) @- s! C! ~1 k
+ T- G8 I1 F( ~! h
9 O2 s8 s& k( f* Q
, U2 ~7 E+ z0 E B
9 e+ r' `: S9 m5 U) E* X & x0 z& I; M0 z5 I4 w
1
Q: E7 a: ~1 P' d 2+ o9 @7 J- f0 D/ ]1 q
3
- Y* @9 d1 R7 D% o5 V! ^ 49 I& _7 ^3 Y: _' U
5! r) v" `, U5 z( l
6
2 e) I$ t* W4 _1 y 7
8 i: T* v9 j, I9 } 8# S2 R+ [* A, a$ B U5 i5 C8 k
9* `" Q) J* @1 c2 k( _. p
10
2 v3 E9 H* X/ q. U: f. ? 11. u" t" p5 x' A; J" V
12
! Z6 t5 Z; f, v+ A- u7 i7 S' Y 13
2 a$ I( ]# Y- @ 14, `: v- ]3 X; r: M+ Y- g8 @
15
) `, o( k/ v% ^ j! s4 ?3 V 16
3 _3 f- Z( y' p" m4 |) Z! T$ n 17
7 G, e& T; o( j$ k+ R 185 ~9 Y" O2 X# K* b
19( r. {' J* o: F: d! e# d8 Z
20! U* L. \" B3 B2 c9 [- m
216 F( j2 S, S* c# d
22
, c/ L7 J5 M+ J7 o1 h 23
8 u0 H8 O# }6 f; }7 D) H! ]2 D 24; p( n0 @. V" z
25
" `8 h7 w- J6 Z. E- p* c 26
6 J2 R# `1 k/ _5 E" R 上面程序结果可以产生图2的效果。
M" r/ d- S7 `8 m; Z 4 F$ y, P' G3 u! e* p. K' i6 H+ e
print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
; ^1 B' ^# E5 {# U
e+ E3 H6 j; R: q9 _: N. w& n 当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。- O/ R9 x9 L7 F6 r
: B% B/ C. `9 Q# D/ y7 d
3理解kmeans, c/ |( R+ v5 t
kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:- W9 D# N* s3 V/ Q, \
1.从一些随机的聚类中心开始9 i7 A, {% T$ |* {; U
2.一种重复直到收敛4 f! S# M! n; S$ O1 ?' a
% S& V) L6 h6 W2 ~- h
期望步骤:把所有的数据点分配到离他们最近的聚类中心。6 V. d# X, e4 d$ h# m0 |' p
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
) `3 m& t5 S9 x, h- q/ L
% R& W1 \. ?# N 它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
; Z0 M( `% Y# p U ————————————————7 q3 }, @4 c8 ^$ x
版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
9 ~" t5 I- X& W( t ~7 E( _6 h 原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000% s3 g6 j1 X9 v9 X
, |& I& d7 K8 B" O$ e 8 m8 a& A, V) H% y
zan