吴恩达机器学习课后作业-07kmeans and pca

news2024/9/21 20:25:47

k-均值与PCA

  • k-均值
    • 图片颜色聚类
  • PCA(主成分分析)
    • 对x去均值化
    • 图像降维

k-均值

K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。
K-均值是一个迭代算法,假设我们想要将数据聚类成n个组,其方法为:
首先选择K个随机的点,称为聚类中心(cluster centroids);
对于数据集中的每一个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。
计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。
重复步骤2-4直至中心点不再变化。

在这里插入图片描述
样本数据
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio
from scipy.optimize import minimize
import pandas as pd
from sklearn.svm import SVC

"""
1获取每个样本所属类别
"""
def fnd_centroids(x,centros):
    idx=[]
    for i in range(len(x)):
        #x[i] 1x2数组   centros是 kx2的数组

        dist =np.linalg.norm((x[i]- centros),axis=1)#dis 1xk
        id_i=np.argmin(dist)
        idx.append(id_i)
    return np.array(idx)

"""
2.计算聚类中心点
"""
def compute_centros(X,idx,k):
    centros =[]
    for i in range(k):
        centros_i = np.mean(x[idx == i],axis=0)
        centros.append(centros_i)
    return np.array(centros)

"""
3.运行kmeans,重复执行12
"""
def run_kmeans(x,centros,iters):
    k = len(centros)
    centros_all =[]
    centros_all.append(centros)
    centros_i = centros
    for i in range(iters):
        idx = fnd_centroids(x,centros_i)
        centros_i = compute_centros(x,idx,k)
        centros_all.append(centros_i)
    return idx,np.array(centros_all)
"""
绘制数据集和聚类中心的移动轨迹
"""

def plot_data(X,centros_all,idx):
    plt.figure()
    plt.scatter(X[:,0],X[:,1],c=idx,cmap='rainbow')
    plt.plot(centros_all[:,:,0],centros_all[:,:,1],'kx--')

"""
观察初始聚类点的位置对聚类效果的影响
"""
def init_centros(x,k):
    index = np.random.choice(len(x),k)
    return x[index]



data1=sio.loadmat("E:/学习/研究生阶段/python-learning/吴恩达机器学习课后作业/code/ex7-kmeans and PCA/data/ex7data2.mat")
x=data1["X"]

# plt.scatter(x[:,0],x[:,1])


centros=np.array([[3,3],[6,2],[8,5]])
idx=fnd_centroids(x,centros)

compute_centros(x,idx,k=3)
idx, centros_all = run_kmeans(x, centros, iters=10)
# plot_data(x,centros_all, idx)
# plt.show()

init_centros(x,k=3)

for i in range(4):
    idx,centros_all = run_kmeans(x,init_centros(x,k=3),iters=10)
    plot_data(x,centros_all,idx)
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图片颜色聚类

在这里插入图片描述

PCA(主成分分析)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据集
在这里插入图片描述

对x去均值化

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

import numpy as np
import scipy.io as sio
import matplotlib.pyplot as plt





mat = sio.loadmat("E:/学习/研究生阶段/python-learning/吴恩达机器学习课后作业/code/ex7-kmeans and PCA/data/ex7data1.mat")
x= mat['X']
# plt.scatter(x[:,0],x[:,1])
# plt.show()
"""对x去均值化"""
x_demean= x - np.mean(x,axis=0)
# plt.scatter(x_demean[:,0],x_demean[:,1])
# plt.show()
"""计算协方差矩阵"""
C=x_demean.T@x_demean/ len(x)
"""计算特征值,特征向量"""
U,S,V = np.linalg.svd(C)
U1=U[:,0]
"""实现降维"""
x_reduction= x_demean@U1
plt.figure(figsize=(7,7))
plt.scatter(x_demean[:,0],x_demean[:,1])
plt.plot([0,U1[0]],[0,U1[1]],c='r')
plt.plot([0,U[:,1][0]],[0,U[:,1][1]],c='k')
plt.show()

在这里插入图片描述

import numpy as np
import scipy.io as sio
import matplotlib.pyplot as plt





