python机器学习之数据的预处理(五种方式数据处理案例详解)

2023-10-27

数据的预处理

数据下载地址——>点这里下载

到入文件时可以直接复制地址然后用r" "包裹起来。
例如:data = pd.read_cav(r"C:\work\data.csv")
或者也可以以直接将\换成//也可以导入。

1.归一化

在sklearn当中,我们使用preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler有一个重要参数,feature_range,控制我们希望把数据压缩到的范围,默认是[0,1]。
在这里插入图片描述

导入库和数据

from sklearn.preprocessing import MinMaxScaler
data = [[-1,2],[-0.5,6],[0,10],[1,18]]
import pandas as pd
pd.DataFrame(data)

在这里插入图片描述
进行归一化处理

scaler = MinMaxScaler()#实例化
scaler = scaler.fit(data)#fit.在这里是生成min(x)和max(x)
result = scaler.transform(data)#通过接口 导出结果
result

在这里插入图片描述
也可以一步达成训练和导出结果

result_ =scaler.transform(data)#训练和导出结果一步达成
result_x

在这里插入图片描述
将归一化的数据逆转为原数据

scaler.inverse_transform(result)#将归一化后的结果逆转

在这里插入图片描述
将范围设置为[0,5]

data = [[-1,2],[-0.5,6],[0,10],[1,18]]
scaler = MinMaxScaler(feature_range=[5,10])#实例化带范围5-10
result = scaler.fit_transform(data)#一步导出结果
result

在这里插入图片描述
当数据量多于大时,使用:

# scaler = scaler.partial_fit(data)  #大数据使用

使用numpy处理数据归一化

import numpy as np
X= np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]])
#归一化
X_nor= (X -  X.min(axis=0)) /(X.max(axis=0) - X.min(axis=0))
X_nor

在这里插入图片描述
逆转归一化:

#逆转归一化
X_returned= X_nor *(X.max(axis=0) - X.min(axis=0)) + X.min(axis=0)
X_returned

在这里插入图片描述

2.标准化

当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布),而这个过程,就叫做数据标准化(Standardization,又称Z-score normalization)在这里插入图片描述
导入库和定义数据

from sklearn.preprocessing import StandardScaler
data = [[-1,2],[-0.5,6],[0,10],[1,18]]

进行数据标准化

scaler = StandardScaler()#实例化
scaler.fit(data) #fit,本质是生成均值和方差
scaler.mean_#查看均值的属性
scaler.var_#查看方差的属性
x_std = scaler.transform(data)#通过接口导出结果
x_std

在这里插入图片描述
查看均值和方差

x_std.mean()#导出的结果是一个数组,用mean()查看均值
x_std.std()#查看方差

一步实现标准化

scaler = StandardScaler()#实例化
scaler.fit_transform(data)#一步达成结果

在这里插入图片描述
逆转标准化

scaler.inverse_transform(x_std)#逆转标准化

在这里插入图片描述

标准化与归一化比较

大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏感。在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中StandardScaler往往是最好的选择。

MinMaxScaler在不涉及距离度量、梯度、协方差计算以及数据需要被压缩到特定区间时使用广泛,比如数字图像处理中量化像素强度时,都会使用MinMaxScaler将数据压缩于[0,1]区间之中。

建议先试试看StandardScaler,效果不好换MinMaxScaler。
在这里插入图片描述

3.缺失值填充

机器学习和数据挖掘中所使用的数据,永远不可能是完美的。很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因此,数据预处理中非常重要的一项就是处理缺失值。

导入数据

import pandas as pd
data = pd.read_csv("../数据/Narrativedata.csv",index_col=0)
#将第0列作为索引index_col=0
data.head()#查看数据前五行

在这里插入图片描述
查看数据情况:

data.info()

在这里插入图片描述
发现Age列右200多缺失值,Embarked列有两个缺失值。

填补age列

将数据装成二维

