《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)

在这里插入图片描述

文章目录

  • 6.1 主成分分析(PCA)
    • 6.1.1 基础知识
    • 6.1.2 主要案例:客户细分
    • 6.1.3 拓展案例 1:面部识别
    • 6.1.4 拓展案例 2:基因数据分析
  • 6.2 聚类分析
    • 6.2.1 基础知识
    • 6.2.2 主要案例:市场细分
    • 6.2.3 拓展案例 1:文档聚类
    • 6.2.4 拓展案例 2:基因表达数据的聚类
  • 6.3 判别分析
    • 6.3.1 基础知识
    • 6.3.2 主要案例:信用评分模型
    • 6.3.3 拓展案例 1:市场细分与目标客户识别
    • 6.3.4 拓展案例 2:疾病诊断

6.1 主成分分析(PCA)

主成分分析(PCA)是一种强大的统计工具,用于数据降维和模式识别。它能帮助我们在减少数据复杂度的同时,保留最重要的信息。

6.1.1 基础知识

  • PCA的目的和原理:PCA的主要目的是识别数据中的模式,并将数据从原始空间转换到一个新的空间,这个新空间的基是数据的主成分。这可以通过寻找数据最大方差的方向并将其作为第一个主成分,然后寻找与第一个主成分正交且方差最大的方向作为第二个主成分,以此类推。
  • PCA的步骤:PCA的步骤包括标准化原始数据、计算协方差矩阵、提取特征值和特征向量、选择主成分、转换到新的空间。
  • 解释主成分:每个主成分都能够解释数据的一部分变异性,第一个主成分解释最大的变异性,每个后续的主成分都解释剩余变异性中最大的部分。

6.1.2 主要案例:客户细分

场景:一家零售公司希望通过客户购买历史数据进行客户细分,以便更好地理解客户群体和优化营销策略。

Python 示例

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import pandas as pd# 假设 df 是包含客户购买历史数据的DataFrame
# 数据标准化
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)# 应用PCA
pca = PCA(n_components=2)  # 选择两个主成分
principalComponents = pca.fit_transform(df_scaled)# 将主成分转换为DataFrame
principalDf = pd.DataFrame(data=principalComponents, columns=['principal component 1', 'principal component 2'])# 输出解释的方差比
print(pca.explained_variance_ratio_)

6.1.3 拓展案例 1:面部识别

场景:一个安全系统使用面部识别技术来验证个人身份。由于面部图像数据维度很高,使用PCA来降低数据维度,提高识别算法的效率。

Python 示例

# 假设 face_images 是面部图像数据集的变量
# 此处代码省略数据加载步骤# 应用PCA进行降维
pca = PCA(n_components=150)  # 选择150个主成分
faces_pca = pca.fit_transform(face_images)# 使用降维后的数据进行面部识别处理
# 此处代码省略面部识别具体实现

6.1.4 拓展案例 2:基因数据分析

场景:生物学家使用PCA来分析和可视化基因表达数据,以探索不同样本之间的相似性和差异性。

Python 示例

# 假设 gene_expression 是基因表达数据的DataFrame
# 数据标准化
scaler = StandardScaler()
gene_expression_scaled = scaler.fit_transform(gene_expression)# 应用PCA
pca = PCA(n_components=3)  # 选择三个主成分进行分析
gene_pca = pca.fit_transform(gene_expression_scaled)# 将主成分转换为DataFrame,用于后续分析和可视化
gene_pca_df = pd.DataFrame(data=gene_pca, columns=['PC1', 'PC2', 'PC3'])# 可视化代码省略

通过这些案例,我们可以看到PCA如何在不同领域内帮助我们简化数据,揭示数据结构和模式。无论是进行客户细分、面部识别还是基因数据分析,PCA都是一种有效的工具,使我们能够在降低数据复杂度的同时,捕捉到最关键的信息。

在这里插入图片描述


6.2 聚类分析

聚类分析是一种探索性数据分析技术,它试图将数据集中的对象分组,使得组内的对象比组间的对象更为相似。这就像是将一堆不同的水果根据颜色、形状或大小分类,以便更好地管理和使用它们。