mat = sio.loadmat("E:/学习/研究生阶段/python-learning/吴恩达机器学习课后作业/code/ex7-kmeans and PCA/data/ex7data1.mat")
x= mat['X']
# plt.scatter(x[:,0],x[:,1])
# plt.show()
"""对x去均值化"""
x_demean= x - np.mean(x,axis=0)
# plt.scatter(x_demean[:,0],x_demean[:,1])
# plt.show()
"""计算协方差矩阵"""
C=x_demean.T@x_demean/ len(x)
"""计算特征值,特征向量"""
U,S,V = np.linalg.svd(C)
U1=U[:,0]
"""实现降维"""
x_reduction= x_demean@U1
plt.figure(figsize=(7,7))
plt.scatter(x_demean[:,0],x_demean[:,1])
plt.plot([0,U1[0]],[0,U1[1]],c='r')
plt.plot([0,U[:,1][0]],[0,U[:,1][1]],c='k')
plt.show()
"""还原数据"""
x_restore = x_reduction.reshape(50,1)@U1.reshape(1,2) + np.mean(x,axis=0)
x_reduction.shape,U1.shape
plt.scatter(x[:,0],x[:,1])
plt.scatter(x_restore[:,0],x_restore[:,1])
plt.show()

图像降维

在这里插入图片描述
在这里插入图片描述
降维后图片
在这里插入图片描述

import numpy as np
import scipy.io as sio
import matplotlib.pyplot as plt


def plot_100_images(X):
    fig, axs = plt.subplots(ncols=10, nrows=10, figsize=(10,10))
    for c in range(10):
        for r in range(10):
            axs[c,r].imshow(X[10*c + r].reshape(32,32).T,cmap = 'Greys_r')#显示单通道的灰度图
            axs[c,r].set_xticks([])
            axs[c,r].set_yticks([])



mat = sio.loadmat("E:/学习/研究生阶段/python-learning/吴恩达机器学习课后作业/code/ex7-kmeans and PCA/data/ex7faces.mat")
x= mat['X']
plot_100_images(x)



means = np.mean(x,axis=0)
x_demean =x -means
C= x_demean.T@x_demean
u,s,V = np.linalg.svd(C)
U1= u[:,:36]
x_reduction = x_demean@U1
x_recover = x_reduction@U1.T+means
plot_100_images(x_recover)
plt.show()

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

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

相关文章

python-变量声明、数据类型、标识符

一.变量 1.什么是变量 为什么需要变量呢? 一个程序就是一个世界,不论使用哪种高级程序语言编写代码,变量都是其程序的基本组成单位。如下图所示的sum和sub都是变量。 变量的定义: 变量相当于内存中一个数据存储空间的表示&#…

Spring MVC常用注解及用法

目录 1.建立连接--RequestMapping 2.请求 2.1 传递单个参数 2.2 传递多个参数 2.3 传递对象 2.4 参数重命名--RequestParam 2.5 传递数组 2.6 传递集合 2.7 传递json数据--RequestBody 2.8 获取URL中参数--PathVariable 2.9 上传文件--RequestPart 2.10 获取Cookie--…

bomb 实验

GDB常用命令: GDB调试常用命令-CSDN博客 原理: 编译与反汇编过程-CSDN博客 Bomb实验实现 阶段一: 分析 分配空间:sub $0x8,%rsp 为局部变量分配栈空间。设置参数:mov $0x402400,%esi 将字符串地址加载到 %esi。…

MMsegmentation与MMdeploy简单使用

最近涉及到了图像分割的任务,于是拿来写下博客加深下使用。 MMsegmentation与MMdeploy的环境配置暂不做讲解,在官网和其他博客中有很多说明。 MMdeploy主要是把pt转为 onnx_int8的情况。 MMsegmentation环境配置可以参考 : 安装与配置MMSegmentation 目录…

【管理型文档】软件需求管理过程(原件)

软件需求管理规程应明确需求收集、分析、确认、变更控制及验证等流程,确保需求准确反映用户期望,支撑软件开发。该规程要求系统记录需求来源,通过评审确保需求完整、清晰、无歧义,实施变更控制以维护需求基线稳定,并持…

后端面试真题整理

面试问题整理 本人主要记录2024年秋招、春招过程中的疑难八股真题,参考来源:牛客网、知乎等。 八股 深拷贝与浅拷贝 浅拷贝: 浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果…

井盖丢失隐患大?智慧井盖监管系统帮你解决

在现代都市中,我们每天行走在钢筋水泥之间,却很少有人注意到脚下的小小井盖。这些不起眼的圆形铁盘不仅是城市地下管网的入口,更是维系城市生命线的重要组成部分。然而,当暴雨来袭,或是深夜无人之时,井盖的…

无线麦克风什么牌子的音质效果好?一文读懂麦克风哪个牌子的好

