Hierarchical Clusting模型

介绍: 

Hierarchical Clustering 是一种常用的聚类方法,它通过构建一个层次化的聚类树(或者称为聚类图),将数据点逐步合并组成不同的聚类簇。

Hierarchical Clustering 的主要思想是将相似的数据点归为一类,然后逐步合并这些类别,最终形成一个层次化的聚类结果。这个过程可以通过两种方式实现:自底向上的聚合(Agglomerative Clustering)和自顶向下的分解(Divisive Clustering)。

自底向上的聚合是一种自底向上逐步合并数据点的方法。首先,将每个数据点视为一个初始的聚类簇。然后,根据某种相似性度量(例如欧氏距离、曼哈顿距离等),计算两个聚类簇之间的相似度。接着,将相似度最高的两个聚类簇合并成一个新的聚类簇,并更新相似度矩阵。重复这个过程,直到所有数据点都合并成一个聚类簇,或者达到预设的聚类数量。

自顶向下的分解则是一种自顶向下逐步划分数据点的方法。首先,将所有数据点视为一个初始的聚类簇。然后,根据某种相似度度量,选择一个聚类簇进行划分,将其分成两个较小的子簇。重复这个过程,直到达到预设的聚类数量或者满足某种停止准则。

无论是自底向上的聚合还是自顶向下的分解,最终都会得到一个层次化的聚类结果,可以通过聚类树或者聚类图来可视化。聚类树的每个节点代表一个聚类簇,而每个分支代表两个聚类簇的合并或划分关系。

Hierarchical Clustering 的优点包括不需要预先指定聚类数量、可以处理非凸形状的聚类簇、适用于不同类型的数据。但它也有一些缺点,例如计算复杂度较高、结果容易受到初始化和相似度度量方式的影响。因此,在使用 Hierarchical Clustering 时,需要根据具体情况选择合适的相似度度量和聚类算法。

数据 :

import pandas as pd#Hierarchical Clusting
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inlinedata = pd.read_csv("customers.csv")

 

data.describe()

StandardScaler和normalize都是用来对数据进行归一化处理的机器学习预处理方法,但是它们有一些区别:

  1. 标准化方法不依赖于数据的分布,而归一化方法则依赖于数据的分布。标准化方法通过对数据进行减去平均值然后除以标准差的操作,将数据转换成均值为0,方差为1的分布。而归一化方法是将数据限定在一个特定的范围内,例如[0, 1]或[-1, 1]。

  2. 标准化方法对异常值的处理更加稳健,而归一化方法对异常值更加敏感。标准化方法在计算平均值和标准差时会将所有数据点都考虑在内,因此异常值的影响相对较小。而归一化方法的结果受到最大值和最小值的影响,如果存在异常值,那么最大值和最小值会被拉大或缩小,导致其他数据的变化幅度也增大或减小。

  3. 标准化方法保留了数据的原始信息,而归一化方法则改变了数据的原始信息。标准化方法只是对数据进行了线性映射,不改变数据的分布形状和相对大小关系。而归一化方法将数据映射到一个特定的范围内,改变了数据的分布形状和相对大小关系。

综上所述,选择标准化方法还是归一化方法取决于具体的应用场景和数据特点。如果希望保留数据的原始信息并且对异常值有较强的鲁棒性,可以选择标准化方法;如果希望将数据映射到一个特定的范围内并且不关心数据的分布形状和相对大小关系,可以选择归一化方法。

from sklearn.preprocessing import StandardScaler#列
sc=StandardScaler()
scaled_data=sc.fit_transform(data)from sklearn.preprocessing import normalize#行
norm_data=normalize(data)df=pd.DataFrame(scaled_data,columns=data.columns)
df1=pd.DataFrame(norm_data,columns=data.columns)

 Dendrogram图:

import scipy.cluster.hierarchy as shc
plt.figure(figsize=[10,7])
plt.title('Dendrogram')
dend=shc.dendrogram(shc.linkage(df,method='ward'))#method表示测距离不同的方法

 

import scipy.cluster.hierarchy as shc
plt.figure(figsize=[10,7])
plt.title('Dendrogram')
dend=shc.dendrogram(shc.linkage(df1,method='ward'))#method表示测距离不同的方法

 

plt.figure(figsize=(10, 7))  
plt.title("Dendrograms")  
dend = shc.dendrogram(shc.linkage(df1, method='ward'))
plt.axhline(y=6, color='r', linestyle='--')

 

建模: 

from sklearn.cluster import AgglomerativeClustering
cluster=AgglomerativeClustering(n_clusters=2,affinity='euclidean',linkage='ward')#分成两类,用欧几里得
cluster.fit_predict(df1)'''结果:
array([1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1,1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1,1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0,0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1,0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1,0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0,0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1,1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0,0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1,1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1],dtype=int64)
'''df1['cluster']=cluster.fit_predict(df1)

plt.figure(figsize=[10,7])
plt.scatter(df1.Milk,df1.Grocery,c=cluster.labels_)#基于Milk和Grocery,可以看出买Milk越多的越少关注Grocery

plt.figure(figsize=(10, 7))  
plt.scatter(df1['Milk'], df1['Fresh'], c=cluster.labels_) #可以看出越是对新鲜产品关注的,对牛奶更不关注

 

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

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

相关文章

竞赛保研 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的人脸专注度…

作业三详解