6.2.1 基础知识

  • 聚类的目的:聚类的主要目的是发现数据内部的自然分组,以揭示数据的结构,为进一步的分析和决策提供依据。
  • 常见的聚类算法
    • K-均值聚类(K-means Clustering):通过将数据点分配到K个簇中,使得每个点与其所属簇的中心(质心)之间的距离之和最小化。
    • 层次聚类(Hierarchical Clustering):通过连续合并或分割簇来构建簇的层次结构。
    • DBSCAN(Density-Based Spatial Clustering of Applications with Noise):基于密度的聚类方法,能够识别噪声数据,对簇的形状和大小没有假设。
  • 聚类分析的应用:聚类分析广泛应用于市场细分、社交网络分析、图像分割、生物信息学等领域。

6.2.2 主要案例:市场细分

场景:一家电子商务公司希望通过聚类分析对其客户进行市场细分,以便实施针对性的营销策略。

Python 示例

from sklearn.cluster import KMeans
import pandas as pd# 假设 df 是包含客户购买行为数据的DataFrame
# 使用K-均值算法进行聚类
kmeans = KMeans(n_clusters=5)  # 假设我们想将客户分成5个群体
df['cluster'] = kmeans.fit_predict(df[['feature1', 'feature2', 'feature3']])# 查看聚类结果
print(df.groupby('cluster').mean())

6.2.3 拓展案例 1:文档聚类

场景:一家新闻机构希望自动对成千上万的新闻文章进行分类,以改进文章的组织和推荐。

Python 示例

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans# 假设 documents 包含了需要聚类的文档集合
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(documents)# 使用K-均值算法进行文档聚类
kmeans = KMeans(n_clusters=10)  # 分成10个类别
kmeans.fit(X)# 获取聚类结果
clusters = kmeans.labels_

6.2.4 拓展案例 2:基因表达数据的聚类

场景:生物学家希望通过聚类分析来探索在不同条件下表达的基因,以发现功能相关的基因群体。

Python 示例

from sklearn.cluster import AgglomerativeClustering
import numpy as np# 假设 gene_expression 是基因表达数据的numpy数组
# 使用层次聚类算法
clustering = AgglomerativeClustering(n_clusters=5)
gene_clusters = clustering.fit_predict(gene_expression)# 分析聚类结果
# 此处可以进一步分析每个簇的基因和它们的功能

通过这些案例,我们可以看到聚类分析在不同领域的广泛应用,从市场细分到文档分类,再到基因表达数据的分析。聚类分析帮助我们发现数据中的隐藏模式和结构,为决策提供科学依据。使用Python进行聚类分析,我们可以轻松处理大量数据,快速得到有意义的结果。

在这里插入图片描述


6.3 判别分析

判别分析是一种监督学习技术,用于模型构建,以预测或分类观测所属的组别。它基于不同类别之间的差异,确定哪些变量对于区分类别是重要的,并创建一个或多个判别函数来预测类别归属。

6.3.1 基础知识

  • 判别分析的基本概念:判别分析通过分析自变量来预测类别变量。它尝试定义不同类别之间的边界,并利用这些边界来确定新观测所属的类别。
  • 线性判别分析(LDA):LDA是判别分析中最常用的方法之一,它寻找能最大化类别间分散度同时最小化类别内分散度的线性组合。LDA特别适用于当自变量是连续量且符合正态分布,各类具有相同协方差矩阵时。
  • 判别分析的应用:判别分析可以应用于信用评分、客户分类、疾病诊断等多个领域,它帮助我们根据已有数据制定分类规则,并应用这些规则到新数据上。

6.3.2 主要案例:信用评分模型

场景:银行希望开发一个信用评分模型,以预测客户是否有违约的风险。

Python 示例

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd# 加载数据集
data = pd.read_csv('credit_score_data.csv')
X = data.drop('Default', axis=1)  # 自变量
y = data['Default']  # 因变量,违约与否# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 构建LDA模型
lda = LinearDiscriminantAnalysis()
lda.fit(X_train, y_train)# 在测试集上评估模型
y_pred = lda.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

