医学数据分析实训 项目二 数据预处理预备知识(数据标准化处理,数据离差标准化处理,数据二值化处理,独热编码处理,数据PCA降维处理)

news2024/9/20 13:31:06

文章目录

  • 数据预处理预备知识
    • 任务一 数据标准化处理
      • 1. 数据准备
      • 2. 数据标准化
    • 任务二 数据离差标准化处理
    • 任务三 数据二值化处理
    • 任务五 独热编码处理
      • 对数据进行“离散化处理”(装箱)
      • 将已经装箱的数据进行OneHotEncoder独热编码
    • 任务六 数据PCA降维处理
      • 1. 导入iris(鸢尾花)数据集
      • 2. 指定特征数的PCA降维
      • 3. 保留方差百分比的PCA降维
    • 项目拓展
      • 数据预处理实战——wine酒数据集拆分、标准化和降维处理

数据预处理预备知识

任务一 数据标准化处理

使用StandardScaler进行数据预处理

  • StandardScaler类是一个用来将数据进行归一化和标准化的类。
  • 将数据按其属性(按列进行)减去平均值和缩放到单位方差来标准化特征。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,标准差为1,使得新的X数据集方差为1,均值为0
  • 在进行标准化的过程中就将训练集的均值和方差当做是总体的均值和方差,因此对测试集使用训练集的均值和方差进行预处理。
  • 适用范围:如果数据的分布本身就服从正态分布,就可以用这个方法。
# StandardScaler类的使用
from sklearn.preprocessing import StandardScaler
import numpy as np

X = np.array([[1., -1., 2.],
              [2., 0., 0.],
              [0., 1., -1.]])
# 计算平均值
X_mean = X.mean(axis=0)
# 计算方差
X_std = X.std(axis=0)
# 标准化X 
X1 = (X - X_mean) / X_std  # 自己计算

# 调用sklearn包的方法
X_scale = StandardScaler().fit_transform(X)
# 最终X1与X_scale等价
print('均值方差标准化后的数据:\n', X1)
print('StandardScaler标准差标准化后的数据:\n', X_scale)

在这里插入图片描述

1. 数据准备

import matplotlib.pyplot as plt
# 导入数据集生成工具
from sklearn.datasets import make_blobs

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# 生成一个样本量为50,分类数为1,标准差为1的聚类数据集
X, y = make_blobs(n_samples=50, centers=1, cluster_std=1, random_state=8)
# 用散点图绘制数据点
plt.scatter(X[:, 0], X[:, 1], c='blue')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.title('原始数据')
plt.show()

在这里插入图片描述

2. 数据标准化

# 导入StandardScaler
from sklearn.preprocessing import StandardScaler

# 使用StandardScaler进行数据处理,用于将数据转换为均值为 0,标准差为 1 的标准正态分布。
scaler = StandardScaler().fit(X)
X_1 = scaler.transform(X)
# 也可以用fit_transform()实现
# X_1 = StandardScaler().fit_transform(X)

# 用散点图绘制经过预处理的数据点
plt.scatter(X_1[:, 0], X_1[:, 1], c='blue')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.title('均值方差标准化数据')
plt.show()

在这里插入图片描述

任务二 数据离差标准化处理

  • 将每个元素(特征,feature)转换成给定范围的值。
  • MinMaxScaler有一个重要参数"feature_range",控制数据压缩到的范围,默认是[0,1]。
  • 适用范围:适用于数据在一个范围内分布的情况,在不涉及距离度量、协方差计算、数据不符合正态分布的时候,可以使用MinMaxScaler。
# 导入MinMaxScaler
from sklearn.preprocessing import MinMaxScaler

# 使用MinMaxScaler进行数据预处理
X_2 = MinMaxScaler().fit_transform(X)
# 绘制散点图
plt.scatter(X_2[:, 0], X_2[:, 1], c='blue')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.title('离差标准化数据')
plt.show()

在这里插入图片描述

任务三 数据二值化处理

  • 特征的二值化主要是为了将数据特征转化为boolean变量
  • Binarizer也可以设置一个阈值,结果数据值大于阈值的为1,小于阈值的为0
