QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3444|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点/ G% e% X4 Q6 N. M  V

    , c" ]! i+ L! g# }到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。4 p3 m* C& _$ U3 j- ^
    , J% U( O/ ~5 L! j6 i" X$ m
    这就是无监督学习 。# e# h! z+ a) a4 U+ I% T2 y
    # k) u. q' g9 k5 c- o0 q1 e& p
    在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。) l! F& V0 |2 x: Z- g( W* K: G

    4 L* k9 q! D6 N+ d2 J在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
    0 s5 Y' N8 }! V% y5 Y0 U. M5 _0 y作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。- Z9 ^3 H5 K1 I

    , E& }) U) B6 C, R9 t! f! E解决的问题1 u4 d- G8 I! R9 q9 B1 t2 m
    1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
    2 B' C+ c& A, z6 K2.如何在层次树中使用聚类算法。他带来的好处有哪些。$ W# l, Y2 |' v" `7 L4 Y$ a
    3.如何使用无监督学习,进行预处理,图像处理,分类。% R0 U7 r5 D9 ~- e* D' q0 d

    ' K) s2 F5 l; ^) P. k* w+ h7 Q1 理解无监督学习
    ( p2 K& i6 W+ p. q5 v无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。; V9 D6 Y1 @( N
    无监督学习的应用包括一下应用:
    3 l* b8 _; ]6 r3 D1 D1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
    + C/ Y2 u4 C" m. Y$ o1 d2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    / B7 g% p! p3 o" k6 B0 n3 H1 N% f2 g3聚类分析:  n* q, r4 \& R% P: a
    尝试把数据分成相似元素组成的不同组。/ R0 u, s" W# ?4 v" }7 D& H

    9 y$ T2 ]- H/ M+ f- |' ?无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。# Y9 [- c8 W3 _. }) T

    - j: M4 Z$ `8 D# h+ _, G9 x话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    ; P4 J+ `* b8 K2 `) L7 n
    2 u3 K& y9 }) C2理解K-means聚类* ]) ~, v  {3 P* M! t8 N; b
    Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。. C3 Z+ d+ r$ p& V9 B" t" e" M2 h- C
    + c" G2 j; _6 M6 W3 i
    它通过两个简单的假设来完成最佳聚类了。3 j6 b" d) R8 `
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值& T9 z. C% T3 K/ ]. t* q( \5 C
    2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
    + F8 N8 L* P- c
    , p; }/ T5 n* h2.1 实现第一个kmeans例子
    " L& K. B7 a' y7 Y首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
    2 l5 v* H4 K6 y# \4 j7 l; P0 Z# z! K) v% s1 S" I, J
    import matplotlib.pyplot as plt
    - }/ n  Z4 R9 [1 Z5 K& g% Wimport pylab
    ! x# |% h/ S, J( ^! hfrom sklearn.datasets._samples_generator import make_blobs$ S) F) M& A) J, E$ Y, E0 Z
    , @: l8 J3 s; F5 A6 W" Y
    plt.style.use('ggplot')
    . l; m& J7 {7 A; zx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)7 o: h- k. f! _6 F2 j! g4 e5 t9 A" x; o4 Z
    plt.scatter(x[:,0],x[:,1],s=100)
    2 t. a' s) {* ~7 Tpylab.show()
    2 |& l8 P6 G! E) F. |! y
    , M% O! b5 ?, p/ F" ?5 a& X
    ; F  Z* f+ j! h' D6 @1
    / Q- o; X8 I4 S5 V, p( y2
    / v: `  E3 E+ B6 P: Z: Q1 `; C3
    ) k5 r' ?8 u2 Y- E! e6 p4, P' e7 q5 I8 O! b( x- i
    5! W& r3 r) e2 t, F
    6
    1 c: W, L( W  x7) o# j( ~& W; G/ p6 i4 N, v
    8
    8 Q4 h2 C) b) B9 Y; b* `& I& Z9. \  A6 [' F( X  `
    10) v) `1 g9 a8 o# ~; R
    + |# ^% i5 v- s+ r
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。  I6 D' O0 N! g* p- \% I
    如上程序生成图像所示结果。- {+ Q6 l/ y6 j. w' b
    尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    2 s+ l' u( `2 k* e# Lkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
    : Q3 B% ~( n4 [6 J5 M4 d7 u5 x9 l当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。. o3 [2 b, u! A2 \# c1 X
    " i+ y0 {0 J, Z+ k) F2 k
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
    7 U% N, r' y7 I% G1 F  L+ M
    . [- m2 Q; {, \& e% F/ @* X+ o
    2 ^, w5 I. S6 s. a' ^1 }5 y, w; F" q1 g
    import matplotlib.pyplot as plt
    3 ~, Q* N. c# `6 |* N" zimport pylab
    ! @/ }; p" F9 F0 `! g8 Nfrom sklearn.datasets._samples_generator import make_blobs% t9 Q1 e: }' O, U( j5 c+ T+ H
    import cv25 b' m  w4 r  C4 @* r) \" _5 X
    import numpy as np
    + m: F' a- M( m( @6 n! Y& `; [  B9 L) R
    plt.style.use('ggplot')
    8 L6 V" g" j  j1 r* P6 L( ?2 Z& Yx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)& s( }" t8 G% J3 n( F
    plt.scatter(x[:,0],x[:,1],s=100)
    4 H! ]3 b" x# P5 f- |& }6 x8 J

    8 X& g' n  w0 g6 |* j% Bcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)5 Q' |+ ]9 e' [' Q6 Q
    flags=cv2.KMEANS_RANDOM_CENTERS
    % m; N, @& h2 _4 G7 [compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
    ' ^* ~1 G8 W) o# Z  c$ c3 cprint(compactness)
    & u! k/ ~. m5 T7 k# E1 f( r/ w( B% u7 l
    plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')1 D6 n5 D2 e7 \% h3 K
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)- U/ B1 w  D$ I0 {

    2 J5 U* Q, ]% ?! u' Spylab.show()
    * F, Y4 O+ O- \. B5 Q* K  ?: v4 }/ d6 l" d5 m* g: b4 J& I5 S& a" R% E
    5 C( K  U; ^% T0 V1 l9 z3 z/ @7 y; p
    . N. X$ c4 D& T9 Z7 U8 L  [6 ]
    + S! h  e- e, W3 M2 T0 {, ?

    4 Z  b9 o5 r/ Z( d6 S) W) ]8 p* v5 Z# ^9 g- G% O
    $ Z( V7 {! u/ p0 M* `0 l
    1* _: I- v" `7 P2 x8 v' l3 E" p
    2
    ! x* ?( z, }- v3+ e0 c& Z( }& _/ R9 m/ w9 C
    4
    ' S7 @4 u8 J0 O4 H5 a3 }* Z: i1 h5" d/ N  ^1 h$ f
    6, E6 `! @+ k% f& {' K! J; P3 k
    7. a+ e9 G( U) ^" H! i
    83 ]" \. V  l" ]% `6 x- w9 V- ~3 x
    93 `5 b$ C6 D, j+ A; m' N8 s: K/ f
    10
    9 f: b& v% @% C% R11
    - b! D8 z6 q: Y. X1 g( e12) U8 o. D2 N$ o/ d: ~3 f
    133 d7 C: l" ?5 c$ P) ~7 v
    14  M8 S% f0 @! t; G5 f
    15
    ' T/ F% @0 z; K! a+ j  ?4 u  x16: _' k1 P+ {, V. z
    176 _% @$ [1 m6 ^9 d' N' X; g
    18
    + G8 H& C* A9 V0 B19
    6 w. U) t& W! D; a6 {$ w; o! v20& M, |5 D  _& ^! [& [6 p3 @
    21
      W/ V( \" r" J* s22
    8 k4 x, {' K3 K9 K2 |9 z23
    3 y; V& w" M' y- t24
    4 N" I8 V/ c% g) }25
    - J& j& \. [& ^261 S1 p$ J) g% f& \$ ?/ N
    上面程序结果可以产生图2的效果。0 f6 F5 @; [+ E( L, O4 W

    0 {6 q/ X" Y! W% Eprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    , I6 M! V# M0 y% f& K" _, n5 D, L' K( k3 g) E/ V
    当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
    6 {5 S- m- P, Z& K5 y4 R
    ( H( j# `  |1 M- Y7 Z7 i8 t$ G# Y3理解kmeans
    & J$ K& m6 Q+ fkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
    ! |8 P9 T! u& I3 T* ?1.从一些随机的聚类中心开始
    ( j4 C: ], m. C" m2.一种重复直到收敛5 S4 c1 l: }/ h" C/ d% S8 o
    5 m4 t- k7 R; o' M7 c/ Q
    期望步骤:把所有的数据点分配到离他们最近的聚类中心。
    " s2 T  n5 n4 p! B% R: u) ~最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
    ; D- ~1 S$ f5 t7 ?0 h& C% F
    . I3 @& l# ~, }6 G- k它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
    $ P  ]' O$ l( P: |( o3 Q————————————————5 S5 L- a' T1 M6 x) s& H3 E6 a" h  C
    版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。3 g  I3 G. c2 b8 n( a9 Q, p
    原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
    " s% b, g% i+ D, Z; ]* D8 J  w' F- S) e* T9 e. l/ E4 y

    . W  @: X7 Q7 @$ t. O9 Q
    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-8-24 04:27 , Processed in 1.836110 second(s), 51 queries .

    回顶部