Age = data.loc[:,"Age"].values.reshape(-1,1)#sklearn种特征矩阵必须是二维
Age.shape#查看维度
Age[:20]#查看前二十行

在这里插入图片描述
使用,均值、中位数、0对数据进行填充
实例化

from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer()#实例化。默认均值填补
imp_median = SimpleImputer(strategy="median")#用中位数填补
imp_0 = SimpleImputer(strategy="constant",fill_value=0)#用0填补

得到结果

imp_mean =imp_mean.fit_transform(Age)#使用ift_trankform一步完成调取结果
imp_median = imp_median.fit_transform(Age)
imp_0 = imp_0.fit_transform(Age)

查看填充好的数据:

imp_mean[1:20,:]#查看用均值填充的前二十行
imp_0[1:20,:]#查看用0填充的前二十行
imp_median[1:20,:]#查看用中位数填充的前二十行

在这里插入图片描述
在这里使用中位数对原数据进行填充

data.loc[:,"Age"] = imp_median  #用中位数对元数据填充
data.info()#查看数据情况

在这里插入图片描述
对Embarked列进行众数填充

Embarked = data.loc[:,"Embarked"].values.reshape(-1,1)#转换成二维
imp_mode = SimpleImputer(strategy="most_frequent")#使用众数实例化
data.loc[:,"Embarked"] = imp_mode.fit_transform(Embarked)#进行填补并赋值给元数据
data.info()#查看原数据

在这里插入图片描述
用Pandas和Numpy进行填补,效果也是一样的

导入数据:

import pandas as pd
data1 = pd.read_csv("../数据/Narrativedata.csv",index_col=0)

data1.head()

填补:


data1.loc[:,"Age"] = data1.loc[:,"Age"].fillna(data1.loc[:,"Age"].median())
#.fillna 在DataFrame里面直接进行填补

删除:

data1.dropna(axis=0,inplace=True)
#.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列
#参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False

在这里插入图片描述

4.处理分类型特征:编码与哑变量

在机器学习中,大多数算法,譬如逻辑回归,支持向量机SVM,k近邻算法等都只能够处理数值型数据,不能处理文字,在sklearn当中,除了专用来处理文字的算法,其他算法在fit的时候全部要求输入数组或矩阵,也不能够导入文字型数据(其实手写决策树和普斯贝叶斯可以处理文字,但sklearn中规定必须导入数值型)。然而在现实中,许多标签和特征在数据收集完毕的时候,都不是以数字来表现的。比如说,学历的取值可以是[“小学”,“初中”,“高中”,“大学”],付费方式可能包含[“支付宝”,“现金”,“微信”]等等。在这种情况下,为了让数据适应算法和库,我们必须将数据进行编码,即是说,将文字型数据转换为数值型。

标签专用,能够将分类转换为分类数值

导入库

from sklearn.preprocessing import LabelEncoder

导入数据

import pandas as pd
data2 = pd.read_csv("../数据/Narrativedata.csv",index_col=0)

data2.head()

在这里插入图片描述
提取数据,实例化

y = data2.iloc[:,-1]  #要输入的是标签,不是特征矩阵,所以允许一维
le = LabelEncoder()  #实例化
le = le.fit(y)#导入数据
label = le.transform(y)#接口调取结果
le.classes_  #查看标签种到底有多少类别
label

在这里插入图片描述
已经将[‘No’, ‘Unknown’, ‘Yes’]转换成了0,1,2.

也可以一步到位:

le.fit_transform(y)  #也可以直接一步到位

逆转为原数据

le.inverse_transform(label)#逆转

在这里插入图片描述
将运行结果赋值到原数据

data2.iloc[:,-1] = label  #让标签等于运行的结果
data2.head()

在这里插入图片描述
简单,快捷的方式:运行分类转换:

#下面这两行代码即可实现,分类转换
from sklearn.preprocessing import LabelEncoder
data2.iloc[:,-1] = LabelEncoder().fit_transform(data.iloc[:,-1])

特征专用,能够将分类特征转换为分类数值

导入库

