QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3413|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点, A+ i8 S7 i" j( C9 Q
    9 I7 S3 R# ^; A% B# I
    到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
    0 F/ C, e1 {( C' A' a
    , k# h* V' D4 `4 p) |6 S. M这就是无监督学习 。
    9 j4 {% s- ]4 a5 Z, S6 }  v* G6 z) t5 ?- o7 {
    在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
    * o& s  Z$ O8 |: b9 J9 X+ r9 }2 \9 t
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
    ! @- ~- s. \5 k# A作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。2 ?4 ^3 Z" |$ c' H( C  k
    : ]- h# Y) m' k! q! b7 s3 N4 O8 W
    解决的问题
    9 Z+ b; [+ H; c1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。) t) C9 j4 {; U* k3 J: L4 [
    2.如何在层次树中使用聚类算法。他带来的好处有哪些。9 j4 Q  A% o6 Z5 G! s
    3.如何使用无监督学习,进行预处理,图像处理,分类。$ U; d! d/ ~7 E5 i0 E" G5 D
    % a- ~1 v8 D: u' L" p3 `' X
    1 理解无监督学习2 B4 c+ o9 H+ M5 K
    无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。; w7 P( T1 X! u
    无监督学习的应用包括一下应用:% B; i. G# J- g7 K+ [1 z
    1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
    - j8 d! Z1 n5 I% b5 z9 j2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    ! ?/ ^5 g! K; l( F' b, U" `" J  _3聚类分析:, T" T" d( j, c) d9 \5 N8 i) O
    尝试把数据分成相似元素组成的不同组。! I! q) r) f/ s0 b/ t

    , N0 z5 R8 X" h$ w/ \, g  F, H; ~& G% Q% u无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
    1 Y' U4 |0 {/ ]4 j( G' B; k8 s1 K
    / g  T" G! q; J$ e4 B话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    ! _# f" R" `5 y: E! u3 c2 |, o+ G& D8 f  X0 U, f
    2理解K-means聚类# Z) b5 n( G5 h; K
    Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。" J# l, C9 P( j! E
    ' L% S8 q5 z) \
    它通过两个简单的假设来完成最佳聚类了。% t8 O- i4 [, a2 T; a: F, W  B5 d
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值, d# E+ ~- F! ~' w% K6 G- N2 H- m* z8 I: i
    2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
    ' u* F& T1 s# b9 {$ |" V, |3 Q# E4 i7 r% Z2 K
    2.1 实现第一个kmeans例子" D3 z9 ?( e2 y" z  n
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。# A. K+ }( }% A* F5 Z4 o
    , d2 X0 H! k9 M9 [& J7 \: I
    import matplotlib.pyplot as plt
    5 C3 l7 p" S/ U4 m: A. `' x8 t3 {import pylab7 I4 w. l5 ^* j( p' t$ e3 a7 l5 f* A
    from sklearn.datasets._samples_generator import make_blobs
    6 F' T- \$ ]) r( F. O" ]. l, C. X" X2 t" |
    plt.style.use('ggplot'), L# A( z, f0 d' C* l( b1 k6 }
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)# t0 i" b9 V5 S1 I9 F7 V
    plt.scatter(x[:,0],x[:,1],s=100)& n1 l& u. g/ e4 O: |- ?8 e
    pylab.show()
    % ?: `# \. i0 b$ J& T8 U8 t* m) f- q( x3 @

    ' X5 x" G, f/ r/ j% G5 P$ J1. `! w* p0 p8 j3 T4 M6 _, H- w
    2
    $ z+ ~2 Y7 N* T* p1 E0 O3
    5 T7 ?0 w: L# n- N4 C4
    5 N7 j9 F; |7 \/ o$ e& E8 n5
    & j# g' h4 o8 Y0 e5 a+ p6
    ' u; m1 Z3 G9 p; f- E5 u3 `' ^7; l! S+ J' N9 t! j
    8
    8 S9 z1 B" l. O/ k9* b# k: ^* n: N0 j* T: v$ p
    10  M! K# a1 I, w" I5 G! s# D
    4 S7 J8 v/ o& K, o, j" o3 K
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。! s  a/ Z0 L+ T7 D& f" F7 C; i  M
    如上程序生成图像所示结果。) n; A3 i4 o' i& n" n  Q
    尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。0 X) }4 h1 R$ T1 }6 f1 H* R
    kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
    9 d/ b  g; V0 N( f  j  v5 |5 _3 e& |当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
    - v( Z7 w: V5 \; ~& C
    - [5 Z. K6 p% v8 o我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。' w" `3 X4 b9 L7 E- w. M' X
    , ?. k$ x2 e) B/ Y

      b% x/ N9 d1 M1 \
    ) Q. @, J  p& a5 g7 yimport matplotlib.pyplot as plt! E9 l7 r9 z9 r/ S) f# E
    import pylab# X, x8 o8 V: I% Z
    from sklearn.datasets._samples_generator import make_blobs% E* q) l8 \! v  P% l% {& [1 f+ `
    import cv21 F, Q0 D8 r6 D! d
    import numpy as np
    8 f  q  B" y0 `& i3 F) N$ F
    & `7 r- |3 c1 N6 rplt.style.use('ggplot')/ b# V8 n# L7 G6 w* O, t
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)$ A# t; W5 x6 U: s& X1 ?. i! ]: p0 m; ^
    plt.scatter(x[:,0],x[:,1],s=100)$ G/ |, v; p4 i9 n+ u

    ; E  r8 W1 O" k+ |9 b! H! q- O
    ; n7 Q$ a0 r) e, W) `criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    5 K0 g' a0 I9 Z; T0 t0 x# Oflags=cv2.KMEANS_RANDOM_CENTERS1 @# b7 @1 O* h+ q8 w
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
    2 v+ v2 \4 a5 @print(compactness)
    9 Q/ p: U# q4 w+ q2 d+ X% H7 {+ q1 I  b6 w' _
    plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')+ d6 _* n6 ~, _  M$ A% o* G
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5); U1 C# C- [1 A. P9 t

    ' k3 t2 f( D- p  m  h$ X3 I; kpylab.show()2 ], ]2 D  _& M! y5 `6 x

    5 U; m" F: ~; P2 l6 _  b! f9 W+ [9 M7 U5 E& e

    * x" H* T) T% G2 z% l# f4 A; P7 F6 s0 v

    - x! T" @) L* U+ A/ P+ i+ z6 f* _# s! p) K: `% g% z5 t

    % n0 v- J# u2 \. m1
    9 `; A; ^" T; P( J9 d9 K( z6 o2' v2 c( i0 ?: y) }3 m/ Z, b
    3
    5 z4 c/ s' q4 x2 C4
    9 ~1 I# r. [! D" p, ?3 q5* ^1 R" C2 Z7 c3 K2 ]7 m& R' t
    6! I. M* D  d5 {4 ?
    7
    1 S9 o' S& b% O5 C$ {8: ~& I$ j# m" |- l7 e
    9) e" o* R1 T0 d; p& \
    104 U* N& p* i; P+ n3 I9 ?
    110 |4 f, j% K! p. C* f6 z& p
    12: w# W# V* c# o8 \7 c; F* G
    132 ]9 P5 I1 Q# c) n% X, `( d' j  B
    14
    & [. q% C, Q& {( y15; E+ q8 a' N' d9 S
    16
    , H, v8 F9 _. v8 |( J) E2 ~17: P$ [. h: [% @9 S
    187 E9 S% A/ ~, v8 A
    19
    2 n" k9 C& \5 W0 x5 X( M20
    4 R  d" Q3 z2 H5 s: Z217 M0 g& j$ d( Z! M/ k
    22
    1 G# H6 j0 ]  D8 R7 C23
    0 e. }) c$ |( \6 P249 s, A0 V; [: a/ O4 @: A5 B3 s
    259 e$ m- Q$ C# q( S0 [( \6 k4 Z
    26- V3 R* H1 X+ E
    上面程序结果可以产生图2的效果。/ c# h  G# l% a+ F

    + D# f5 t0 ?1 S: q1 W" l% E4 ^$ g  Rprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    / R/ r, ~8 I! ~# k; ]) a* V! N
    * P2 W" z. ?( E' Q7 E当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
    * T, j) g: V; c( Y8 W. l5 H. @, t$ ?' M& a( ]
    3理解kmeans0 v2 ]4 B  T6 T9 w: R% g
    kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:! f- ?5 v- A) L& q' L- z3 V
    1.从一些随机的聚类中心开始0 Z! w/ t; c+ D. K4 U
    2.一种重复直到收敛
    ; w& o( V' V6 ^  F( l/ g
    ' w9 ]3 e- h7 O( j) P期望步骤:把所有的数据点分配到离他们最近的聚类中心。! f1 C! [( n: }- k- q
    最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
    3 ?" n0 m; Z5 ]( T4 I: a+ _' `9 B* N; B+ ~0 ?
    它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。: \* M; D, n; {4 V" K! }
    ————————————————
    * z1 t* C" g4 W0 D6 C版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) d/ L8 Z. r: E+ L' o+ g$ N( H
    原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000% s1 _8 ^: F) j( {
    2 ]) H, M& T$ T0 v  K3 ]
    % R& }5 U# E0 k$ F* L3 s" w  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 14:12 , Processed in 0.365937 second(s), 51 queries .

    回顶部