6.3.3 拓展案例 1:市场细分与目标客户识别

场景:一家营销公司希望通过判别分析识别潜在的目标客户群体,以便更有效地定位其营销策略。

Python 示例

# 假设已有包含客户特征和是否为目标客户的标签的数据集
# 此处代码省略数据准备步骤lda = LinearDiscriminantAnalysis()
lda.fit(customer_features, target_label)# 使用模型识别新客户是否为目标客户
# 此处代码省略新客户数据的应用步骤

6.3.4 拓展案例 2:疾病诊断

场景:医疗研究人员希望开发一个模型,用于根据患者的各种生理指标来预测其是否患有特定疾病。

Python 示例

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import pandas as pd# 假设 disease_data 是包含生理指标和疾病状态的DataFrame
# 此处代码省略数据准备步骤lda = LinearDiscriminantAnalysis()
lda.fit(disease_data_features, disease_status)# 使用模型对患者进行诊断
# 此处代码省略诊断应用步骤

通过这些案例,我们可以看

到判别分析在不同场景下的实际应用,从银行的信用评分到营销的目标客户识别,再到医疗领域的疾病诊断。判别分析为我们提供了一种强大的方法,以数据驱动的方式来预测分类,并帮助我们做出更加精准的决策。使用Python进行判别分析,我们可以利用现有的库和工具,快速构建和评估模型。

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

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

相关文章

第2讲投票系统后端架构搭建

创建项目时&#xff0c;随机选择一个&#xff0c;后面会生成配置properties文件 生成文件 maven-3.3.3 设置阿里云镜像 <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more cont…

【Python】Mac 本地部署 stable-diffusion

其实要在本地部署 stable-diffusion 不难&#xff0c;只要有“魔法”一切都水到渠成&#xff0c;如下图&#xff1a; (base) MacBook-Pro python % git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui Cloning into stable-diffusion-webui... remote: Enu…

前端JavaScript篇之setTimeout、Promise、Async/Await 的区别

目录 setTimeout、Promise、Async/Await 的区别**setTimeout**:思路需要注意的 **Promise**:思路需要注意的 **Async/Await**:思路需要注意的 总结 setTimeout、Promise、Async/Await 的区别 setTimeout: 概念&#xff1a;setTimeout是JavaScript中的一个函数&#xff0c;用于…

c++求三个数中最大数

#include<iostream> using namespace std; int main() { int a,b,c; cout<<"请输入三个数字"<<endl;//end后面为小写的L cin>>a>>b>>c; if(a>b&&a>c) cout<<"最大数为a:"<<a<<e…

【MySQL】——数值函数的学习

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Z1fAnfrxGD7I5gqp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

JAVA设计模式之访问模式详解

访问者模式 1 访问者模式介绍 访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式. 访问者模式(Visitor Pattern) 的原始定义是&#xff1a;允许在运行时将一个或多…

Java集合 LinkedList

目录 LinkedList实例 LinkedList LinkedList是Java中的一个重要的数据结构&#xff0c;它实现了List接口&#xff0c;提供了链表数据结构的实现。LinkedList类中包含了各种常用的链表操作&#xff0c;如添加、删除、查找等。 LinkedList的特点是元素可以动态地添加到链表的任…

关于创建vue项目报错command failed: npm install --loglevel error

一、首先 在这个目录下有个文件叫.vuerc 二、其次 进去之后把里面的"useTaobaoRegistry": false,修改下&#xff0c;我之前是true&#xff0c;后来改成了false才成功。

【数据结构】11 堆栈(顺序存储和链式存储)

定义 可认为是具有一定约束的线性表&#xff0c;插入和删除操作都在一个称为栈顶的端点位置。也叫后入先出表&#xff08;LIFO&#xff09; 类型名称&#xff1a;堆栈&#xff08;STACK&#xff09; 数据对象集&#xff1a; 一个有0个或者多个元素的有穷线性表。 操作集&#…

单片机与外设的交互