from sklearn.preprocessing import OrdinalEncoder

获取数据

data3 = data.copy()#复制一份数据
data3.head()

在这里插入图片描述
查看列种包含的名称

OrdinalEncoder().fit(data3.iloc[:,1:-1]).categories_#查看中间列的名称,和classes_,功能一样

在这里插入图片描述
实例化,对数据直接进行转换

data3.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data3.iloc[:,1:-1])
data3.head()

在这里插入图片描述
发现已经将”Sex“,” Embarked“两个列种的[‘female’, ‘male’]和[‘C’, ‘Q’, ‘S’]转换成了0,1和0,1,2

独热编码,创建哑变量

类别OrdinalEncoder可以用来处理有序变量,但对于名义变量,我们只有使用哑变量的方式来处理,才能够尽量
向算法传达最准确的信息:
在这里插入图片描述
这样的变化,让算法能够彻底领悟,原来三个取值是没有可计算性质的,是“有你就没有我”的不等概念。在我们的
数据中,性别和舱门,都是这样的名义变量。因此我们需要使用独热编码,将两个特征都转换为哑变量。

导入库和数据提取

from sklearn.preprocessing import OneHotEncoder
x = data.iloc[:,1:-1]

实例化后转换数据,数组展示

OneHotEncoder(categories="auto").fit_transform(x).toarray()#装换成数组,可以显示结果

在这里插入图片描述
逆转数据

pd.DataFrame(enc.inverse_transform(result))#还原回原数据

在这里插入图片描述
查看返回 的稀疏矩阵名称

enc.get_feature_names()#返回稀疏矩阵名称,便于判别

在这里插入图片描述

合并数据

newdata = pd.concat([data,pd.DataFrame(result)],axis=1)#合并数据

newdata.head()

在这里插入图片描述
删除[“Sex”,“Embarked”]列,改变列名称

newdata.drop(["Sex","Embarked"],axis=1,inplace=True)#删除这两列
newdata.columns = ["Age","Survived",'x0_female','x0_male','x1_C','x1_Q','x1_S']#改变列名称
newdata.head()

在这里插入图片描述
相关引用库:

在这里插入图片描述

5.处理连续型特征:二值化与分段

二值化

根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量。大于阈值的值映射为1,而小于或等于阈值的值映射为0。默认阈值为0时,特征中所有的正值都映射到1。二值化是对文本计数数据的常见操作,分析人员可以决定仅考虑某种现象的存在与否。它还可以用作考虑布尔随机变量的估计器的预处理步骤(例如,使用贝叶斯设置中的伯努利分布建模)。

将年龄二值化

获取数据

data4 = data.copy()

导入库

from sklearn.preprocessing import Binarizer

将年龄为30以下的化为0,30以上的化为1

x = data4.iloc[:,0].values.reshape(-1,1) #类为特征专用,所以不能使用一维数组
transformer = Binarizer(threshold=30).fit_transform(x)#将30以上的化为1,30以下的化为0
transformer

在这里插入图片描述
保存数据

data4.iloc[:,0] = transformer#将数据保存的原数据种
data4.head()

在这里插入图片描述

分箱

preprocessing.KBinsDiscretizer这是将连续型变量划分为分类变量的类,能够将连续型变量排序后按顺序分箱后编码。总共包含三个重要参数:
在这里插入图片描述
导入库,数据

from sklearn.preprocessing import KBinsDiscretizer
x = data.iloc[:,0].values.reshape(-1,1)

采用ordinal方式编码

est = KBinsDiscretizer(n_bins=3,encode="ordinal",strategy="uniform")
est.fit_transform(x)  

查看转换后分的箱

set(est.fit_transform(x).ravel())   #查看转换后分的箱:变成了一列种的三箱   #ravel()降维函数

在这里插入图片描述

采用onehot方式编码分箱