import numpy as np
# 导入Binarizer
from sklearn.preprocessing import Binarizer

data = np.array([[3, -1.5, 2, -5.4],
                 [0, 4, -0.3, 2.1],
                 [1, 3.3, -1.9, -4.3]])
# 特征二值化
data_binarized = Binarizer(threshold=1.4).transform(data)
print("二值化处理后的数据: \n", data_binarized)

在这里插入图片描述

## 任务四 数据归一化处理
- normalizer 数据归一化使每个特征向量的值都缩放到相同的数值范围。归一化的形式有l1,l2范数等
- sklearn.preprocessing.Normalizer(norm='l2', copy=True) 
    - norm:可以为l1、l2或max,默认为l2
    - 若为l1时,样本各个特征值除以各个特征值的绝对值之和
    - 若为l2时,样本各个特征值除以各个特征值的平方之和
    - 若为max时,样本各个特征值除以样本中特征值最大的值
# 导入Normalizer
from sklearn.preprocessing import Normalizer

# 使用Normalizer进行数据预处理,默认为l2范数
# 将所有样本的特征向量转化为欧几里得距离为1;通常在只想保留数据特征向量的方向,而忽略其数值的时候使用
X_3 = Normalizer().fit_transform(X)
# 绘制散点图
plt.figure(figsize=(6, 6))
plt.scatter(X_3[:, 0], X_3[:, 1], c='blue')
plt.xlim(0, 1.1)
plt.ylim(0, 1.1)
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.title('L2范数的归一化化处理')
plt.show()

在这里插入图片描述

# 修改norm参数为范数l1
X_4 = Normalizer(norm='l1').fit_transform(X)
# 绘制散点图
plt.figure(figsize=(6, 6))
plt.scatter(X_4[:, 0], X_4[:, 1], c='blue')
plt.xlim(0, 1.1)
plt.ylim(0, 1.1)
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.title('L1范数的归一化化处理')
plt.show()

在这里插入图片描述

任务五 独热编码处理

  • 独热编码(One-Hot Encoding)把特征向量的每个特征与特征的非重复总数相对应,通过one-of-k的形式对每个值进行编码,如果非重复计数的值是k,那么就把这个特征转换为只有一个值是1其他值都是0的k维向量。
  • OneHotEncoder 参数:
    • categories: 表示特征的取值,该参数取值为list或者默认的’auto’
import numpy as np
# 导入OneHotEncoder
from sklearn.preprocessing import OneHotEncoder

data_type = np.array([[0, 1],
                      [1, 3],
                      [2, 0],
                      [1, 2]])
print(data_type)
encoder = OneHotEncoder(categories='auto').fit(data_type)
data_encoded = encoder.transform(data_type).toarray()
print("编码后的数据: \n", data_encoded)

在这里插入图片描述

对数据进行“离散化处理”(装箱)

  • numpy.digitize(x, bins, right = False)
  • 该函数返回输入数组x中每个值所属的数组bins的区间索引。
  • 参数:
    • x : numpy数组
    • bins : 一维单调数组,必须是升序或者降序
    • right:间隔是否包含最右
  • 返回值:x在bins中的位置。
import numpy as np

# 定义一个随机数的数组
np.random.seed(38)
arr = np.random.uniform(-5, 5, size=20)
# 设置箱体数为5
bins = np.linspace(-5, 5, 6)
# 将数据进行装箱操作
target_bin = np.digitize(arr, bins=bins)
# 打印装箱数据范围
print('装箱数据范围:\n{}'.format(bins))
print('\n数据点的特征值:\n{}'.format(arr))
print('\n数据点所在的箱子:\n{}'.format(target_bin))

在这里插入图片描述

将已经装箱的数据进行OneHotEncoder独热编码

from sklearn.preprocessing import OneHotEncoder

# 假设 target_bin 是你的目标变量
target_bin = target_bin.reshape(-1, 1)

# 初始化 OneHotEncoder,注意这里不需要设置 sparse 参数, 因为sparse参数已经被移除
# onehot = OneHotEncoder(sparse=False, categories='auto')
onehot = OneHotEncoder(categories='auto')

# 拟合并转换数据
onehot.fit(target_bin)
arr_in_bin = onehot.transform(target_bin)