单片机与外设的交互是嵌入式系统中非常重要的一个基础知识点。单片机是一个集成在同一芯片上的中央处理器、存储器和输入/输出接口,它可以根据用户编写的程序与各种外部设备即外设进行交互。单片机与外设之间的交互主要通过单片机上的输入/输出口(I/O口)来实现。 I/O口的工作原…

一个适用于后渗透期间的信息收集工具

介绍 Pillager是一个适用于后渗透期间的信息收集工具&#xff0c;可以收集目标机器上敏感信息&#xff0c;方便下一步渗透工作的进行。 支持 注&#xff1a;✅表示经过测试&#xff0c;&#x1f6a7;表示理论上支持但未经测试&#xff0c;❌表示无此功能或不支持 后续将会陆续…

CSP-202006-1-线性分类器

CSP-202006-1-线性分类器 解题思路 通过比较第一个训练数据点的类别和直线函数值的正负来确定标准类别和标准函数值的正负。循环遍历训练数据中的每个点&#xff0c;计算直线函数值并与标准函数值比较&#xff0c;以确定该点所在的类别。 如果当前点的类别与标准类别一致&…

Lua: 一门轻量级、高效的脚本语言

Lua: 一门轻量级、高效的脚本语言 在当今软件开发的领域中&#xff0c;寻找一门既灵活又高效的脚本语言&#xff0c;一直是开发者们追求的目标。Lua作为一门小巧、高效、可嵌入的脚本语言&#xff0c;已经成为了众多开发者的首选之一。无论是游戏开发、嵌入式系统、Web 开发还是…

ncc匹配提速总结

我们ncc最原始的匹配方法是&#xff1a;学习模板w*h个像素都要带入ncc公式计算 第一种提速&#xff0c;学习模板是w*h&#xff0c;而我们支取其中的w/2*h/2,匹配窗口同理&#xff0c;计算量只有1/4。 另外一种因为ncc是线性匹配&#xff0c;我们在这上面也做了文章&#xff0…

《UE5_C++多人TPS完整教程》学习笔记2 ——《P3 多人游戏概念(Multiplayer Concept)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P3 多人游戏概念&#xff08;Multiplayer Concept&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译…

如何把手机平板变为电脑的屏幕

文章目录 安装软件运行效果结尾 本文首发地址 https://h89.cn/archives/181.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 闲置的手机平板、触屏音箱等&#xff0c;均可作为电脑的扩展屏&#xff0c;为电脑增加一块显示屏&#xff0c;本文介绍如何使用免费的软件s…

DS Wannabe之5-AM Project: DS 30day int prep day12

Q1. Where is the confusion matrix used? Which module would you use to show it? 混淆矩阵 混淆矩阵常用于评估分类模型的性能&#xff0c;特别是在二分类或多分类问题中。它展示了实际类别与模型预测类别之间的关系。在Python中&#xff0c;可以使用sklearn.metrics模块…

代码随想录算法训练营DAY13 | 栈与队列 (3)

一、LeetCode 239 滑动窗口最大值 题目链接&#xff1a;239.滑动窗口最大值https://leetcode.cn/problems/sliding-window-maximum/ 思路&#xff1a;使用单调队列&#xff0c;只保存窗口中可能存在的最大值&#xff0c;从而降低时间复杂度。 public class MyQueue{Deque<I…

【闲谈】初识深度学习

在过去的十年中&#xff0c;深度学习彻底改变了我们处理数据和解决复杂问题的方式。从图像识别到自然语言处理&#xff0c;再到游戏玩法&#xff0c;深度学习的应用广泛且深入。本文将探讨深度学习的基础知识、关键技术以及最新的研究进展&#xff0c;为读者提供一个全面的视角…

第三节 zookeeper基础应用与实战2

目录 1. Watch事件监听 1.1 一次性监听方式&#xff1a;Watcher 1.2 Curator事件监听机制 2. 事务&异步操作演示 2.1 事务演示 2.2 异步操作 3. Zookeeper权限控制 3.1 zk权限控制介绍 3.2 Scheme 权限模式 3.3 ID 授权对象 3.4 Permission权限类型 3.5 在控制台…