【Python机器学习】k均值聚类——矢量量化,或者将k均值看作分解

虽然k均值是一种聚类算法,但在k均值和分解方法之间存在一些相似之处。k均值尝试利用簇中心来表示每个数据点,可以看作仅用一个分量来表示每个数据点,该分量由簇中心给出。这种观点将k均值看作是一种分解方法,其中每个点用单一分量来表示。这种观点被称为矢量量化

我们来并排比较PCA、NMF和k均值,分别显示提取的分量,以及利用100个分量对测试集中人脸的重建。对于k均值,重建就是在训练集中找到最近的簇中心:

import mglearn.plots
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs,make_moons
from sklearn.cluster import KMeans
from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.decomposition import PCA,NMFpeople=fetch_lfw_people(data_home = "C:\\Users\\86185\\Downloads\\",min_faces_per_person=20,resize=.7)
image_shape=people.images[0].shape
mask=np.zeros(people.target.shape,dtype=np.bool_)
for target in np.unique(people.target):mask[np.where(people.target==target)[0][:50]]=1X_people=people.data[mask]
y_people=people.target[mask]X_train,X_test,y_train,y_test=train_test_split(X_people,y_people,stratify=y_people,random_state=0
)
nmf=NMF(n_components=100,random_state=0)
nmf.fit(X_train)
pca=PCA(n_components=100,random_state=0)
pca.fit(X_train)
kmeans=KMeans(n_clusters=100,random_state=0)
kmeans.fit(X_train)X_reconstrycted_pca=pca.inverse_transform(pca.transform(X_test))
X_reconstrycted_kmeans=kmeans.cluster_centers_[kmeans.predict(X_test)]
X_reconstrycted_nmf=np.dot(nmf.transform(X_test),nmf.components_)fig,axes=plt.subplots(3,5,figsize=(8,8),subplot_kw={'xticks':(),'yticks':()})
fig.suptitle('对比')
for ax,comp_kmeans,comp_pca,comp_nmf in zip(axes.T,kmeans.cluster_centers_,pca.components_,nmf.components_):ax[0].imshow(comp_kmeans.reshape(image_shape))ax[1].imshow(comp_pca.reshape(image_shape),cmap='viridis')ax[2].imshow(comp_nmf.reshape(image_shape))axes[0,0].set_ylabel('kmeans')
axes[1,0].set_ylabel('pca')
axes[2,0].set_ylabel('nmf')
plt.show()fig,axes=plt.subplots(4,5,subplot_kw={'xticks':(),'yticks':()},fig=(8,8))
fig.suptitle('R')
for ax,orig,rec_kmeans,rec_pca,rec_nmf in zip(axes.T,X_test,X_reconstrycted_kmeans,X_reconstrycted_pca,X_reconstrycted_nmf):ax[0].imshow(orig.reshape(image_shape))ax[1].imshow(rec_kmeans.reshape(image_shape))ax[2].imshow(rec_pca.reshape(image_shape))ax[3].imshow(rec_nmf.reshape(image_shape))axes[0,0].set_ylabel('original')
axes[1,0].set_ylabel('kmeans')
axes[2,0].set_ylabel('pca')
axes[3,0].set_ylabel('nmf')
plt.show()

利用k均值做矢量量化的一个有趣之处在于,可以用比输入维度更多的簇来对数据进行编码。

回到two_moons数据集,利用PCA或NMF,我们对这个数据无能为力,因为它只有两个维度。使用PCA或NMF将其降到一维,将会完全破坏数据的结构。但通过使用更多的簇中心,我们可以用k均值找到一种更具表现力的表示。


import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs,make_moons
from sklearn.cluster import KMeansX,y=make_moons(n_samples=200,noise=0.05,random_state=0)kmeans=KMeans(n_clusters=10,random_state=0)
kmeans.fit(X)
y_pred=kmeans.predict(X)plt.scatter(X[:,0],X[:,1],c=y_pred,s=60,cmap='Paired')
plt.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],s=60,marker='^',c=range(kmeans.n_clusters),linewidths=2,cmap='Paired')
plt.xlabel('Feature 0')
plt.ylabel('Feature 1')
plt.show()
print('簇:\n{}'.format(y_pred))