# 打印结果
print('装箱编码后的数据形态:{}'.format(arr_in_bin.shape))
print('\n装箱编码后的数据值:\n{}'.format(arr_in_bin))

在这里插入图片描述

任务六 数据PCA降维处理

  • PCA通过计算协方差矩阵的特征值和相应的特征向量,在高维数据中找到最大方差的方向,并将数据映射到一个维度不大于原始数据的新的子空间中。

1. 导入iris(鸢尾花)数据集

# 导入iris(鸢尾花)数据集
from sklearn.datasets import load_iris

# 加载iris数据集
iris = load_iris()
X = iris.data
print('iris数据集的维度为:', X.shape)

print('iris数据集的前5行数据为:\n', X[:5])

在这里插入图片描述

2. 指定特征数的PCA降维

# 导入PCA
from sklearn.decomposition import PCA

# 指定保留的特征数为3
pca_num = PCA(n_components=3)
# 训练PCA模型
pca_num.fit(X)
# 对样本数据进行PCA降维
X_pca1 = pca_num.transform(X)
# 查看降维结果
print('iris数据集进行指定特征数的降维后的维度为:', X_pca1.shape)
# 查看降维后的前5行数据
print('指定特征数的降维后iris数据集的前5行数据为:\n', X_pca1[:5])

在这里插入图片描述

# 查看原始特征与PCA主成分之间的关系
import numpy as np

print('指定特征数的降维后的最大方差的成分:')
for i in range(pca_num.components_.shape[0]):
    arr = np.around(pca_num.components_[i], 2)
    print('component{0}: {1}'.format((i + 1), [x for x in arr]))

在这里插入图片描述

# 查看降维后的各主成分的方差值和方差占比
var = np.around(pca_num.explained_variance_, 2)
print('指定特征数的降维后的各主成分的方差为:', [x for x in var])
var_ratio = np.round(pca_num.explained_variance_ratio_, 2)
print('指定特征数的降维后的各主成分的方差百分比为:', [x for x in var_ratio])

在这里插入图片描述

3. 保留方差百分比的PCA降维

# 指定保留的方差百分比为0.95
pca_per = PCA(n_components=0.95)
# 训练PCA模型
pca_per.fit(X)
# 对样本数据进行PCA降维
X_pca2 = pca_per.transform(X)
# 查看降维结果
print('iris数据集进行指定方差百分比的降维后的维度为:', X_pca2.shape)
# 查看降维后的前5行数据
print('指定方差百分比的降维后iris数据集的前5行数据为:\n', X_pca2[:5])

在这里插入图片描述

# 查看原始特征与PCA主成分之间的关系
print('指定方差百分比降维后的最大方差的成分:')
for i in range(pca_per.components_.shape[0]):
    arr = np.round(pca_per.components_[i], 2)
    print('component{0}: {1}'.format((i + 1), [x for x in arr]))

在这里插入图片描述

# 查看降维后的各主成分的方差值和方差占比
var = np.around(pca_per.explained_variance_, 2)
print('指定方差百分比的降维后的各主成分的方差为:', [x for x in var])
var_ratio = np.round(pca_per.explained_variance_ratio_, 2)
print('指定方差百分比的降维后的各主成分的方差百分比为:', [x for x in var_ratio])

在这里插入图片描述

项目拓展

数据预处理实战——wine酒数据集拆分、标准化和降维处理

# 1. 导入wine酒数据集
# 导入wine酒模块
from sklearn.datasets import load_wine
import numpy as np

# 加载wine数据集
wine = load_wine()
# “input”是特征数据
X = wine.data
# “target”是目标变量数据(酒的类别标签)
y = wine.target
# 查看特征数据的维度
print('wine数据集的维度为:', X.shape)
# 查看酒的类别
print('wine数据集的类别标签为:', np.unique(y))

在这里插入图片描述

# 2. 将wine数据集划分为训练集和测试集
# 导入数据集拆分工具
from sklearn.model_selection import train_test_split

# 将数据集拆分为训练数据集和测试数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)

