- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558403 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 172894
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点( u6 T( g) ^' Y
! D* c: b6 [% d) ~$ k
到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。/ C+ o1 ^: t8 @, n, l
5 k. I% z; c+ ~' U& q% ]这就是无监督学习 。2 t- ?$ v5 a) e% T, i+ L+ V$ {0 t
6 i. u! S' D; a! E( E2 L
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
8 c. z/ k+ \3 n; D
& J; P5 @* }9 c/ O* L+ d在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。$ v2 S5 b0 _5 ^5 m" y; k
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。. k a5 x9 i+ s$ C$ c9 `* i
* o9 [' e* t5 y5 r, B
解决的问题. q1 [5 E/ S! h; J% Y/ A% e7 K
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。, z7 m, ]( W/ b9 D/ d8 h" b
2.如何在层次树中使用聚类算法。他带来的好处有哪些。) k5 c9 D2 N. ?( y
3.如何使用无监督学习,进行预处理,图像处理,分类。' k) W9 X. o" t( z& g
1 Z _! Y) c6 t' o) ~1 h3 \1 理解无监督学习7 X3 R' i5 Y- l' M! H2 [
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
* r D4 O4 a" N" |+ p+ o' F6 ], m/ n无监督学习的应用包括一下应用:. ?* A, J$ }# h4 ?2 i
1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。 E, T. s9 k$ A; U B- q6 Z; e+ }
2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。9 ]& n, k! L n5 k9 b! j
3聚类分析:1 _2 t# Q; ]3 u0 D# E
尝试把数据分成相似元素组成的不同组。
- S! U) @% v2 @6 o; o! @" i9 }9 a/ F, Q5 o7 w* b1 ]. ]
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。$ A/ c; O3 O- S* ~6 s# ]
3 F; P+ \( v% H/ ~0 @/ |0 v
话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
4 n i! @* ]& _4 u0 \# z C0 V5 P8 @$ ]7 l. y+ L# F
2理解K-means聚类5 j6 z' f* h1 j2 a4 l0 i
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
# a( w% ~% |* l4 }; V V' {, x! D
它通过两个简单的假设来完成最佳聚类了。
: r$ }8 ^- B9 p+ P) L7 u k1 每个聚类中心都是属于该类别的所有数据点的算术平均值, [( U& r3 T1 p( U/ l" s, ]
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
8 Z% v6 M* r7 t7 Y( B: l1 l+ F6 X; e5 ^
2.1 实现第一个kmeans例子
( T4 V4 S4 Q3 h6 ]首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。; R: I5 Q" c/ W( i
! j! Y$ m" m$ ^/ d
import matplotlib.pyplot as plt
1 O# J- T/ H# r: S/ K! Y3 Nimport pylab& P. a2 E! m( c6 I
from sklearn.datasets._samples_generator import make_blobs1 i9 f) t4 [9 ]) X7 H
0 l* h4 `' a% V3 mplt.style.use('ggplot')
$ ^! u/ O. `# Z- h) ^. m U$ K, Fx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10); ?7 t- c1 F4 S G3 N s0 o: d
plt.scatter(x[:,0],x[:,1],s=100)
9 W, f$ V" h8 A# U, y/ |5 B. vpylab.show()
9 v* H: X9 U6 R+ h" C
4 @" F- L" F4 Z4 K7 U' ^9 g0 T1 ?* a/ |6 D: A' `+ ^: S
13 v2 Z2 M9 \+ R7 V. C
2
. a; X q8 M0 J+ Q31 s7 H' {7 s! V( ]0 P
4
5 A# X+ ]1 l! S+ q/ @; _. a5
9 D0 h% H: }0 p& i0 @2 U8 O! i8 b6
( h2 h) e( W" ?8 X7
9 v# J& l" o/ b5 h r& k, k& l8! q0 |' W. H7 G
9
& N' y% Y5 t' y- E! A10
j) g! B; K5 Z2 k8 Z, b) w# ]' }9 J! `% l% }* J) T' v2 H
我们创建一个四个不同区域的聚类,centers=4,一共300节点。$ } v4 |8 n( V% X& r7 b
如上程序生成图像所示结果。% I e& b1 \7 W0 `) u3 ^6 L: F( R1 R
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
& N9 ?4 K1 r4 `1 m2 I2 [+ Dkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
; B( W8 r9 e" s, W当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
$ _9 Y$ z7 E& |' K# P% m) i4 J
2 s6 U1 T0 X! Z P/ p$ {4 l, ^我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
' @: k1 P: Q) Z/ e2 l1 I4 c. ]- i* J* |9 D
: X* o7 j8 p3 S$ h9 B
% N- s& a' ]) ^; r. j8 ^
import matplotlib.pyplot as plt, G8 @5 Z( Y. w
import pylab. S. Q4 U. r0 y5 r- N. w V
from sklearn.datasets._samples_generator import make_blobs* A8 h2 |. ?/ W$ N- N3 O
import cv23 c8 R2 l3 l1 A' m+ g
import numpy as np* E* M4 O4 l' o; p- A
% c7 q( E% U" g: z x. S
plt.style.use('ggplot')
- U& a8 i3 {0 E4 y: \7 rx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)7 a0 l- o2 I: t: L
plt.scatter(x[:,0],x[:,1],s=100): ?: k% r/ t" \) U9 R
" c# r( Z5 l4 Y- E+ S V5 Y5 M9 M5 s! j
; o6 a) ^) d# R3 i$ @& N r0 p8 Ocriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)$ o8 k$ s+ Z1 x9 M
flags=cv2.KMEANS_RANDOM_CENTERS( N$ b E* U3 q
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
# ~. a) x M9 L3 ^! yprint(compactness)
; G) l8 L* s5 d% m" ]6 u) ~) B! i7 a& }) ]7 i
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
% p( L" Q1 Y5 V* c2 c4 K6 _plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
/ R' {# f4 n) m& L$ H- w$ m* H7 ?, j$ A# [! ]* b: G: H; N4 {- e
pylab.show()+ C; F5 s7 k1 ^6 F/ a
% V( |1 z, d* h3 k$ ^* O
$ ]) D7 J- b& y" k
# M! X5 K- `/ q# k3 u+ z
; W% C% H2 n! E% r7 s# ]0 {3 x( X2 A* C( j/ Q
2 ~5 b" ~, ?$ ?
) l- z1 F* Q, p. V1
% S5 v. z: @& g& R2 m, y5 l6 Q; j3 |* `
3: B& ]% D; o% P. S# ?" j0 p
4
5 W! c3 F' x, P7 `5
& e0 q* o6 H3 m- S* U/ I3 ^66 k9 J. D. l- M* T' d) a7 O
7
( Y k' S+ |6 c* Q83 K& O! }" k: F! @
93 F4 c1 I4 [1 m8 i1 E% r( ]
10
/ E3 \% Q# k" j7 M11
r% ~6 f. R0 d* g12: G7 y8 S, C$ |% t
13$ R/ K1 y1 D3 o( `& v" U+ G
142 N9 E3 k$ P! w3 l2 y. N
15
/ x" y3 Z q* b) ^+ ^) f( r16
3 N" m5 j9 y+ @# B0 g) H17
# q* m9 H( c7 P1 X+ G/ S8 ]182 H P7 x& o3 w& D4 B
19
5 Y- [' D, u r* n$ d20
6 K5 J j8 q7 H214 W7 R4 \; E" S% L! I
22. c, h* U9 @" |
23
" V5 B( q. _2 S+ W, t24
" V, S6 y2 l' j* z: Q8 I259 a/ H, D B) d3 `# J+ e
26% \9 s7 m% F/ M$ j3 l
上面程序结果可以产生图2的效果。
4 p3 m& i& u& ]- _
9 m! {. n) [) l+ Z1 i3 n# b s# G# Lprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
6 A; ]- |% v: h$ A) J/ ~2 H. h) G, l. j( b# T$ P2 J) Q. _% p% |
当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
0 M/ ?9 m; Y7 R0 c0 e _3 B2 U4 M3 |5 b; q; A7 T* D
3理解kmeans
- a$ J( ~) \2 s! P0 ]kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:1 n2 l% S9 ~6 F+ b
1.从一些随机的聚类中心开始4 R2 e* Q$ ]$ j7 L% E! K
2.一种重复直到收敛
- ]. z# d* v( l6 L; K: b9 g, k% b/ z) }
期望步骤:把所有的数据点分配到离他们最近的聚类中心。
, Z9 |' l9 n# w6 g0 Q' i最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
. ~# R5 F. t, f2 }7 | C0 t. N2 U2 K4 v% y
它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。4 Q/ m8 G! M( c! [
————————————————
6 V. ^: K8 X" `) u9 N! w. X6 ~" ]版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
: A0 K2 f% a* i6 k0 P/ N3 ~9 @" q原文链接:https://blog.csdn.net/qq_43158059/article/details/1267890003 I( F. e. \/ m6 t
! {4 o. ^ v* Z) g5 o# x
6 z9 {" F" v' r9 J* t |
zan
|