我们使用了10个簇中心,也就是说,现在的每个点都被分配了0到9之间的一个数字。我们可以将其看作10个分量表示的数据(我们有10个新特征),只有表示该点对应的簇中心的哪个特征不为0,其他特征均为0。利用这10维表示,现在可以用线性模型来划分两个半月形,而利用原始的两个特征是不可能做到这一点的。

将到每个簇中心的距离作为特征,还可以得到一种表现力更强的数据表示。可以利用kmeans的transform方法来完成这一点:


distance_features=kmeans.transform(X)
print('距离特征形状:{}'.format(distance_features.shape))
print('距离特征:{}'.format(distance_features))

k均值是非常流行的聚类算法,因为它不仅相对容易理解和实现,而且运行速度也相对较快。k均值可以轻松扩展到大型数据集。

k均值的缺点之一在于,它依赖于随机初始化,也就是说,算法的输出依赖于随机种子。默认情况下,scikit-learn用10种不同的随机初始化将算法运行10次,并返回最佳结果。

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

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

相关文章

可视化大屏开发系列——DataV的使用

以下内容为近期个人学习总结,若有错误之处,欢迎指出! 可视化大屏开发系列——DataV的使用 一、介绍二、注意事项1、技术支持2、兼容性3、状态更新 三、实现效果四、使用(在vue2项目中)1.npm安装2.main.js中引入3.开启愉…

QNX OS微内核系统

微内核架构 微内核(Microkernel)架构是一种操作系统架构模式,其核心思想是尽量将操作系统的基本功能压缩在最小的核心中,而将其他服务(如设备驱动、文件系统、网络协议等)放在用户空间中运行,从而增加系统的灵活性和安全性,这种架构有几个主要特点和优势: 最小化核心…

WordPress软件下载主题Inpandora

Inpandora(中文名为潘多拉)是一款基于软件下载站定制的WordPress主题,帮助站长使用WordPress快速搭建一个专业的WordPress软件博客。Inpandora这款WordPress主题可以说是因软件而生,从UI设计到后台设置功能,都充分体现…

设计软件有哪些?贴图插件篇(1),渲染100邀请码1a12

设计师经常要处理贴图,这里介绍一些贴图所用到的插件。 1、Substance 3D Painter Substance 3D Painter是Substance 3D软件套件中的一部分,是一款专业的纹理绘制软件。它提供了直观的界面和强大的工具,用于在3D模型上进行高质量的纹理绘制和…

基于51单片机数字频率计的设计资料

题目:基于51单片机数字频率计的设计 系 部: 专 业: 学 号: …

【七】【QT开发应用】跨UI发送信号,跨线程发送信号

跨UI发送信号 基本框架 新建窗口 自定义信号 跨线程发送信号 新建线程 查看线程号 完整代码 跨UI发送信号 setdialog.h #ifndef SETDIALOG_H #define SETDIALOG_H#include <QDialog>namespace Ui { class setdialog; }class setdialog : public QDialog {Q_OBJECTpub…

1panel OpenResty 设置网站重定向

当我们部署网站时需要&#xff0c;输入"cheshi.com"域名回车&#xff0c;希望他自动跳转https://cheshi.com/indx/&#xff0c;而不是直接跳转https://cheshi.com时可以利用重定向来实现&#xff0c; 这里演示的是 1panel 如何设置&#xff08;nginx 貌似也是这样配…

数据结构9——排序

一、冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff0c;顾名思义&#xff0c;就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右&#xff0c;依次比较相邻的元素大小&#xff0c;更大的元素交换到右边&#xff1b;从第一组相邻元素比较…

ChatGPT-4o也参加高考了,还写了六大考卷的全部作文! |【WeThinkIn出品】

写在前面 【WeThinkIn出品】栏目专注于分享Rocky的最新思考与经验总结&#xff0c;包含但不限于技术领域。欢迎大家一起交流学习&#x1f4aa; 欢迎大家关注Rocky的公众号&#xff1a;WeThinkIn 欢迎大家关注Rocky的知乎&#xff1a;Rocky Ding AIGC算法工程师面试面经秘籍分享…

C# 关于通讯观察线程(1) -- 开启通讯线程