无线领夹麦克风哪款音质最好?在这个追求高质量音效的年代,选择一款合适的无线领夹麦克风(简称领夹麦)对于提升录音或直播的音质至关重要。随着市场的不断扩大,市面上充斥着大量信号不稳定、音质差的无线领夹麦克风&…

2024年汽车零部件企业CRM研究:服务商排名、案例分析、需求分析

最近媒体上频现各车企大佬发声,抗议某汽车企业“不要卷价格,要卷长期价值”,还有的直接批判其打破行业规则。图穷匕现,汽车行业的竞争愈发激烈了。 汽车产业作为我国国民经济的重要支柱产业、经济增长和转型的重要抓手&#xff0…

微软将持续多年的 Mono 项目移交给 Wine

今天,微软突然决定将 Mono 项目交由 Wine 开发社区管理。自Mono项目上一次作为开源.NET框架发布以来,已经过去了五年时间,此前Wine已经使用了Mono的代码,而在微软专注于开源.NET和其他工作的情况下,此举是合理的&#…

Python编程的终极十大工具(非常详细)零基础入门到精通,收藏这一篇就够了

🤟 基于入门网络安全打造的:👉黑客&网络安全入门&进阶学习资源包 Python一直以来都是程序员们的首选编程语言之一,其灵活性和功能强大的库使其成为解决各种问题的理想选择。在本文中,我们将介绍Python编程的终…

fdMemTable内存表进行SQL查询

fdLocalSql可以对fdMemTable内存表进行SQL查询(可以对多个fdMemTable内存表进行联表查询哦),fdLocalSql使用SQLITE引擎,而FIREDAC驱动SQLITE,连SQLITE驱动DLL都不需要附带的。 所有设置用FormCreate里用代码 procedure…

【C#】Visual Studio2017 MSDN离线安装

1. 运行Visual Studio Installer 在Windows的开始菜单中直接搜索 2. 单击“修改”按钮 3. 依次点击,单个组件 - 代码工具 - Help Viewer - 修改,开始安装 4. 下载速度慢解决方法 修改IPv4 DNS 参考:visual studio下载慢解决方法&#xf…

unity脚本

Transform.Rotate 描述 使用 Transform.Rotate 以各种方式旋转 GameObjects。通常以欧拉角而不是四元数提供旋转。 可以在世界轴或本地轴中指定旋转。 世界轴旋转使用 Scene 的坐标系,因此在开始旋转 GameObject 时,它的 x、y 和 z 轴与 x、y 和 z 世…

Leetcode 131.分割回文串 回溯 C++实现

Leetcode 131. 分割回文串 问题:给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 算法: 创建二维返回数组 ans ,和临时数组 path 。 进入 dfs 函数,当 …

初识linux(1)

linux背景 1991年10月5日,赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组 (comp.os.minix)中宣布他编制出了一种类似UNIX的小操作系统,叫Linux。新的操作系统是受到另 一个UNIX的小操作系统——Minix的启发…

今日arXiv最热大模型论文:港大微软发布AgentGen提高大模型规划能力,8B模型接近GPT-4水平

夕小瑶科技说 原创 作者 | Richard 在大语言模型(LLM)问世之后,基于 LLM 的 Agent 引起了广泛的关注并且变得越来越流行。规划能力无论对人类还是 Agent 都是一个重要的决策步骤,规划的本质是通过预先设定的行动过程&#xff0c…

软件设计师全套备考系列文章20 -- UML建模(重点,15分)

软考-- 软件设计师(20)-- UML建模(重点,15分) 文章目录 软考-- 软件设计师(20)-- UML建模(重点,15分)前言一、章节考点二、概述三、类图四、用例图五、顺序图六、活动图七、状态图八、通信图九、构建图 前言…

扫码点餐系统的前景如何?

扫码点餐系统作为一种餐饮业数字化转型的关键工具,其发展前景广阔。随着移动支付和智能手机的普及,该系统在餐厅、咖啡馆、快餐店等场所得到广泛应用,不仅简化了顾客点餐流程,减轻了服务员的工作负担,还提高了翻台率。…

沃尔玛停止在 3 个城市使用无人机送货,将重点转移到达拉斯

沃尔玛,作为全球领先的零售商,一直在探索创新的物流解决方案以提升顾客体验。近年来,该公司与无人机送货服务提供商DroneUp合作,尝试通过无人机技术实现快速配送服务。然而,经过一段时间的试点运营后,沃尔玛…