PyTorch][chapter 12][李宏毅深度学习][Semi-supervised Linear Methods-1]

 这里面介绍半监督学习里面一些常用的方案:

K-means ,HAC, PCA 等


目录:

  1.    K-means
  2.    HAC
  3.    PCA

一  K-means

    【预置条件】

          X=\begin{Bmatrix} x^1 &x^2 &... & x^N \end{Bmatrix}

         N 个样本分成k 个 簇

         step1:

                初始化簇中心点 c_i,i=1,2,..k(随机从X中抽取k个样本点作为)

         Repeat: 

                For  all x^n in X: 根据其到  C_i(i=1,2,..k)的欧式距离:

                 b_i^n=\left\{\begin{matrix}1:\, x^n\, most\, close \, c_i\\ 0: else \end{matrix}\right.(代表第n个样本属于第i簇)

                updating all c_i:

                 c_i=\frac{\sum_{x^n}b_i^nx^n}{\sum_{x^n}b_i^n}

          问题:

                 不同的初始化参数影响很大.可以通过已打标签的数据集作为c_i,

            未打标签的


二 Hierachical agglomerative Clustering(HAC)层次凝聚聚类算法

     流程

       1: build a tree (创建数结构)

       2  clustering by threshold (通过不同的阀值进行聚类)

     

   例   假设有5笔data:    x^1,x^2,x^3,x^4,x^5

       build a tree

       1  合并其中距离最近的两项  x^1,x^2

              

         2 基于合并后的数据集 (x^1,x^2,x^3,x^4),合并其中距离最小的两项  x^2,x^3

            

       1.3  基于 x^1,x^2,x^3 合并其中最小的两项 x^1,x^3

1.4 最后只剩下最后两项(N<=k),合并作为root

2  聚类(pick a threshold 选择不同的阀值进行分类)

  比如阀值在黑色虚线的位置:

x^1,x^2 为1类

x^3 为一类

 x^4,x^5为一类

  

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 26 15:55:03 2024@author: chengxf2
"""import numpy as np
import mathdef euler_distance(point1, point2):#计算欧几里德距离distance = 0.0c= point1-point2distance = np.sum(np.power(c,2))return math.sqrt(distance)class tree:#定义一个节点def __init__(self, data, left= None,  right = None, distance=-1,idx= None,  count=1):self.x = dataself.left = leftself.right = rightself.distance = distanceself.id = idxself.count = countdef mergePoint(a,b):c= np.vstack((a,b))return cclass Hierarchical:def __init__(self, k=1):assert k>0self.k =kself.labels = Nonedef getNearest(self, nodeList):#获取最邻近点N = len(nodeList)#print("\n N",N)min_dist = np.inffor i in range(N-1):for j in range(i+1, N):#print("\n i ",i,j)pointI = nodeList[i].xpointJ = nodeList[j].xd =  euler_distance(pointI, pointJ)if d <min_dist:min_dist = dcloserst_point = (i, j)return closerst_point,min_distdef fit(self, data):N = len(data)nodeList = [ tree(data=x,idx = i) for i,x in enumerate(data)]currentclustid = -1self.labels =[-1]*Nprint(self.labels)while(len(nodeList)>self.k):closerest_point,min_dist = self.getNearest(nodeList)#print("\n closerest_point",closerest_point)id1, id2 = closerest_pointnode1, node2 = nodeList[id1], nodeList[id2]merge_vec =np.vstack((node1.x,node2.x))avg_vec = np.mean(merge_vec,axis=0)#print(node1.x, node2.x, avg_vec)new_node = tree(data=avg_vec, left=node1, right=node2, distance=min_dist, idx=currentclustid,count=node1.count + node2.count)currentclustid -= 1del nodeList[id2], nodeList[id1]nodeList.append(new_node)self.nodes = nodeListdef calc_label(self):for i, node in enumerate(self.nodes):print("\b label",i)self.leaf_traversal(node, i)def leaf_traversal(self, node: tree, label):if node.left is None and node.right is None:self.labels[node.id] = labelif node.left:self.leaf_traversal(node.left, label)if node.right:self.leaf_traversal(node.right, label)if __name__ == "__main__":data = np.array([[1,1],[1,1],[2,2],[3,3],[3,4]] )net = Hierarchical(k=2)net.fit(data)net.calc_label()

三  PCA(Principle Component Analysis)

     PCA 是机器学习里面一种主要降维方案,深度学习里面常用的是AE编码器.

  如下图在3维空间里面,不同数据分布在不同的空间,通过PCA 降维到2D 

空间后,不同类别的数据分布依然分布在不同的空间,数据处理起来更方便.

原理推导:

    

已知:

     x \in R^{n,1} 为列向量

     数据集中有m笔该数据集

     W=[w_1,w_2,..w_k]w_1 \in R^{n,1} 列向量

      在第一个维度上面的投影为:

        z_1=w_1^Tx

       我们期望最大方差

        var(z_1)=\sum_{z_1} (z_1-\bar{z_1})^2 

        解:

            var(z_1)=\sum_x (w_1^Tx-w_1^T\bar{x})^2(利用(a^Tb)^2=a^Tbb^Ta)

                           =\sum_{x} w_1^T(x-\bar{x})(x-\bar{x}) w_1

                            =w_1^T(\sum_x(x-\bar{x})(x-\bar{x})^T)w_1

                             =w_1^TSw_1

           加上约束条件w_1^Tw_1=1,利用拉格朗日对偶算法求解

        L=-w_1^TSw_1+\alpha(w_1^Tw_1-1)(S是协方差矩阵,对称矩阵)

      对w_1求微分

   -Sw_1+\alpha w_1=0

   Sw_1=\alpha w_1

           w 就是特征向量

            \alpha  特征值

实对称矩阵S的重要性质,特征值一般只取前k个大于0的(负的只是方向问题)

                              

40:00

参考:

CV算法:K-means 、HAC、Mean Shift Clustering - 简书

13: Unsupervised Learning - Linear Methods_哔哩哔哩_bilibili

https://www.johngo689.com/549602/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] }

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] } ubuntu20 win10 edge浏览器访问 服务器部署 页面打开后想使用chatgpt报错了 rootcoal-pasi1cmp:/www/wwwroot/ChatGPT-Next-Web# PORT3000 yarn start yarn run v1.22.19 warning package.json:…

LeetCode160. 相交链表

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第23套

少儿编程 蓝桥杯青少组科技素养题真题及解析第23套 1、英国计算机科学家艾伦图灵于 1950 年提出了著名的“图灵测试”,用于判断计算机是否具有智能。“图灵测试”是通过()的方法进行判断的 A、让两台计算机对话 B、让人类与计算机对话 C、给计算机出题 D、让计算机分辨图…

力扣:122 买卖股票的最佳时机 II(贪心)

一. 链接&#xff1a;122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 二. 题目 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有…

【轮式平衡机器人】——TMS320F28069片内外设之ADC

一、ADC概述 这一部分不是我们的重点&#xff0c;原理分类啥的这里简要说明&#xff01; 步骤&#xff1a;采样、保持、量化、编码 将采样电平&#xff08;模拟值&#xff09;转换为数字值的方法&#xff1a;直接比较型&#xff08;并行ADC、逐次逼近型ADC&#xff09;&…

2024.1.30 GNSS 学习笔记

站星双差Kalman滤波伪距差分定位流程 1. RTK定位技术&#xff08;实时载波相位差分技术&#xff09;原理-站间单差浮点解 1.RTK技术其实就是在RTD技术的基础上增加载波观测值的使用。由于伪距的噪声在分米量级&#xff0c;即使我们通过站间单差消除了绝大部分的误差影响&…

面试手写第二期 Promsie相关

文章目录 一. 手写实现PromiseA规范二. Promise.all实现三. Promise.race实现四. Promise.allsettled实现六. Promise.any实现六. 如何实现 Promise.map&#xff0c;限制 Promise 并发数七. 实现函数 promisify&#xff0c;把回调函数改成 promise 形式八. 并发请求控制 一. 手…

adb控制设备状态

屏幕设置 屏幕亮度 # 当前屏幕亮度 adb shell settings get system screen_brightness# 更改屏幕亮度adb shell settings put system screen_brightness屏幕休眠时间 # 当前屏幕休眠时间 adb shell settings get system screen_off_timeout#更改屏幕休眠时间 adb shell sett…

【React】前端项目引入阿里图标

【React】前端项目引入阿里图标 方式11、登录自己的iconfont-阿里巴巴矢量图标库&#xff0c;把需要的图标加入到自己的项目中去&#xff1b;2、加入并进入到项目中去选择Font class 并下载到本地3、得到的文件夹如下4. 把红框中的部分粘贴到自己的项目中&#xff08;public 文…

爬虫入门到精通_基础篇4(BeautifulSoup库_解析库,基本使用,标签选择器,标准选择器,CSS选择器)

1 Beautiful说明 BeautifulSoup库是灵活又方便的网页解析库&#xff0c;处理高效&#xff0c;支持多种解析器。利用它不用编写正则表达式即可方便地实线网页信息的提取。 安装 pip3 install beautifulsoup4解析库 解析器使用方法优势劣势Python标准库BeautifulSoup(markup,…

Web3.0初探

Web3.0初探 一、互联网发展史二、什么是Web3.0&#xff1f;三、现在的发展方向&#xff08;衍生出来的产品&#xff09;&#xff1a;四、目前问题五、Web3.0与元宇宙 一、互联网发展史 Web3.0也就是第三代互联网。最新版本的Web3.0是以太坊的创始合伙人Gavin Wood在2014年提出…

Redis核心技术与实战【学习笔记】 - 7.Redis GEO类型 - 面向 LBS 应用的数据类型

前言 前面&#xff0c;介绍了 Redis 的 5 大基本数据类型&#xff1a;String、List、Hash、Set、Sorted Set&#xff0c;它们可以满足绝大多数的数据存储需求&#xff0c;但是在面对海里数据统计时&#xff0c;它们的内存开销很大。所以对于一些特殊的场景&#xff0c;它们是无…

全面解析msvcr100.dll丢失的解决方法,关于msvcr100.dll文件丢失是如何显示的

msvcr100.dll文件的丢失是一个常见的问题&#xff0c;它会导致一些应用程序无法正常运行或出现错误。为了解决这个问题&#xff0c;我们可以采取多种方法。下面将介绍几种常用的msvcr100.dll丢失的解决方法&#xff0c;通过采用合适的方法&#xff0c;我们可以轻松解决该问题&a…

2023年03月CCF-GESP编程能力等级认证Python编程一级真题解析

一、单选题(共15题,共30分) 第1题 以下不属于计算机输入设备的有( )。 A:键盘 B:音箱 C:鼠标 D:传感器 答案:B 第2题 计算机系统中存储的基本单位用 B 来表示,它代表的是( )。 A:Byte B:Block C:Bulk D:Bit 答案:A 第3题 下面有关 Python 的说法,…

C#,入门教程(36)——尝试(try)捕捉(catch)不同异常(Exception)的点滴知识与源代码

上一篇&#xff1a; C#&#xff0c;入门教程(35)——哈希表&#xff08;Hashtable&#xff09;的基础知识与用法https://blog.csdn.net/beijinghorn/article/details/124236243 1、try catch 错误机制 Try-catch 语句包含一个后接一个或多个 catch 子句的 try 块&#xff0c;这…

Python爬虫:XPath基本语法

XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位元素的语言。它使用路径表达式来选择节点或节点集&#xff0c;类似于文件系统中的路径表达式。 不啰嗦&#xff0c;讲究使用&#xff0c;直接上案例。 导入 pip3 install lxmlfrom lxml import etr…

git 本地的分支如何转到另一台电脑

要将本地的Git分支转移到另一台电脑上&#xff0c;你可以遵循以下步骤&#xff1a; 1. **备份你的本地仓库**&#xff1a; 在当前电脑上&#xff0c;确保你的本地分支是最新的&#xff0c;并且你已经提交了所有更改。然后&#xff0c;你可以创建一个仓库的备份。这可以通过…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(6)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

指针深入了解7

1.qsort的模拟实现&#xff08;冒泡排序的原型制作&#xff09; 1.排序整型 int cmp_int(const void* p1, const void* p2) {return *((int*)p1) - *((int*)p2); } void swap(char* p1, char* p2)//完成交换 {int tmp *p1;*p1 *p2;*p2 tmp;} void bubble_sort(void* base,…

Boundry attention: 泛化能力很强的边缘检测模块

原文链接&#xff1a;Boundary attention:: Learning to Find Faint Boundaries at Any Resolution 本文提出的模型泛化性好&#xff0c;即使只在合成的图案简单的图片上训练&#xff0c;在复杂的真实图上做检测也能得到较好的边界。 细节部分&#xff1a; 不同于viT把图片切…