est = KBinsDiscretizer(n_bins=3,encode = "onehot",strategy="uniform")
est.fit_transform(x).toarray()  #查看转换后分的箱,变成了哑变量

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python机器学习之数据的预处理(五种方式数据处理案例详解) 的相关文章

  • ResultSet 对象没有属性“find_all”

    当我抓取一个网页时 我总是遇到一个问题 AttributeError ResultSet 对象没有属性 find 您可能将项目列表视为单个项目 当您打算调用 find 时 您是否调用了 find all 谁能告诉我如何解决这个问题 我的代码
  • 当鼠标悬停时使用 matplotlib 注释绘图的线条[重复]

    这个问题在这里已经有答案了 我想在鼠标悬停时在绘图上注释不同的线 这里用点进行相同的操作当鼠标悬停在 matplotlib 中的某个点上时可以显示标签吗 https stackoverflow com questions 7908636 p
  • Python XLWT调整列宽

    XLWT 的易用性给我留下了深刻的印象 但有一件事我还没有弄清楚该怎么做 我正在尝试将某些行调整为显示所有字符所需的最小宽度 换句话说 如果双击单元格之间的分隔线 excel 会做什么 我知道如何将列宽调整为预定量 但我不确定如何确定显示所
  • 来自 yahoo 的 python lxml etree 小程序信息

    雅虎财经更新了他们的网站 我有一个 lxml etree 脚本 用于提取分析师建议 然而现在 分析师的建议已经存在 但只是以图表的形式出现 你可以看到一个例子这一页 https finance yahoo com quote CSX ana
  • 如何在不使用pygame的情况下检测按键事件和按键按住事件

    我目前正在寻找一个能够检测 监视键盘的库 我的目的是检测何时按下某个键 以及当它发生时应该发生一些事情 大多数 SO 帖子建议使用 pygame 但我发现它有点太多了 涉及一个像这样的库来完成这个简单的任务 我也尝试过pynput 这导致只
  • 在Python中绘制像素的最佳方法[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想知道 用 x 和 y 值在 python 中绘制像素的最简单方法是什么 可能最简单的方法是使用PIL http effbot org i
  • 如何有效地找到两个轮廓集之间的所有交点

    我想知道找到两组轮廓线之间所有交点 舍入误差 的最佳方法 哪种方法最好 这是示例 import matplotlib pyplot as plt import numpy as np x np linspace 1 1 500 X Y np
  • 如何使用 BeautifulSoup 排除表中的某些行?

    我已经从表格中获得了所需的数据 但不想要各个玩家统计数据之间的缩写 Rk Pos Name 等 如何在保留所需数据的同时排除这些数据 包含缩写的行被归类为 thead 但我不知道如何使用该信息来跳过它 我知道玩家的数据都被压缩在一起 但现在
  • tkinter - 在askopenfile期间检索文件名

    我有一个用 Python 和 tkinter 制作的文本编辑器 这是我的 打开文件 方法 def onOpen self file askopenfile filetypes Text files txt txt file read sel
  • 从 paramiko 获取 PID

    我找不到一个简单的答案 我正在使用 paramiko 远程登录并执行多个进程 我需要每个进程的 PID 以便稍后检查它们 paramiko 中似乎没有函数来获取执行命令的 PID 所以我尝试使用以下命令 stdin stdout stder
  • 我可以使用对象(类的实例)作为 Python 中的字典键吗?

    我想使用类实例作为字典键 例如 classinstance class dictionary classinstance hello world Python似乎无法将类作为字典键处理 还是我错了 另外 我可以使用像 classinstan
  • python中matlab find函数的替换

    我正在尝试寻找合适的python函数来替代matlabfind在我的脚本和一些谷歌搜索中我看到np where 大多数时候都能解决目的 但在双重条件的情况下 我有不同的输出 有人可以告诉我这种方法有什么问题以及如何继续吗 示例代码和差异如下
  • 如何在Python中生成0-1矩阵的所有可能组合?

    如何生成大小为 K N 的 0 1 矩阵的所有可能组合 例如 如果我取 K 2 和 N 2 我会得到以下组合 combination 1 0 0 0 0 combination 2 1 0 0 0 combination 3 0 1 0 0
  • 由 asyncio.new_event_loop 创建的事件循环挂起

    以下代码只是挂起而不打印任何内容 import asyncio async def foo loop print foo loop stop loop asyncio new event loop asyncio ensure future
  • Python Selenium 将内容添加到 pandas 数据帧

    我正在尝试循环list用于抓取内容的邮政编码this url http kadastralekaart com 但我面临着错误 例如TimeoutException and StaleElementReferenceException 我该
  • PySpark:根据与另一列中的字符串匹配的字典值创建新列

    我有一个数据框 A 如下所示 ID SOME CODE TITLE 1 024df3 Large garden in New York New York 2 0ffw34 Small house in dark Detroit Michig
  • Python 中 Javascript 的 reduce()、map() 和 filter() 的等价物是什么?

    Python 的等价物是什么 Javascript function wordParts currentPart lastPart return currentPart lastPart word Che mis try console l
  • 是否可以通过 Python 使用 Cocoa API?

    我想知道是否可以将 Cocoa Apple 的 API 与 Python 一起使用 以便能够运行像这样的任何代码link https developer apple com documentation appkit nsworkspace
  • Django 和 REST API 服务基于计算的请求

    我在 Django 中编写了一个机器学习应用程序 以便用户可以在表单中指定一些参数并训练模型 模型训练完成后 我想满足以下请求 curl http localhost 8000 model input XYZ 我希望 Django 返回给定
  • Doctest 返回失败,但“预期”和“得到”完美匹配

    我正在尝试做列表部分的第二个练习 http www openbookproject net thinkcs python english2e ch09 html exercises 如何像计算机科学家一样思考 一书的内容 我基本上必须将给定

随机推荐

  • NFS Provisioner

    一个自动配置卷的程序 它使用现有的和已配置的nfs服务器支持通过持久卷动态配置kubernetes持久卷 持久卷被配置为 namespace namespace namespace pvcName pvName 注意使用这个组件必须要提前配
  • 服务架构基本概念

    单体 所有业务都集中在一个项目中开发一个服务然后打一个包部署 分布式 分布式是指将不同的业务分布在不同的地方 集群指的是将几台服务器集中在一起 实现同一业务 分布式的每一个节点 都可以做集群 而集群并不一定就是分布式的 把单体系统拆分多个子
  • nginx配置指南

    nginx conf配置 找到Nginx的安装目录下的nginx conf文件 该文件负责Nginx的基础功能配置 配置文件概述 Nginx的主配置文件 conf nginx conf 按以下结构组织 配置块 功能描述 全局块 与Nginx
  • 微服务学习资料(持续更新)

    文章目录 微服务学习资料 持续更新 微服务介绍 微服务架构模式 从单体架构到微服务架构 绞杀者模式 微服务API设计 微服务安全 认证与鉴权 微服务数据架构 微服务事务管理 CAP理论 分布式事务 Saga模式 服务网格 服务版本管理 架构
  • Tensorflow导入报"Failed to load the native TensorFlow runtime."解决方案

    问题描述 在ubuntu服务器端测试import tensorflow 导入正常 但是使用pycharm远程访问连接使用pycharm时 出现tensorflow环境出现问题 为什么 这和之前在服务器安装过程中导入pycharm出错的原因一
  • 【自监督学习】 MAE阅读笔记

    1 MAE Masked Autoencoders Are Scalable Vision Learners bert ViT MAE的主要目的是进行迁移学习的预训练 1 Abstract 随即盖住一些图片中的块 patches 并重建被盖
  • 解析创客教育活动所需的空间实践场

    创客教育不同于创客活动 如果只是以活动或竞赛的形式在学校里分发 那只是一种创客活动 并没有真正融入教育 在发展过程中 会出现过度的偏执和做事 或者过度的偏执学习 如何找到平衡是学校教育者的重要一环 创客教育 培养学生创新所需要的知识 能力和
  • 聊一聊Linux下进程隐藏的常见手法及侦测手段

    0x00 前言 进程隐藏是恶意软件隐藏自身痕迹逃避系统管理人员发现的常用伎俩之一 当然 安全防护人员有时候也会使用到 比如隐藏蜜罐中的监控进程而不被入侵者觉察等 笔者也曾在多次安全应急响应经历中遇到过多各式各样的进程隐藏伎俩 了解进程隐藏的
  • 【问题解决】Centos7 yum命令异常报错Could not retrieve mirrorlist http://mirrorlist.centos.org

    问题出现 在把虚拟机的ip改为静态ip之后 yum install就会出现这样子的问题 root etcd yum install y wget 已加载插件 fastestmirror Determining fastest mirrors
  • 01rapidJson学习之rapidJson的初始化

    01rapidJson学习之rapidJson的初始化 1 rapidJson的初始化 由于我们经常通过初始化添加值到string字符串中 所以这里封装成一个简单函数 rapidJson有3种初始化方式 1 改造初始化 2 set方法初始化
  • unity安卓so包与其他第三方so包冲突问题 Unable to find main / No implementation found for

    最近公司项目需要 在安卓端使用了视频直播的第三方包和unity的第三方包 问题来了 引用了视频直播的包之后 unity的嵌入程序启动会报错 Process e unitry3d PID 30302 java lang Unsatisfied
  • Linux用户与群组管理

    用户账户与群组概念 Linux操作系统是多用户多任务的操作系统 系统依据账户来区分属于每个用户的文件 进程 任务 并给每个用户提供特定的工作环境 例如 用户的工作目录 shell版本以及图形化的环境配置等 Linux系统下的用户分为三种 1
  • Centos7 离线安装kafka

    Centos7 离线安装kafka 1 准备 1 提前下载kafka与jdk rpm包 2 开始 1 将rpm包导入到服务器 2 执行 rpm ivh kafka 1 1 1 20200608 x86 64 rpm 下载 https dow
  • 华为OD机试-喊7游戏

    题目描述 喊7 是一个传统的聚会游戏 N个人围成一圈 按顺时针从1 7编号 编号为1的人从1开始喊数 下一个人喊得数字是上一个人喊得数字 1 但是当将要喊出数字7的倍数或者含有7的话 不能喊出 而是要喊过 假定N个人都没有失误 当喊道数字k
  • IDEA 编译时 报 “常量字符串过长” 解决办法

    在编译项目时 出现错误为 常量字符串过长 java constant string too long 解决 File gt gt Settings gt gt Build Execution Deployment gt gt Compile
  • @font-face 加载字体引用字体之后不起作用

    如题 最近在学习css的时候遇到如下情况 使用 font face加载多种字体不起作用 反思 是我搞错了 字体加载可能就是要一条一条的写 文件结构目录 代码如下
  • Android 报错:Call requires API level 26/设置SDK最小的版本

    报错如下图所示 我尝试了升级Android Studio 到新版本 报错仍然存在 原因是某些控件仅仅支持一些较高SDK的版本 所以修改模块的gradle文件的SDK的最小版本 改完之后报错消失 备注 SDK Software Develop
  • in和=无法查出为NULL的值

    select from base persons x where x pname in null select from base persons x where x pname null 以上两句查询结果为空 虽然表里有相应的值 Id N
  • PAT 1152 Google Recruitment

    原题链接 1152 Google Recruitment 20分 题意 从任一给定的长度为 L 的数字中 找出最早出现的 K 位连续数字所组成的素数 关键词 字符串 判断质数 输入格式 输入在第一行给出 2 个正整数 分别是 L 和 K 接
  • python机器学习之数据的预处理(五种方式数据处理案例详解)

    数据的预处理 数据下载地址 gt 点这里下载 到入文件时可以直接复制地址然后用r 包裹起来 例如 data pd read cav r C work data csv 或者也可以以直接将 换成 也可以导入 1 归一化 在sklearn当中