# 输出训练数据集中特征向量的维度
print('训练集数据维度:', X_train.shape)
# 输出训练数据集中目标标签的维度
print('训练集标签维度:', y_train.shape)
# 输出测试数据集中特征向量的维度
print('测试集数据维度:', X_test.shape)
# 输出测试数据集中特征向量的维度
print('测试集标签维度:', y_test.shape)

在这里插入图片描述

# 3. 对数据集进行标准化处理
# 导入StandardScaler
from sklearn.preprocessing import StandardScaler
# 对训练集进行拟合生成规则
scaler = StandardScaler().fit(X_train)
# 对训练集数据进行转换
X_train_scaled = scaler.transform(X_train)
# 对测试集数据进行转换
X_test_scaled = scaler.transform(X_test)

print('标准化前训练集数据的最小值和最大值:{0}, {1}'.format(X_train.min(), X_train.max()))
print('标准化后训练集数据的最小值和最大值:{0:.2f}, {1:.2f}'.format(X_train_scaled.min(), X_train_scaled.max()))
print('标准化前测试集数据的最小值和最大值:{0}, {1}'.format(X_test.min(), X_test.max()))
print('标准化后测试集数据的最小值和最大值:{0:.2f}, {1:.2f}'.format(X_test_scaled.min(), X_test_scaled.max()))

在这里插入图片描述

# 4. 对数据进行降维处理
# 导入PCA
from sklearn.decomposition import PCA
# 设置主成分数量为2
pca = PCA(n_components=2)
# 对标准化后的训练集进行拟合生成规则
pca.fit(X_train_scaled)
# 对标准化后的训练集数据进行PCA降维
X_train_pca = pca.transform(X_train_scaled)
# 对标准化后的测试集数据进行PCA降维
X_test_pca = pca.transform(X_test_scaled)

print('降维后训练集的维度为:', X_train_pca.shape)
print('降维后测试集的维度为:', X_test_pca.shape)

在这里插入图片描述

# 5. wine数据集可视化
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']   # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False     # 用来正常显示负号

# 绘制wine数据集图形
plt.figure(figsize=(8, 6))
for i, color, name in zip(np.unique(y), ['r','g','b'], wine.target_names):
    # 绘制降维后的训练集样本图形
    plt.scatter(X_train_pca[y_train==i,0], X_train_pca[y_train==i,1],
                c=color, marker='o', label='类别'+name+'训练集')
    # 绘制降维后的测试集样本图形
    plt.scatter(X_test_pca[y_test==i,0], X_test_pca[y_test==i,1],
                c=color, marker='*', label='类别'+name+'测试集')

plt.xlabel("成分1")
plt.ylabel("成分2")
plt.legend(loc='best')
plt.show()

在这里插入图片描述

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

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

相关文章

ingress对外服务

目录 ingress概念 安装ingress ingress-nginx暴露服务的方式 1. DeploymentLoadBalncer 2. DaemonSetHostNetworknodeSelector ​编辑 3.deploymentnodePort ​编辑 ingress-nginx的deploymentnodePorthttps部署 1.创建ssl的证书 2.ingressnginx ingress-nginx的权…

最强AI照片说话Windows一体包下载地址,口型合成音频驱动图片,免安装,下载即用

照片数字一键整合包:点击下载 一键安装包,简单一键启动,即刻使用,秒级体验。 目前效果最好的音频驱动图片说话的软件,比sadtalker、MuseTalk更清晰,效果更好,可以作为DID heygen的开源平替。原…

Vue安装及环境配置【图解版】

欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words! 目录 一.node.js的安装…

C语言算法

大纲 算法复杂度 排序算法 经典算法

如何使用ssm实现物流配送人员车辆调度管理系统的设计与实现+vue

TOC ssm618物流配送人员车辆调度管理系统的设计与实现vue 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思…

react和vue区别以及为什么会说react适合大型项目

都说react适合做大型项目,但是什么是大型项目呢。 什么是大型项目 这个所谓的大项目应该是指 多部门,多项目协作。而并不是页面量和工作日,对于大公司,协作所带来的成本,效率问题才是问题 为什么会说react要更适合大型…

开源waf牛了个b之长亭雷池

雷池官网: https://waf-ce.chaitin.cn/

IVF 视频文件格式

