【ML】数据预处理

2023-11-13

前言

对于数据的预处理,没有固定的步骤。
下文写的仅仅的常规的一些小步骤。
具体的预处理,还需要根据数据以及需求来自行处理。

====================================

Python

STEP1、导入依赖包

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

把np作为numpy的缩写,后面可以直接使用np来调用各种方法。

==>
numpy系统是python的一种开源的数值计算扩展。
这种工具可用来存储和处理大型矩阵,比python自身的嵌套列表结构要高效的多。
你可以理解为凡是和矩阵有关的都用numpy这个库。

==>
matplotlib.pyplot是用来做数据的展示。也就是数据的可视化。

==>
pandas该工具是为了解决数据分析任务而创建的。pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
pandas提供了大量能使我们快速便捷地处理数据的函数和方法。它是使python成为强大而高效的数据分析环境的重要因素之一。

========
选择好这三行代码,敲下shift+return组合键。

如果结果如下,说明库已经导入了。
我们的环境配置也完全没有问题。

如果环境的配置有问题,参考博客:
http://blog.csdn.net/wiki_su/article/details/78404808

STEP2、读取数据

原始数据在云盘,有需要的自行下载吧。
链接:http://pan.baidu.com/s/1eRHXACU
密码:4q8c

Spyder中,设置好文件路径。千万不要忘了。

输入下面的代码。然后选择这行代码,敲下shift+return组合键。

#import dataset
dataset = pd.read_csv('Data.csv')

我们在explorer中会看到我们命名的dataset

dataset

双击打开

根据上面的dataset的那个图我们可以看出,我们的目的是想要通过地区,年龄,薪资来看购买力。

那我们把country,age,salary作为X,purchased作为Y。
得到二者之间的关系,就得到了country,age,salary和purchased之间的某种关系。

#取出所有的行,(去掉最后一列 purchased)
X = dataset.iloc[:,:-1].values

取出结果
Y = dataset.iloc[:,3].values

运行结果如下:

然后我们双击打开X,会发现打不开。这个是因为数据类型的原因。

我们可以在代码中输入X,然后选中运行。

STEP3、遗失数据的处理

我们回过头在看上面的dataset的图。
我们会发现数据缺少几个。他用了nan来标记缺失的数据。

注意:
对于缺失的数据,我们大体上有3中处理方法:
1、通过数据中的最大值和最小值,我们把中间值赋值给缺失的数据;
2、通过所有数据的平均值来赋值给缺失的数据;
3、删除有空缺数据项;

择优排队的结果是:1 > 3 、 2 > 3
因为在大部分的时候,我们的数据会非常稀少。每一个数据都来之不易。我们不能轻易的删掉。

============

导入库。这个库就是专门做数据预处理的。

#预处理impoter
from sklearn.preprocessing import Imputer

#做遗失的部分的处理 用NaN的方式填补上来
#axis:传0或者。0代表处理列 ,1代表处理行。
#strategy的值有mean,median,most_frequent ,分别代表:平均数 中间值 最常出现的数值
imputer = Imputer(missing_values = 'NaN',strategy = 'mean', axis = 0)

#1-3行缺失的部分补上
imputer = imputer.fit(X[:,1:3])

#返回处理好的数据
X[:,1:3] = imputer.transform(X [:,1:3])

对于这个方法,我们不熟悉可以通过Help来查看。不过前提是
from sklearn.preprocessing import Imputer这行代码运行过。

然后我们运行下,会发现缺失的数据已经被我们填充好了。

STEP4、数据明确化

数据明确就是为了提高运行的速度和准确性。
当然我们不进行数据明确也可以…为了更好,还是加上这步吧。

我们看countrypurchased ,如果都变成用数字表示。那我们运行的效率就提升上去了。

热编码的优点:
1.能够处理非连续型数值特征。
2.在一定程度上也扩充了特征。

#数据明确
#提高运行的速度和准确性
#把数据明确化,变成数字
#OneHotEncoder 热编码
from sklearn.preprocessing import LabelEncoder,OneHotEncoder

#把城市数据进行数字明确化
labelencoder_X = LabelEncoder()
X[:,0] = labelencoder_X.fit_transform(X[:,0])

#热编码,拿出来做数组的编排
onehotencoder = OneHotEncoder()
X = onehotencoder.fit_transform(X).toarray()

#把结果数据进行城市化
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)

运行,然后我们看下结果:

STEP5、数据分割

数据分割。是把数据分为两组。一组A用来训练,一组B是用来测试。
然后通过测试数据的Y,用训练组的模型得到的Y值进行比较。

