QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3397|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
    ! 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
    转播转播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-5-25 13:30 , Processed in 0.395049 second(s), 51 queries .

    回顶部