QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3414|回复: 0
打印 上一主题 下一主题

[其他资源] 【机器学习】无监督学习的概念,使用无监督学习发现数据的特点

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-14 16:37 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点* t1 ?6 O. C6 Z0 ^0 W/ R' I- H" b% u
    3 ^* g/ Q, j0 r. J& d. Z7 H9 m% N% {3 I
    到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。, {8 F) ]. m, g; G5 E6 R
    ! H) ^9 J, a2 }! Z2 {
    这就是无监督学习 。# K% T& I) v5 a
    * E5 e& R6 i7 B& b. r( H
    在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
    ; k5 i' I( P( T1 d& D' p7 W% Z! m4 ]% q. D# K+ b4 \+ w# E! s! J
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。' ~" |3 W; u5 g+ k9 X) e
    作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。4 F& C' M  [; P4 r% x$ \
    ) C) _, e+ q( b" @
    解决的问题
    . U5 K7 a8 P  N6 n$ g4 E& O1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
    : C5 `2 e9 C, A2.如何在层次树中使用聚类算法。他带来的好处有哪些。) [; H9 ^9 M% W
    3.如何使用无监督学习,进行预处理,图像处理,分类。: T1 j" W# K4 N9 O% U* N* k
    % V: O  [* D7 t6 a; s  T
    1 理解无监督学习& G" m* Q9 |* G5 J" J: o
    无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
    * U: ]6 L: O. W' b# @' E无监督学习的应用包括一下应用:1 V" ?# ~9 R$ a8 i! v. Z9 Y
    1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。0 L7 m# M2 B, ^. s
    2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    , x' E# }! u6 P7 p3聚类分析:
    2 a& k  g% T- V1 S6 @% n, c尝试把数据分成相似元素组成的不同组。4 N7 D: D, f7 s9 W
    1 l( L7 n; n) f8 X
    无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。5 u" ^$ ?, {  i- |1 A

      I% s; J& [. G* e. C话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    ; ~8 w$ f/ ^- f  O- U. _; k1 D: `2 _/ b7 S! E) m0 @8 v( ~. ]( P
    2理解K-means聚类
    9 I" S- K$ @- E! v1 x8 _! A7 wOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。! w. b8 F  w0 ^/ i

    , s; ^3 r; N8 N$ b4 m它通过两个简单的假设来完成最佳聚类了。3 {; A- O0 P: y( n
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值
    1 [' {8 @3 Z& ^( _) w2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
      ^$ M& X. ^3 M9 F- M6 \) Y
    ; V2 D4 y, y8 D2.1 实现第一个kmeans例子' f' r3 U/ v$ f4 P, a
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。! ]. X# T( k/ Y) s" f* `

    - J+ O0 R  u" @& F, Zimport matplotlib.pyplot as plt
    1 N! n4 L7 L1 B/ Dimport pylab" f# N9 O+ E7 |; j4 k$ q4 q
    from sklearn.datasets._samples_generator import make_blobs9 v# c  m0 M5 F1 P; o- Y9 F# V1 h

    + Q9 u2 A1 Q( P$ I( b: s. Kplt.style.use('ggplot'); {0 ?- x+ o' d9 m3 l  @9 W9 I* d4 K
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)! r& [. l& X0 q2 M( N' |6 ^" q0 |4 L, P
    plt.scatter(x[:,0],x[:,1],s=100)
    ( h0 a, |8 @) e/ R" k+ v  E# apylab.show()9 |2 V( S. l3 J7 d5 B

    , C+ i8 N; S, C$ S4 d
    . u" L2 U! x% b% P2 l, ~1/ I$ N' S; V% |- v8 {
    23 E) L4 N% i; T- t; E
    3$ X0 [, V* A/ X5 x  j6 U  X
    4
    2 k* A* _" {" K' r3 j5
    / F- e" \5 y0 @0 z6
    ' r* v8 l9 Q! a9 s6 H- a# N7: f! h# w5 m8 M. N5 o9 q. l0 P
    8! d% y1 r: m& J- M3 D: e% ]
    9$ O, d. D6 r1 O- K$ @- m6 m( ^% B
    10  r0 o4 ^" d4 O$ g  X: F
    5 P! i2 W  ]1 x
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。
    ! b* ^+ j2 B3 O. y3 A! ~如上程序生成图像所示结果。
    : K" n% H) o& d* p; Z4 S/ L$ j/ x尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。1 X: T: l' m7 i# \4 ]
    kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
    / L3 M- h! ^9 b' d* h当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
    3 ~) b) n( ?/ S- P; s( H3 ]* w! T9 l! w
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
    7 `) h. a4 V5 [8 [. k, C
    ) ~* B) W2 {( p5 u+ ^6 T! W
    ( O. }) d) d  P% k. [4 ]/ O7 C, d# u- h& F8 Y
    import matplotlib.pyplot as plt1 f& z9 K  L2 J
    import pylab
    ) p& x# b% U6 [% i( yfrom sklearn.datasets._samples_generator import make_blobs
    5 n" f# |' X" w  Gimport cv2
    4 g) R& j" @1 j0 kimport numpy as np
    $ D  Q3 ]" E, P6 L6 a
    + M! E/ x! R4 R% {8 {& J3 }! \plt.style.use('ggplot')
    3 ?: m- C. z8 a; ^x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)9 x$ a* s$ \: e8 a- M: j& j8 K
    plt.scatter(x[:,0],x[:,1],s=100)9 ~* k' g" G' A" t
    9 p7 A; p# `$ h$ C, E

    3 ~  h; D2 _4 E3 B/ v# g; }criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)/ d5 R; s& X% G& m9 p9 H2 C
    flags=cv2.KMEANS_RANDOM_CENTERS. P' o0 w# i/ s+ z
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags), [+ e! k& C! G
    print(compactness)4 P% G) C/ G2 x" @

    : X% ?+ J( W+ w9 u) H# W3 {$ eplt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')0 B" s4 ~# @: ]0 [7 D
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
    & o6 B! [% c( F5 ]" W: d2 b& b6 M- T* O. Z+ B
    pylab.show()# h2 R2 ]6 u. s1 \, |7 r

    - t- F: @+ w& e- a4 H" |6 q0 |* ~
    ) i: H3 g" s2 H6 F6 N7 m( S, X; s' y' p% @- S

    4 A4 z/ A" M5 n" k5 }/ o
    2 \! F4 \% E# o) n) |: P5 r9 Z  G. G* ^6 x4 Q' k$ _

    ( P! v+ `6 m6 G" K1
    7 \# f) W! x& Z% b" m2
    6 V8 L8 C1 J: }) F$ d3
    * r( u, q2 t% |/ T- |. w41 A! |& q" ?9 c! j, |9 x( {/ }
    5) y2 q. P' A7 V/ b+ H/ m: F
    6
    0 b: W' W+ ^" Q7; X7 g$ E( Q' G( `8 V& c  p
    8
    - L) y/ j. L- S+ A' R9
    ( l1 [4 q; s: ]8 R( w104 _( \. g$ [8 w6 L2 H/ m* s2 ~$ _
    11$ S- v4 c0 ~+ C# T
    12
    3 K1 _% W# I, M3 E& Q" l4 S13; S: p; @+ t! O7 k. T
    14( s  g4 B4 T9 ^
    15
    $ ]; L, v' {0 m# T- t16
    2 P6 Q! P' \' u; d* J  j4 W174 W8 Q, `' o$ X. o& j$ m6 h, k% b- D
    18
    5 t% c, Q. r* N6 s19; G: F( i; E- E% d2 {
    20. m( r4 e5 F( j3 l* `
    21
    2 a. M$ W( k, B' O22% C9 N# P2 L5 h- q' f- X) e
    23& H# q: o, R6 U8 T( u6 q6 b
    24
    . O" v2 x+ \4 X3 }* Z/ j25
    % B/ ?% E, q9 Z1 O6 O26/ ]  E. ?4 t% W! G/ h2 [* e5 D
    上面程序结果可以产生图2的效果。
    6 U, M  g- g" D" E! R' W
    & s& e& |! X! H2 Kprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    " h( O! j) m* l1 P* X% K# B$ e% R2 I- i( E0 P
    当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。8 a1 b0 A5 {0 G8 G% y$ D5 m

    6 t$ q( K; ~' C9 M! m- z3理解kmeans0 r9 Q3 f$ c: S2 M
    kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:, B; T( _& @* ?  J
    1.从一些随机的聚类中心开始& k* [$ ?  N7 b/ X: d) {
    2.一种重复直到收敛
    ' \# v4 W3 x' o& o
    & K5 o* _. F& s, Z期望步骤:把所有的数据点分配到离他们最近的聚类中心。( `7 J9 G( R( `2 }3 K- W7 v
    最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。1 Y2 ]: J; n5 ^+ T  a3 ]' p5 L

    0 b4 I% }! [2 n5 H1 H它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。7 U8 n  O3 |( O0 L/ i% b/ R: e
    ————————————————
    ! A( x0 i& P& C5 ~7 F/ J# x. Y版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。6 p- j! W- D* X: s. L3 X6 k  u! Z5 {9 g0 q
    原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000* ]8 _% O! s) y

    ( Z0 |% k+ g/ q! `" R
    2 _3 Y7 G3 I: \
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-7-9 15:08 , Processed in 0.392093 second(s), 51 queries .

    回顶部