就是比较B.YResultA (B.X) 的值是否一样,如果一样或者差别不大,那么我们做出来的模型就是可靠的。

#数据分割
from sklearn.cross_validation import train_test_split

#0 取一次就好了,不要每次都取两组随机的数字
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2,random_state = 0)

我们就可以看到分割好的两组数据。
X_train、Y_train
X_test 、Y_test

STEP6、数据缩放

数据缩放把这些数据,规范在一个范围中。
如果不这么做的话,比如 0 ,0.001, 0.2, 99… 这类数据非常不易看。

from sklearn.preprocessing import StandardScaler

#缩放
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)
Y_train = sc_X.fit_transform(Y_train)
Y_test = sc_X.fit_transform(Y_test)

我们打开X_train,然后format调成小数一位。结果如下。

以上就是数据预处理的几步了。

END 完整代码

#数据预处理 data preprocessing

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

#import dataset
dataset = pd.read_csv('Data.csv')

#Matrix of feature
X = dataset.iloc[:,:-1].values
Y = dataset.iloc[:,3].values

#预处理impoter
from sklearn.preprocessing import Imputer

imputer = Imputer(missing_values = 'NaN',strategy = 'mean', axis = 0)
imputer = imputer.fit(X[:,1:3])
#返回处理好的数据
X[:,1:3] = imputer.transform(X [:,1:3])

#数据明确
from sklearn.preprocessing import LabelEncoder,OneHotEncoder

labelencoder_X = LabelEncoder()
X[:,0] = labelencoder_X.fit_transform(X[:,0])

onehotencoder = OneHotEncoder()
X = onehotencoder.fit_transform(X).toarray()

labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)

#数据分割
from sklearn.cross_validation import train_test_split

#0 取一次就好了,不要每次都取两组随机的数字
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2,random_state = 0)

#缩放X
from sklearn.preprocessing import StandardScaler

sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)
Y_train = sc_X.fit_transform(Y_train)
Y_test = sc_X.fit_transform(Y_test)

=========================

R

如果你跟着上文一步一步的来的话,对于R的使用, 就非常好理解了。
仅仅是写法不同,含义是一样的。

dataset = read.csv('Data.csv')

dataset$Age = ifelse(is.na(dataset$Age),
                     ave(dataset$Age,FUN = function(x) mean(x,na.rm = TRUE)),
                     dataset$Age)

dataset$Salary = ifelse(is.na(dataset$Salary),
                        ave(dataset$Salary,FUN = function(x) mean(x,na.rm = TRUE)),
                        dataset$Salary)

dataset$Country = factor(dataset$Country,levels = c('France','Spain','Germany'),
                         labels = c(1,2,3))


dataset$Purchased = factor(dataset$Purchased,levels = c('Yes','No'),
                           labels = c(0,1))

library(caTools)
##随机分割,随便传个数都oK
set.seed(123) 
split = sample.split(dataset$Purchased,SplitRatio = 0.8)
training_set = subset(dataset,split == TRUE)
test_set = subset(dataset,split == FALSE)

##处理ageSalary。也就是第2和第3行
training_set[,2:3] = scale(training_set[,2:3])
test_set[,2:3] = scale(test_set[,2:3])

结果如图下所示:

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

【ML】数据预处理 的相关文章

