- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564445 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174556
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
! m1 R, S J' `
3 r9 P! `5 Y# M/ ^5 q4 o: o到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
. b# F3 b% x5 T& @* u- R8 n/ b( o4 g* ?: k
这就是无监督学习 。
/ b% @1 `9 ]5 f, {7 R0 q1 k8 { q9 [" p+ k7 e
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
; s) s1 r; d( a/ U+ @; ^/ W' d* r% E# b! C* P( c% [
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。% I# r2 V" U0 q" _3 x7 F
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。+ q8 D+ i- h, ?1 g/ Q
5 m. H0 R" A! W/ `1 ]解决的问题
2 D4 X2 @% Q) l1 z1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。! l9 w( U# D! ]2 [# x- F
2.如何在层次树中使用聚类算法。他带来的好处有哪些。
/ K" w" K+ [" U, e# D" |( ^6 W' i* X3.如何使用无监督学习,进行预处理,图像处理,分类。% j) c1 L7 P0 N4 e9 K
, x$ m9 P- o: {! J: u1 理解无监督学习
; ]$ E+ c7 c* `. S# b q$ Y无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
- K7 R4 a3 M. S" m: f0 N5 K无监督学习的应用包括一下应用:
6 A" j$ Z; N4 t8 i1 z1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。, e# {5 x6 \: O; z5 M2 `4 J. K8 V. J
2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。* f/ e' D0 y4 L0 a: I
3聚类分析:) O' e: J E4 V9 U! w8 _* S! {
尝试把数据分成相似元素组成的不同组。$ v. B6 U9 ^" Q
% Q8 h+ D4 Q0 b3 o无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。- ]0 L* Y' k0 t; `
6 M3 V/ V% W0 i& Y
话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。# n7 W+ W4 \: ]" ]+ f9 [) S; P2 R
% k9 I% Z* Q+ i
2理解K-means聚类
) F+ I$ i3 j8 n" qOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。 l( Z) M9 u! y3 J
/ }+ P* d) x; c4 a S, o
它通过两个简单的假设来完成最佳聚类了。7 W: n/ y. A2 I" |3 Y
1 每个聚类中心都是属于该类别的所有数据点的算术平均值+ w* n3 G" U8 }" l H) y7 D/ u
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。9 J% F6 N1 M2 F) a7 _
% Q, N3 l) l1 ~& |/ T/ B
2.1 实现第一个kmeans例子! B2 }) O5 \3 I0 Q2 Z
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。" [# l; n* `+ B/ c; ]6 k
, f' S0 `9 C/ ]5 `import matplotlib.pyplot as plt
. T( k1 @; P) U* |6 K. `8 mimport pylab
; C: K% c5 {9 s6 f$ z% cfrom sklearn.datasets._samples_generator import make_blobs
' s% S$ f* `& C3 F9 R* t9 s
. M' S8 b: e- Z; jplt.style.use('ggplot')1 g( F5 z$ P# D) \8 @
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)1 h/ W) U$ V# r' \" _8 N! a
plt.scatter(x[:,0],x[:,1],s=100)0 x/ |+ }( O7 B
pylab.show()& N) h: D+ X( O
' x6 B$ h5 q3 `6 s# V! ^# k/ O4 t0 X4 v( g% \* }5 ], ?+ f
1
& b" I1 g. K$ z1 g4 f$ i& f+ N! I2( r$ u! d& e. G9 s V, i
3
" R: E9 x* j8 U4+ }# U8 `& g6 q0 ~) i% `
5
1 ] [1 W( p& Y3 b& e. {7 o6' b9 d( `+ |* c" T1 }/ \
7
# h. z0 i S3 Y1 w6 e8
' X* j9 S i1 l) g* g. i9
( _3 g( m% g3 R8 n+ ^# [) A8 S5 J10" _5 {5 C( B" b
6 p7 R; h. m0 X
我们创建一个四个不同区域的聚类,centers=4,一共300节点。
! C! Q8 A- ]! G6 N7 A& }8 [如上程序生成图像所示结果。& I9 x9 |& {* w4 a7 @3 {: _
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。0 H- [8 ` D- b/ _# Y7 y
kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。, ?* j; ?* Q: q- l1 J2 z: |! g) l
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
, T6 a( `+ G- ~) Q/ M: y- K1 D1 o3 P$ I' J0 W" E
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
8 b# g. o4 U5 ~$ s% i$ [& e: C+ ?4 c% I" f0 D2 ^( D# Q, O3 n( r
, `* z, Q, h- x. G" f
7 u, o" p4 ]4 h
import matplotlib.pyplot as plt- |/ ]; H$ P9 ?9 i$ l5 U. D
import pylab% U: ?) T8 s u+ S" B/ c$ }
from sklearn.datasets._samples_generator import make_blobs. F# |6 \+ w* d. G0 q
import cv2 q" p; V7 m. h: P& W" z( W
import numpy as np
, ^% I( h: N3 \# H$ c
+ ?9 J) P0 m) n& j3 p- gplt.style.use('ggplot')
, l. O$ u/ U* C8 h8 p R$ ?x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
1 D/ b7 ?# a$ ?plt.scatter(x[:,0],x[:,1],s=100)0 `) h o9 S7 x! g, a* {
: y1 {4 B' u: H' t3 T
) R$ g! ]& v8 l( w) wcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
2 g [8 t' p0 z2 Y5 t& e# W0 J$ R, ]: n+ Oflags=cv2.KMEANS_RANDOM_CENTERS
2 ^$ i9 e3 Q ^# n; ?compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
+ Y" R& a1 y7 t* ]1 v1 q# ` fprint(compactness)
, }* U9 H B2 ?& [; P+ ?3 x# y* ^8 G3 ?- C' O% \, w# e! T4 X( q( B
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis'): s: ^$ y2 o0 U1 C( I, a9 N: {
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)7 J' ]" {, g" @: S8 ^/ C
# ~4 X$ O# I# t, Lpylab.show()
+ {+ P& J$ c' k+ i6 ?+ `% D1 i* Q# H) Y8 F4 G
7 \! [/ Y7 q- O' O
% @! i2 c& S" |& h+ x4 g+ F2 N
5 E w8 m. C" b T
6 F" l1 @9 H1 _- A; t1 w* {, ` [: _8 X) t' l2 {
1 E8 V- m5 v E% L2 t
1# e1 A# q# o2 f% ]
21 p$ z5 C9 I8 _; q) J+ \, C
3 G5 m U" y7 v% d2 c* q. R
4
9 Y! [# m5 i0 y8 h, w: h: ]3 \52 M. Z7 x' `/ Z. J4 Y
6
. X$ j8 H5 o$ _) c8 P7
+ M2 {9 Y$ U9 @4 y y L8
# I- w. h% a; ^+ S& \9 O% B90 q( V8 t; k2 `" [/ E/ Z0 r" f
10
* w+ b( e. z' W11
* \( u- ?9 o+ o! |* _0 f. O122 g5 Q4 N8 f1 B% x8 Z7 w- b1 F1 l
13' T( T' Z9 B0 @
14
; v4 h% K$ W' ~. z15" I) f: v' s( d# h) R5 I) _
16* }; t% A3 Q4 N4 s* d4 k# t
17
* E. `3 ~0 d3 g* O" X k185 [! F! L& g) [) u2 T" _& q
19
# D, q1 X) v3 u( @7 q20
7 c3 D4 @3 O7 k6 g! ~, z21/ I9 E; ^! } ]* |
22
; a1 o( v# ~8 x3 e. n23
$ _7 e# t2 C: r# x249 ^2 w4 Q. m8 W5 E# l3 h! J# ]3 M: s
25
& N( S( e0 _3 g& `5 f26" E n8 }4 u( @9 @# V
上面程序结果可以产生图2的效果。
: D ?" t) o, ]4 A% C6 ^
$ |0 _8 M- H1 mprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。9 J( c8 D; `. a# r3 O3 |
8 `( _+ V2 j5 ^ _' m; Z当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。! d( f# f# h+ B1 l" x1 {) [
6 J4 e6 c- h, |& ~5 b! F1 X$ ]
3理解kmeans( x! V7 }. I& q, \1 ]. D' c
kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:1 Q7 c3 z1 C7 R3 A3 [9 G% P
1.从一些随机的聚类中心开始
4 H8 ]: B9 ?7 P% } K2.一种重复直到收敛 u5 ? I- G' x# O) U S8 c
7 x5 _) K2 F: x9 _0 w期望步骤:把所有的数据点分配到离他们最近的聚类中心。
; u/ {4 d* s, q& _4 d, x$ e8 ^最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
: T! k* W% x0 B# ]; V: [
7 T2 c( R* _% n2 ~) v/ M它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。8 Q- }4 r# u) F8 V1 ]
————————————————
+ e/ X7 V/ }6 e' Y2 Z5 B' o版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
, x* \; g& l& ^. ]( F0 ^0 f9 g原文链接:https://blog.csdn.net/qq_43158059/article/details/1267890002 \$ R' E8 N6 F/ }
{: v- v( m* a# j* J5 C, G! T( b& G' l: y! U% S
|
zan
|