QQ登录

只需要一步,快速开始

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

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

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

5273

主题

81

听众

17万

积分

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

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

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

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-14 16:37 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
    9 _9 q( O7 o5 J
    0 D& {0 _- U  j到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。7 v, L% j5 N- b
    ( `! }: ~% D% O9 P1 N2 B
    这就是无监督学习 。$ k0 [, q' d$ v7 x8 K4 f9 V
    / {2 h( }. q: Y6 o# P3 D
    在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
    4 x0 O% k* }. j1 b: o$ j( d# W, l8 H+ L& w  a
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
    ) p3 g2 y/ F- [0 u作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
    ( o( Q7 h! x' k" F: m; V0 T" P. ~- D2 l
    解决的问题
    $ c/ w3 g$ `* w4 S+ `& c1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
    3 Q7 B+ r5 s! g+ z( L( n, r. k+ p2.如何在层次树中使用聚类算法。他带来的好处有哪些。* B5 S5 ]! i* C1 W
    3.如何使用无监督学习,进行预处理,图像处理,分类。; F! K/ w6 w: h# H# z; M- S+ V
    ' y3 K- E% |. J, r6 r/ J
    1 理解无监督学习
    & o; }% `; H, d无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。/ U4 ~5 S4 K; y( ^
    无监督学习的应用包括一下应用:
    8 T7 \' U- T7 v$ m# X7 |' ?1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。$ F" C) I5 S9 e+ X. r' @
    2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    % ?+ \' l- U" T! {( O3 s% f- ~. w( V3聚类分析:
    $ h% J% @) d9 R# N! |$ ]" v- e尝试把数据分成相似元素组成的不同组。- I' g& u: N' C8 h

    3 h( g/ p$ |+ g7 S  a3 L$ i. _3 u无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。2 i: G2 d, m6 z4 R, B1 b
    * v6 \7 M( j: ]; A+ h
    话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    , ?0 H$ c/ O+ ?# C% h  B5 }& q- B# B" N- E( B& O
    2理解K-means聚类+ ]0 S/ Y& f6 z; G
    Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。7 u' F  l! Z' C4 E7 Y' c* ?( C

    1 ^2 F; f2 J/ r! H. ], d/ M它通过两个简单的假设来完成最佳聚类了。  g( h1 `9 z5 G( M
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值, Z9 p: R% j* Y
    2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。) }/ {. V! r& @

    + n/ h3 `( j9 Z0 Q* F2.1 实现第一个kmeans例子4 a! S- [7 M, v2 t
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。( H+ j) J* d8 X. X% v9 @7 `
    . w* g* c( k+ y3 h
    import matplotlib.pyplot as plt
    ( z: b- q0 G: C0 Q0 O. Dimport pylab" K& P$ n& f2 D. g6 ?
    from sklearn.datasets._samples_generator import make_blobs. Q- u9 n# I# U

    ' J9 e8 ^1 |! b8 Y' lplt.style.use('ggplot')
    3 p/ n9 V6 D: s) G, |x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    6 {+ G/ M8 b6 d% Gplt.scatter(x[:,0],x[:,1],s=100)& J) P0 O; v" ~7 Q: \6 q5 B" {
    pylab.show()
    : v- u7 r3 `9 L& U
    $ N( j' f( C0 T7 y' l: l0 i3 V/ O5 w- o. Q5 A5 U& x
    1
    ! b  y, t, I3 H& @8 A5 F2
    ! h! d6 F2 u( {( h9 L. V' Q3
    & R9 V$ O% l) U4& d; @: l& s8 V- x, Z% W! Q+ e2 A
    5
    ! _1 o! M; g; O# D6
    & q' S! B3 m4 b2 H7" n- K" {/ T7 I
    8& G  `9 n) z; X7 q  t- l9 d
    9& |( [  ]' v3 X3 C" k) J
    10, N' x( E$ ^4 K" D& X' D/ g) V

    4 S7 T0 y8 O, N- g6 T我们创建一个四个不同区域的聚类,centers=4,一共300节点。1 [3 H4 N" Q$ k" ?& T7 Q6 r
    如上程序生成图像所示结果。
    5 u# N- c9 `8 c# I3 g尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    9 M6 z" {( j4 @' |+ y3 Z6 lkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
    , P0 ]% K# R1 g$ o# @0 R$ D4 Y当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。. Q3 Q: r0 q, L, A
    ! D  B& {1 M. l5 H! j0 B- v, [! t, N
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。; Y* Q8 x. D! S- D

    6 i4 Q# H  o) }; I7 J
    7 i2 N( M* ^( l2 R: T, F, V3 j" f+ d6 [% r1 V: w* M$ H
    import matplotlib.pyplot as plt' ^4 e9 r4 r0 W' C7 s, E, Q5 Q
    import pylab
    : ^# q/ s6 H! [+ ]8 ]from sklearn.datasets._samples_generator import make_blobs1 z  X/ z3 {7 _0 a6 s8 [. C
    import cv28 d, @: D1 m  k6 Z( d
    import numpy as np
    1 T, I, [/ i& n5 v! }6 `
    , A3 L9 ^( o5 ^5 ?7 oplt.style.use('ggplot')
    2 u  j4 j' _# Rx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    & x' ^( `$ Z+ E  U5 _plt.scatter(x[:,0],x[:,1],s=100)4 s" f3 z! |( b& P5 M

    - S& q+ E) D- |/ N& C2 k0 m  q/ U# g5 g4 _( u
    criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    7 b1 k, J0 f7 j" W) M$ Rflags=cv2.KMEANS_RANDOM_CENTERS, H4 L0 B& U+ D3 B1 R
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)7 r# B" ?$ y" b/ Y( k# r$ F* R" x
    print(compactness)1 F+ @( |0 V# g4 ~9 z
    - r' F2 r: v: \+ H! G* x3 P
    plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')8 u0 z4 O: {3 J1 M4 b* y9 N- [
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
    5 [0 Q9 ?" D. A- S4 h  j, H9 e6 h8 K8 D" y6 v  |5 g
    pylab.show()& ^( |# V. h+ s7 v9 j7 ]

    7 m$ c. f! m. q. \$ ]# O! w
    ! _# }' d% O! a; ?' I! O& Y/ j5 g$ n4 \8 K4 x
    / P% j# F7 x% [- B, {+ I
    9 _* D: f* I# v, r9 Q

    2 E6 e; d* z; \; i$ Y0 [0 z
    2 \1 s2 j) G3 _+ V( l1! y9 X8 j! f4 ], L
    2) y4 m6 a) s5 z8 ^
    3
    9 U+ V) F' s( y1 D- p" C( f4
    5 x8 l5 p' W' k5, @8 g! o7 L1 R1 [4 ^% j
    62 i  k# F- o, Q8 p
    7" H- A, R9 z! `
    8
    % |" `  c* i) q8 K( n5 C7 E9+ j( b7 t: M( w; x
    10
    - p7 a1 T. V' g$ o7 S11
    / p' Q% q8 C) F" n12
    : i4 x8 h5 Z5 B7 |13* Y1 v- x8 Q9 e! m5 G9 N
    14  E" Q  R( S$ Z) M2 H9 J
    15; P  L* k3 e) s1 P: y, U$ J$ m
    16( K! V; q4 e2 e5 n- J% D
    176 N' c3 ]8 ?0 l, N/ @4 |
    180 I3 u, W6 X2 Z3 i# F' M  d
    191 N4 _  s$ @6 r1 X
    203 ?. }# H3 P* b0 q0 g
    21
    " j  z8 L( H0 Z. Y  g2 h2 G# V220 A/ Q1 W& ^# w8 S1 a! s5 D0 {
    236 y. Y% |, k8 d7 b# N$ c' L9 u
    24
    & [" C; U% [8 O( @8 P8 G! a- }25
    % Z' Z6 j! r7 ]8 K  s26
    . I' x2 I0 K2 o( C上面程序结果可以产生图2的效果。
    " e& |; a2 X3 c8 e2 L0 H
    ! n& G7 _: _, F$ O; Vprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。& W5 }0 j  k3 z% R
    " J+ c$ n- X( B2 H
    当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
    ' r# }" B) m& V+ B. y- o
    . W$ ^6 T) T1 B9 n, p. D3理解kmeans
    . d8 ^: y. o9 Z  c( a# wkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:4 U5 Y6 O/ ~$ @+ F6 J0 I+ ]3 `
    1.从一些随机的聚类中心开始
    & W7 W/ w! V/ }2.一种重复直到收敛
    $ c' _; X; U0 {
    # Y  ~' I/ H' K) F期望步骤:把所有的数据点分配到离他们最近的聚类中心。
    5 K; Y& s9 b/ K$ g1 _+ j最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。* d; F( K& _# p% z# W/ f

    # Z* m3 q8 p$ [2 i) _6 w: G8 Y5 V# p它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
    1 y: h3 {, F- u; Z6 T; ]6 x————————————————
    ! f$ d2 X! ]* w7 B$ s5 e版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。, T, F1 [: x% z
    原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
    , Q3 r5 T) o: X- P; {2 N' v) ]! F1 U' p" z# X

    ( @. \  K) P6 u
    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, 2025-5-29 20:44 , Processed in 0.642240 second(s), 50 queries .

    回顶部