通讯观察线程是个有意思&#xff0c;又是非常实用的功能。 具体怎么实现呢&#xff0c;我们来看看主要过程的伪代码。对于高手这也许很简单&#xff0c;但是要用好也是需要实践到通讯的流程正确&#xff0c;同时应对好网络故障等。 先在合适的地方启动观察线程&#xff1a; …

Leetcode84 柱状图中最大的矩形

题目描述 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积 解题思路 思路一&#xff1a;暴力寻找&#xff0c;从每个位置出发&#xff0c;向左右两边扩…

Web项目部署后浏览器刷新返回Nginx的404错误对应解决方案

data: 2024/6/22 16:05:34 周六 limou3434 叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff0c;有错误、未定义、不合适的内容请尽情指出&#xff01; 文章目录 1.源头2.排错3.原因4.解…

刷代码随想录有感(114):动态规划——最少数量的零钱换整

题干&#xff1a; 代码&#xff1a; class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int>dp(amount 1, INT_MAX);dp[0] 0;for(int i 0; i < coins.size(); i){for(int j coins[i]; j < amount; j){if(dp[j - coi…

使用Vue开发页面(前置知识)

前言 在了解Vue开发之前&#xff0c;需要有基本的页面知识。 页面主要有三部分组成&#xff1a; 组件 HTML样式 CSS交互 JS 本文将以最快&#xff0c;最简单&#xff0c;最通俗的方式讲解 HTML 一个基本的HTML文件有以下格式 <!DOCTYPE html> <html lang"e…

《洛基第二季》:多元宇宙的奇幻之旅

在浩瀚无垠的影视宇宙中&#xff0c;有一部剧如璀璨星辰般耀眼&#xff0c;那就是备受期待的《洛基第二季》。该剧由贾斯汀本森和艾伦穆尔黑德执导&#xff0c;汤姆希德勒斯顿、索菲娅迪马蒂诺、欧文威尔逊等主演&#xff0c;于2023年10月上线。 这部剧延续了第一季的故事情节&…

kafka的单机、集群部署安装

kafka的单机、集群部署安装 Kafka 的部署可以分为单机部署和集群部署。以下是详细的单机和集群部署步骤。 单机部署 Kafka 单机部署 Kafka 通常用于开发和测试环境。下文中涉及相关端口,若开启防火墙则需要开放对应的端口, 以下是详细步骤: 1. 安装 Java Kafka 依赖于 …

Map 数据结构

一、概念 Set 是一种叫【字典(是一些元素的集合&#xff0c;以 [ 键&#xff0c;值 ] 的形式储存)】的数据结构。 二、 1、属性和操作方法 size 返回 Map 的元素的个数。set() 增加一个新元素&#xff0c;返回当前的 Map。get() 返回键名对象…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇WinRS命令WinRM管理RDP终端密码喷射点CrackMapExec

红队内网攻防渗透 1. 内网横向移动1.1 内网横向移动方法分类1.2 WinRM&WinRS1.2.1 利用条件1.2.1.1 探针可用1.2.1.2 连接执行1.2.1.3 CS上线利用1.2.1.3.1 反向连接上线1.2.1.4 CS内置模块1.2.1.5 其他解决1.3 RDP1.3.1 探针连接1.3.2 连接执行1.3 CrackMapExec-密码喷射1…

OpenCL 教程:从基础到实践

OpenCL 教程&#xff1a;从基础到实践 目录 OpenCL 简介环境设置OpenCL 基础概念实践案例&#xff1a;图像边缘检测性能优化技巧常见问题和解决方案OpenCL 内存模型OpenCL 执行模型性能考虑和优化结语和进阶资源 1. OpenCL 简介 OpenCL&#xff08;Open Computing Language…

AI智能时代:ChatGPT如何在金融市场发挥策略分析与预测能力?

文章目录 一、ChatGPT在金融策略制定中的深度应用客户需求分析与定制化策略市场动态跟踪与策略调整策略分析与优化 二、ChatGPT在算法交易中的深度应用自动交易策略制定交易执行与监控风险管理 三、未来展望《智能量化&#xff1a;ChatGPT在金融策略与算法交易中的实践》亮点内…