IVF IVF有两种定义,一种是 Intel创建,用于封装其Indeo编解码器。Indeo是一系列视频编解码器,由英特尔在1990年代开发,主要用于视频游戏和早期的互联网视频流;Indeo编解码器以其高压缩率和良好的视频质量而闻名&#x…

三好夫人 | 茶香月饼甜  浓情赏月圆

在这个金风送爽、丹桂飘香的中秋佳节,家家户户都沉浸在团圆与温馨的氛围之中。月饼,作为中秋的传统美食,承载着无数人对家的思念与美好祝愿。而今,当传统遇见创新,“三好夫人”——一个以男士滋补茶闻名遐迩的品牌&…

AI做梦,探索并还原你的梦

本文由 ChatMoney团队出品 作为一个爱幻想爱做白日梦的 i人,我常常就在想,什么时候能利用Al来帮助我找回一些被遗忘的、或者模糊不清的记忆? 有没有可能进入别人的梦境里瞧一瞧? 为什么世界上还有这么多的冲突和摩擦? 是不是因为人与人之间能够达到的…

OpenCV GUI常用函数详解

在OpenCV的High_level GUI模组中有很多GUI函数,下面介绍几个常用的函数。 图像显示窗口相关函数 生成图像显示窗口函数nameWindow() nameWindow()函数的原型如下: 函数用以创建一个给定名的图像显示窗口(后面简单叫做图像窗口)…

qt使用对数坐标的例子,qchart用QLogValueAxis坐标不出图解决

硬件:ThinkPad T15 系统:win10 专业版 qt版本:Qt 5.14.1 , QtCreator 4.11.1 软件界面放了一个QPushButton,一个QVBoxLayout,如下: 主要代码如下,我添加了两条曲线,…

Spring扩展点系列-SmartInstantiationAwareBeanPostProcessor

文章目录 简介源码分析示例 简介 spring容器中Bean的生命周期内所有可扩展的点的调用顺序 扩展接口 实现接口ApplicationContextlnitializer initialize AbstractApplicationContext refreshe BeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry B…

Python基础学习(1)

目录 一,表达式和变量 1,表达式 2,变量 二,类型 1,前言 2,动态性特征 一个技巧让python变量类型更加明确 3,变量的类型 1,整型 2,float 3,布尔型 4&…

border制作渐变色边框

border也可以做出渐变色效果 .themeConfig {width: 250px;height: 117px;border: 1.5px solid transparent !important;border-radius: 8px !important;background-clip: padding-box, border-box;background-origin: padding-box, border-box;background-image: linear-gradi…

linux第一课(操作系统核心)

一.关于linux (1)linux是一款开源的操作系统(是多用户,多任务,多线程)。 (2)一般所说的linux指的是linux核心,即对计算机硬件资源负责调度管理,主要职责是进程管理,内存管理文件系统,设备驱动&#xff0c…

轧钢测径仪对热轧产线实现温度系数自动修正!

钢材在轧制过程中,需要检测外径时,很多都处于高温状态,甚至是1000℃以上,这对轧钢测径仪是个巨大的考验,但测径仪在解决高温、水雾、氧化铁皮、震动等对测量影响的同时,还要考虑钢材热态下的膨胀造成的测量…

揭秘同态加密 (HE):你需要知道什么?

鉴于苹果公司发布了重要的 Swift 同态加密公告,Zama 高级软件工程师 Agns Leroy 详细解释了 HE 是什么、不同的方案及其功能,以及它在未来可能的用途。 7 月底,苹果隐私保护技术团队宣布了一项令人兴奋的新成果:‘swift-homomorp…

什么是WSL?

WSL(Windows Subsystem for Linux)是一个为在 Windows 10 和 Windows 11 上能够原生运行 Linux 二进制可执行文件的兼容层。 主要特点和功能包括: 一、运行 Linux 环境 允许用户在 Windows 系统上直接运行 Linux 命令行工具、脚本和应用程…

springboot系列--自动配置原理

一、容器功能 一、组件添加功能 一、Configuration Configuration有两种模式,Full模式与Lite模式。 1、配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断 2、配置类组件之间有依赖关系,方法会被调用得到之前单实例组件&#…