作业3: 在作业1的基础上,整合修改、删除功能,可实现如下功能 1.进入新增页面,页面填入新增数据,提交表单,然后跳转到查询列表页面,列表页面显示所有记录(多一条新增的数据&#xff…

Eureka服务注册与发现中心

简介 Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理 在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现…

vue简单实现滚动条

背景:产品提了一个需求在一个详情页,一个form表单元素太多了,需要滚动到最下面才能点击提交按钮,很不方便。他的方案是,加一个滚动条,这样可以直接拉到最下面。 优化:1、支持滚动条,…

Beauty algorithm(三)腮红

查阅资料了解到腮红位于苹果肌处,同样使用关键点确定目标区域,然后对该区域进行渲染达到美妆效果。考虑到如果使用简单的RGB是很难做到特效,本篇采用模板方式进行区域融合。 一、skills 前瞻 1、png图像读取 cv::imread(imgPath, cv::IMREAD_UNCHANGED) IMREAD_UNCHANGE…

C++ OpenGL 3D GameTutorial 1:Making the window with win32 API学习笔记

视频地址https://www.youtube.com/watch?vjHcz22MDPeE&listPLv8DnRaQOs5-MR-zbP1QUdq5FL0FWqVzg 一、入口函数 首先看入口函数main代码&#xff1a; #include<OGL3D/Game/OGame.h>int main() {OGame game;game.Run();return 0; } 这里交代个关于C语法的问题&#x…

Swift爬虫使用代理IP采集唯品会商品详情

目录 一、准备工作 二、代理IP的选择与使用 三、使用Swift编写唯品会商品爬虫 四、数据解析与处理 五、注意事项与优化建议 六、总结 一、准备工作 在开始编写爬虫之前&#xff0c;需要准备一些工具和库&#xff0c;以确保数据抓取的顺利进行。以下是所需的工具和库&…

spring Security源码讲解-WebSecurityConfigurerAdapter

使用security我们最常见的代码&#xff1a; Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {Overrideprotected void configure(HttpSecurity http) throws Exception {http.formLogin().permitAll();http.authorizeRequests().antMatcher…

虚幻UE 材质-边界混合之PDO像素深度偏移量

2024年的第一天&#xff01;&#xff01;&#xff01;大家新年快乐&#xff01;&#xff01;&#xff01; 可能是长大了才知道 当你过得一般 你的亲朋好友对你真正态度只可能是没有表露出来的冷嘲热讽了 希望大家新的一年平安、幸福、 永远活力满满地追求自己所想做的、爱做的&…

​三子棋(c语言)

前言&#xff1a; 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#xff0c;率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小&#xff0c;三子棋在很多时候会出现和…

集合基础知识点

集合基础 1. 集合的由来 当 Java 程序中需要存放数据的时候&#xff0c;通常会定义变量来实现数据的存储&#xff0c;但是&#xff0c;当需要存储大量数据的时候该怎么办呢&#xff1f;这时首先想到的是数组&#xff0c;但是&#xff01;数组只能存放同一类型的数据&#xff…

Linux 编译安装 Nginx

目录 一、前言二、四种安装方式介绍三、本文安装方式&#xff1a;源码安装3.1、安装依赖库3.2、开始安装 Nginx3.3、Nginx 相关操作3.4、把 Nginx 注册成系统服务 四、结尾 一、前言 Nginx 是一款轻量级的 Web 服务器、[反向代理]服务器&#xff0c;由于它的内存占用少&#xf…

RabbitMQ(七)ACK 消息确认机制

目录 一、简介1.1 背景1.2 定义1.3 如何查看确认/未确认的消息数&#xff1f; 二、消息确认机制的分类2.1 消息发送确认1&#xff09;ConfirmCallback方法2&#xff09;ReturnCallback方法3&#xff09;代码实现方式一&#xff1a;统一配置a.配置类a.生产者c.消费者d.测试结果 …

淘宝京东1688商品详情API接口,搜索商品列表接口

前言 在实际工作中&#xff0c;我们需要经常跟第三方平台打交道&#xff0c;可能会对接第三方平台API接口&#xff0c;或者提供API接口给第三方平台调用。 那么问题来了&#xff0c;如果设计一个优雅的API接口&#xff0c;能够满足&#xff1a;安全性、可重复调用、稳定性、好…

嵌入式-C语言-ASCII码(字符)转换二进制和十六进制

一&#xff1a;ASCII码是什么&#xff1f; 问&#xff1a;ASCII码是什么&#xff1f; 答&#xff1a;ASCII码&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;是一种用于表示字符的标准编码系统。它使用7位或8位…

poium测试库之JavaScript API封装原理

为什么要封装JavaScript的API&#xff1f; 因为有些场景下Selenium提供的API并不能满足我们需求。比如&#xff0c;滑动浏览滚动条&#xff0c;控制元素的显示/隐藏&#xff0c;日历控件的操作等&#xff0c;都可以通过JavaScrip实现&#xff0c;而且Selenium为我们提供了 exe…

C#之反编译之路(一)

本文将介绍微软反编译神器dnSpy的使用方法 c#反编译之路(一) dnSpy.exe区分64位和32位,所以32位的程序,就用32位的反编译工具打开,64位的程序,就用64位的反编译工具打开(个人觉得32位的程序偏多,如果不知道是32位还是64位,就先用32位的打开试试) 目前只接触到wpf和winform的桌…

leetcode——杨辉三角

https://leetcode.cn/problems/pascals-triangle/ 杨辉三角&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 核心思想&#xff1a;找出杨辉三角的规律&#xff0c;发…

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…