随机推荐

  • Micropython史上最友好的编辑器,小巧精悍

    Python 因为非常好学 易上手故而广受大众的喜欢 micropython 也因此在物联网单片机领域拥有一席之位 并且 python 有着良好的生态环境 功能亦更加丰富 from machine import Pin p0 Pin 0 P
  • 购物商城---SpringMVC拦截器的使用

    springmvc front xml
  • spring data jpa

    Spring Data是什么 Spring Data是一个用于简化数据库访问 并支持云服务的开源框架 其主要目标是使得对数据的访问变得方便快捷 并支持map reduce框架和云计算数据服务 Spring Data 包含多个子项目 Comm
  • 深度学习中矩阵求导公式整理

    深度学习中矩阵求导公式整理 1 两种布局约定方式 2 矩阵求导的类型 3 标量对标量求导 4 向量对标量求导 5 矩阵对标量求导 6 标量对向量求导 7 向量对向量求导 8 标量对矩阵求导 参考文献 1 两种布局约定方式 布局 Layout
  • 机试算法题-敲击计数器

    题目 设计一个敲击计数器 使它可以统计在过去 5 分钟内被敲击次数 即过去 300 秒 您的系统应该接受一个时间戳参数 timestamp 单位为 秒 并且您可以假定对系统的调用是按时间顺序进行的 即 timestamp 是单调递增的 几次
  • CVPR 2022

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 转载自 集智书童 On the Integration of Self Attention and Convolution 论文 https arxiv org abs
  • 回溯算法-----473. 火柴拼正方形&&698. 划分为k个相等的子集

    分享两个回溯算法解决的算法题 和自己以往做这类题目的思路不同 导致这里卡了很久 不得不花几个小时总结一下 火柴拼正方形 首先展示一下自己一开始的回溯算法的解决方式 其实这个也是自己进行了优化之后的 没有优化之前是超时的 public boo
  • 如何导出存储过程、函数、包和触发器的定义语句?如何导出表和索引的创建语句?...

    Oracle中如何导出存储过程 函数 包和触发器的定义语句 如何导出表的结构 如何导出索引的创建语句 QQ群里有人问 如何导出一个用户下的存储过程 麦苗答 方法有多种 可以使用DBMS METADATA GET DDL包 使用PL SQL
  • Java实现质数筛的三种方法

    今天在做一个算法题的时候遇到一个需要求质数的情况 但是本人比较菜只会暴力做法 所以在此记录学习一下质数筛选除了暴力以外的其它做法 注意 一个大于1的自然数 除了1和它自身外 不能被其他自然数整除的数叫做质数 题目 暴力做法 直接根据定义写一
  • docker stats 命令详解

    docker stats 显示容器资源的使用情况 包括 CPU 内存 网络 I O 等 docker stats OPTIONS CONTAINER OPTIONS 说明 all a 显示所有的容器 包括未运行的 format 指定返回值的
  • [NKCTF2023]web/misc/blockchain-wp

    总体体验还是不错的 感谢我的二进制队友带我 WEB babyphp Pop链 链子 destruct gt toString gt invoke 最后要绕一个正则匹配 通过dir命令发现flag在 f1ag中 利用剩下没被过滤的通配符进行匹
  • OpenWRT路由器中监控网络服务并重启的脚本

    转载地址 http jamesqi com E5 8D 9A E5 AE A2 OpenWRT E8 B7 AF E7 94 B1 E5 99 A8 E4 B8 AD E7 9B 91 E6 8E A7 E7 BD 91 E7 BB 9C
  • 删除链表中重复的节点(Java实现)

    问题描述 在一个排序的链表中 存在重复的结点 请删除该链表中重复的结点 重复的结点不保留 返回链表头指针 例如 链表1 gt 2 gt 3 gt 3 gt 4 gt 4 gt 5 处理后为 1 gt 2 gt 5 解决方案 注意边界即可 代
  • UE4_UATHelper: Packaging (Windows (64-bit)): ERROR: Failed to copy

    在项目中引用了开发的插件 插件中引用了第三方库 目录结构如下 报错信息如下 UATHelper Packaging Windows 64 bit ERROR Failed to copy E Project WorkSpace KafkaD
  • 知识图谱(Knowledge Graph)

    这篇文章的目的就是给不了解知识图谱的人做一个简单的科普 一 什么是知识图谱 知识图谱 Knowledge Graph 又称为科学知识图谱 在图书情报界称为知识域可视化或知识领域映射地图 是显示知识发展进程与结构关系的一系列各种不同的图形 用
  • Sqlilabs-19

    第 19 关跟第 18 关类似 User Agent 改成了 Referer 改造注入 Referer 浏览器向 WEB 服务器表明自己是从哪个网页 URL 获得 点击 当前请求中的网址 URL 同样的 这一关对 usernanme 和 p
  • 关闭占用某个端口的进程,例如8080

    问题 Web server failed to start Port 8080 was already in use 办法一 1 查看端口号的进程号 netstat ano findstr 端口号 2 任务管理器关闭 办法二 使用命令关闭
  • 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

    题目 定义栈的数据结构 请在该类型中实现一个能够得到栈中所含最小元素的min函数 时间复杂度应为O 1 分析 使用双栈实现 一个数据栈data 一个最小栈min 数据栈存正常入栈的元素 最小栈永远存数据栈中当前最小值 具体是依靠以下规则来实
  • 分布式一致性与共识算法简介

    在介绍Raft算法之前 请考虑一下如果有机会 你会怎么设计一个分布式系统 注意 这里所说的分布式系统是几台服务器组成的一个对外服务的系统 比如分布式KV系统 分布式数据库系统等 如果是单机系统 数据一般都在本地 基本不需要与外部通信 比如单
  • 【ML】数据预处理

    前言 对于数据的预处理 没有固定的步骤 下文写的仅仅的常规的一些小步骤 具体的预处理 还需要根据数据以及需求来自行处理 Python STEP1 导入依赖包 import numpy as np import matplotlib pypl