在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 569615 点 威望 12 点 阅读权限 255 积分 176107 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
" w% K; D' x( T4 X/ s
/ t3 j9 [0 e6 y% T' Y# T1 m w 到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
) G' ?! }+ @7 F6 L D$ c1 W5 s4 _
7 ?- m6 }! i; I3 Z) M6 a2 U* t5 _( X' i k 这就是无监督学习 。9 d5 k) o! A$ Y) n+ n; k
9 J j6 }- R. J$ {6 ~
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。; x8 Z$ M& G9 |2 [: U; y+ n
# q4 B: m: I; U8 j( p V 在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。: A) | z: B. D- w8 u
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。$ Y, }/ b1 s- {# P* H* x! |- v0 I
# f8 u# t* H4 W: d$ D! L' i% s 解决的问题: I; m7 K. O9 k" n P. x& K$ ^
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。' \& f C6 l# ^* c0 y6 K- i3 w7 {
2.如何在层次树中使用聚类算法。他带来的好处有哪些。' X6 w% u6 i/ f2 c3 T* C
3.如何使用无监督学习,进行预处理,图像处理,分类。
: s6 Z& I8 I4 B7 t# \1 G
1 Q: K! {; u( u. {6 e2 j- C 1 理解无监督学习; H8 P) E1 ?6 [/ @( X+ O
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
2 ^ c, g$ C2 Z4 {5 R1 d* I+ S9 v 无监督学习的应用包括一下应用:% Q6 e2 d: K# `' _) u+ G4 u) K
1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
# t, }- z# }! u$ r1 g; T N* v' [ 2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。$ o: D7 g, A# y7 n' h
3聚类分析: |4 S/ R$ v# A& z
尝试把数据分成相似元素组成的不同组。* P* n7 Z6 N5 i+ R- `0 h
8 Q$ E5 }$ | V8 l% b 无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
; G9 g5 d0 {3 K1 f/ B. J+ p& S, E
1 H9 J# k0 X( F9 f7 g) ^ 话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。, {* S! y% t: j. v H) |
. a( |( z+ f( x) t) t2 F/ f1 K 2理解K-means聚类
1 A! ^/ T/ h3 P! X( R7 } Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。; T- s, q( l3 ^. {
5 a6 w) y+ L. S8 O6 D6 _8 M0 L, } 它通过两个简单的假设来完成最佳聚类了。
* j- M P% U( H% P: V u 1 每个聚类中心都是属于该类别的所有数据点的算术平均值
, G7 h4 @; E2 s! I: K4 U, o 2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。' Q$ t. S" i6 q3 N6 l0 i+ F% E- E
( ^1 C& L( q2 l. o; U5 J. u
2.1 实现第一个kmeans例子( f$ S$ J7 e: d5 g: G* c! H5 t
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
, @8 l2 `: C4 }5 S: ?
9 ^, {0 t1 C0 z4 V' q7 ~ import matplotlib.pyplot as plt
) [/ I" p) g/ [6 S' O import pylab+ K- K" _: y7 w/ ?6 d r
from sklearn.datasets._samples_generator import make_blobs6 y& |4 C4 D, M: G
: F" y0 x; i0 S/ x h6 }# D plt.style.use('ggplot')( F$ ? D0 w1 c1 D9 u* S* _
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)8 M+ W2 ]$ D) `& f& N6 f8 n6 |
plt.scatter(x[:,0],x[:,1],s=100)
/ q1 e* L1 E" ?8 Q' e5 h pylab.show()/ }; A/ _# e* V" T
6 k/ o0 c1 Y. l' K! x: ~ M
% M3 _4 ]0 N5 i( F# s& o9 | 1" ?$ k4 f" } x' K. b7 ]' y1 X5 [6 k
2' q3 C9 d6 H# P6 l9 _; l7 i4 J% x
3
$ V& H: Z% t/ ?: e 4
1 t9 H! D/ r6 a% Y; q) A% l 5
9 @0 J1 _, z1 r: w2 L 6) h: m/ s$ w8 U' @
7+ J/ J4 N( j1 E/ o% G3 i( C
8
+ T9 c/ J( e' Z8 k+ {8 k* Y 9' \8 U P9 C/ W6 g S6 g! \: p
10$ J( P" j3 D+ f8 {) o0 z1 \
' v& |4 H% U' A! z. c# s6 v) f0 C* p
我们创建一个四个不同区域的聚类,centers=4,一共300节点。
% J: B6 S5 C6 [, E 如上程序生成图像所示结果。& X3 j$ F* M6 l+ o; K, H, w6 G
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。. o; Q2 P% J6 d. [7 j8 f3 U1 _
kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。4 z, s. n* s1 x- l% o
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。: Y; F3 H6 a3 o
+ V4 U) \) [. G7 ~+ G
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。3 h# d7 I: {2 p$ ^2 d
: Y" S* M7 D2 a0 N8 G9 i' R
* E+ a: K. o8 x4 k! A% S
; @+ y$ |/ D" e: x import matplotlib.pyplot as plt
1 Y- E2 j, B" t) |( }8 i: u+ F+ \ import pylab
* p1 p, c! Y$ R8 V$ } from sklearn.datasets._samples_generator import make_blobs/ z2 l0 o8 {8 D/ f ~9 M
import cv2
3 _0 o" x+ _, k3 @& v import numpy as np0 q3 }1 t% I7 H+ \1 D- I' ~( ~: C3 ]
# B) T, j# Y$ A5 X2 H% f
plt.style.use('ggplot')& i5 A" W: R9 C& h ~& U& `- P2 u" {
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)0 I5 c) N- D7 Z: e* @7 }. ^, Z
plt.scatter(x[:,0],x[:,1],s=100)
Q! y; m9 i1 z% B ; Y4 C* a& J9 S4 c
s+ w/ ~) j$ C( X1 L
criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
) n/ l- e8 X3 P2 W. {* ] flags=cv2.KMEANS_RANDOM_CENTERS
- W0 O4 D9 n5 l% n9 I compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)* C6 M" W, f+ B! A- w
print(compactness)
0 r) { \% E; t5 S2 x
/ S6 C! o' U" t' l: t) J* F/ ] plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
6 k7 J! N6 Y: v( g) j9 ~ plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)6 }2 R3 |8 v8 s) Z/ _9 B
# c. F a* i9 X
pylab.show()8 a* o0 }9 J- S8 p6 x7 A
! H, C' ^8 y: J# G5 `3 x
% ^6 V+ i7 u$ n) e# d2 R 2 U5 O" F5 I. N
, H4 M4 F" \% E0 P# M+ d ( A2 j7 J7 `. u) G6 |7 L4 y
2 y4 \ k- K* p- z0 q
|; g( v h# ` 17 A" {+ E1 g, ~
2
. J" E+ [( A) a) |* X" ?* D 35 i6 i( p) A* W( m/ v
4
% f% I! ~3 m/ O) j 5
$ ?( N# V- N) T 6& U0 b" x1 x0 U* U- h: ?
7
! V: |2 \' {1 y M6 g+ B 8# }2 z% I: C& n8 Y, U. I" l
95 [6 H G( H- v& F
10
, {; D; [+ k/ J% Q5 _* { 11
) J( S. U' y! q0 Z( _& z 12
, S& w1 p9 R5 {) ] 13
0 k* a* h* d/ S1 C% |# r 149 u h5 \* H9 n' \' Z4 f' g9 U
15% z/ o5 ?% h c f4 [: r3 ?
167 z/ e- G, t6 z5 N/ n
173 e9 v9 p/ i: ^* Q- }& i# v" L
18
& G- K( ?# c& u0 g 19
3 C1 j( }) M* c7 \( F 20
& a5 {" t C2 g 21
2 z6 u j3 X) V+ j! ?: i1 \* v0 q 22( S4 |- O9 O8 i3 g. n0 s
23
! K4 y4 q' A" R P0 r; \ 24
/ v; z, I1 \9 _( o9 F 25& ? b8 I& C, K9 z; a& e
26
" l8 T3 {; z. ?% L 上面程序结果可以产生图2的效果。
+ U Q6 `. A: [7 u 2 J! F: k. V3 [1 y( U
print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。: r/ _- E6 R6 n" C7 |" |
5 ]/ m" n1 \) g3 |: G! y% ~
当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
8 r$ q2 x+ t4 P: O
3 h& X& U1 I% e5 { 3理解kmeans
1 Y& @& r) q, s kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:7 t6 b" a3 V, k3 e6 [) i6 c6 A
1.从一些随机的聚类中心开始, C3 @8 J! t; A e3 D5 ~
2.一种重复直到收敛3 Y* w. b3 [9 {) d0 x
5 Q' N, P; S8 k8 d
期望步骤:把所有的数据点分配到离他们最近的聚类中心。7 o+ n! _/ b# K2 T- ^
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
: x( g, \. \! d - D4 o& P U( n, G+ |
它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。' ?. l8 z. i" i; W/ m! h
————————————————
5 s5 c- [" d# p6 s8 m- S, t 版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
2 k; {! h# Y% F# p4 z8 P i6 M 原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
( Q/ J4 H6 B0 S6 N& f7 \ 4 M- ?7 \& l/ ^; r) x# d
/ ?( q, m( X9 Q4 c$ [
zan