机器学习05-数据准备(利用 scikit-learn基于Pima Indian数据集作数据预处理)

机器学习的数据准备是指在将数据用于机器学习算法之前,对原始数据进行预处理、清洗和转换的过程。数据准备是机器学习中非常重要的一步,它直接影响了模型的性能和预测结果的准确性

以下是机器学习数据准备的一些常见步骤:

数据收集:首先需要收集原始数据,可以是从数据库、文件、传感器等多种来源获取数据。数据的来源和质量直接影响了后续数据准备的难度和效果。

1. 数据清洗:数据清洗是指处理数据中的缺失值、异常值和重复值。缺失值是指数据中缺少某些属性值的情况,异常值是指与其他数据明显不同的值,而重复值是指数据中出现了重复的记录。清洗数据可以提高模型的鲁棒性和准确性。

2.特征选择:特征选择是从原始数据中选择最相关、最有用的特征作为模型的输入。选择合适的特征可以降低模型的复杂性,提高模型的泛化能力,并减少训练时间。

3.特征转换:特征转换是指对原始数据进行转换或缩放,以便更好地适应机器学习模型。例如,将类别型数据转换成数值型数据,对数值型数据进行标准化或归一化等操作。

4.数据划分:将数据集划分为训练集、验证集和测试集。训练集用于训练模型,验证集用于调整模型的超参数和验证模型的性能,测试集用于评估模型的泛化能力。

5.数据增强:对于数据量较少的情况,可以使用数据增强技术生成新的样本,以增加数据的多样性和数量,从而改善模型的泛化能力。

6.处理类别不平衡:在二分类或多分类问题中,数据中某些类别可能数量较少,导致类别不平衡。可以使用欠采样、过采样或集成学习等方法来处理类别不平衡问题。

7.数据编码:将类别型数据进行编码,例如使用独热编码(One-Hot Encoding)将类别转换成二进制向量。

8.数据标准化:对数值型数据进行标准化或归一化,使得不同特征具有相同的尺度,避免模型受到数据范围的影响。

以上步骤是机器学习数据准备的一部分,具体的数据准备步骤会因任务类型、数据类型和模型选择等因素而有所不同。数据准备是机器学习流程中的重要环节,它需要仔细考虑和实施,以保证数据的质量和模型的性能。

数据预处理

数据预处理需要根据数据本身的特性进行,有不同的格式和不同的要求,有缺失值的要填,有无效数据的要剔,有冗余维的要选,这些步骤都和数据本身的特性紧密相关。

数据预处理大致分为三个步骤:数据的准备、数据的转换、数据的输出。

为什么需要数据预处理?

数据处理是系统工程的基本环节,也是提高算法准确度的有效手段。
因此,为了提高算法模型的准确度,在机器学习中也要根据算法的特征和数据的特征对数据进行转换。

也就是说在开始机器学习的模型训练之前,需要对数据进行预处理,这是一个必需的过程。但是需要注意的是,不同的算法对数据有不同的假定,需要按照不同的方式转换数据。当然,如果按照算法的规则来准备数据,算法就可以产生一个准确度比较高的模型。

我们主要讲 利用scikitlearn 来转换数据,以便我们将处理后的数据应用到算法中,这样也可以提高算法模型的准确度。

什么是scikitlearn ?

scikit-learn(简称为sklearn)是一个流行的用于机器学习和数据挖掘的Python库。它提供了丰富的工具,用于构建和应用各种机器学习算法,并支持数据预处理、特征工程、模型评估等功能。scikit-learn
是开源的,易于使用,广泛应用于数据科学和机器学习领域。

scikit-learn 的主要特点包括:

简单易用:scikit-learn 提供了一致且易于使用的API,使得构建和应用机器学习模型变得非常简单。

大量算法:scikit-learn 支持众多的经典和先进的机器学习算法,包括回归、分类、聚类、降维等。它还提供了许多特征选择和特征转换的工具。

数据预处理:scikit-learn 提供了丰富的数据预处理功能,包括缺失值处理、数据标准化、数据归一化、数据编码等。

模型评估:scikit-learn 提供了评估机器学习模型性能的工具,包括交叉验证、网格搜索、学习曲线等。

整合性:scikit-learn 可以与其他Python库(如NumPy、Pandas)无缝整合,方便数据处理和模型应用。

文档齐全:scikit-learn 的官方文档非常详细,提供了丰富的示例和用法说明。

使用 scikit-learn 进行机器学习的一般流程包括数据准备、模型选择、模型训练、模型评估和预测。

接下来将介绍以下几种数据转换方法:
· 调整数据尺度(Rescale Data)。
· 正态化数据(Standardize Data)。
· 标准化数据(Normalize Data)。
· 二值数据(Binarize Data)。

四种不同的方法来格式化数据依然使用Pima Indian的数据
集作为例子。这四种方法都会按照统一的流程来处理数据:
· 导入数据。
· 按照算法的输入和输出整理数据。
· 格式化输入数据。
· 总结显示数据的变化。

scikit-learn 提供了两种标准的格式化数据的方法,每一种方法都有适
用的算法。利用这两种方法整理的数据,可以直接用来训练算法模型。在
scikit-learn 的说明文档中,也有对这两种方法的详细说明:

· 适合和多重变换(Fit and Multiple Transform)。
· 适合和变换组合(Combined Fit-and-Transform)。

推荐优先选择适合和多重变换(Fit and Multiple Transform)方法。

首先调用fit()函数来准备数据转换的参数,然后调用 transform()函数来做数据的预处理。适合和变换组合(Combined Fit-and-Transform)对绘图或汇总处理具有非常好的效果。
详细的数据预处理方法可以参考scikit-learn的API文档。

调整数据尺度

如果数据的各个属性按照不同的方式度量数据,那么通过调整数据的尺度让所有的属性按照相同的尺度来度量数据,就会给机器学习的算法模型训练带来极大的方便。

这个方法通常会将数据的所有属性标准化,并将数据转换成0和1之间的值,这对于梯度下降等算法是非常有用的,对于回归算法、神经网络算法和K近邻算法的准确度提高也起到很重要的作用。

在 scikit-learn 中,调整数据的尺度是数据预处理的重要步骤之一,它可以确保不同特征具有相同的尺度,避免模型受到数据范围的影响。通常有两种常见的尺度调整方法:

标准化(Standardization)和归一化(Normalization)

标准化(Standardization):

标准化是一种将特征数据转换为均值为0,标准差为1的过程。标准化后的数据符合标准正态分布,这对于一些模型(如线性回归、逻辑回归、支持向量机等)的训练过程有着较好的效果。在
scikit-learn 中,你可以使用 StandardScaler 来进行标准化。

示例:

import numpy as np
from sklearn.preprocessing import StandardScaler# 创建一个特征矩阵
X = np.array([[1, 2], [3, 4], [5, 6]])# 创建 StandardScaler 对象
scaler = StandardScaler()# 调整数据尺度(标准化)
X_scaled = scaler.fit_transform(X)
# 显示特征矩阵
print("X_scaled=\n", X_scaled)

运行结果:

X_scaled=[[-1.22474487 -1.22474487][ 0.          0.        ][ 1.22474487  1.22474487]]

归一化(Normalization):

归一化是一种将特征数据缩放到一个指定的范围(通常是[0,
1])的过程。归一化后的数据在原始数据的分布上保持了相对的比例关系,适用于需要将特征放在同一量纲的算法(如KNN、神经网络等)。在
scikit-learn 中,你可以使用 MinMaxScaler 来进行归一化。

示例:

import numpy as np
from sklearn.preprocessing import MinMaxScaler# 创建一个特征矩阵
X = np.array([[1, 2], [3, 4], [5, 6]])# 创建 MinMaxScaler 对象
scaler = MinMaxScaler()# 调整数据尺度(归一化)
X_scaled = scaler.fit_transform(X)print(X_scaled)

运行结果:

[[0.  0. ][0.5 0.5][1.  1. ]]

这里的 fit_transform() 方法将用于对特征矩阵 X 进行尺度调整。首先,fit() 方法会计算每个特征的均值和标准差(对于标准化)或最大值和最小值(对于归一化)。然后,transform() 方法会根据计算得到的参数对特征矩阵 X 进行尺度调整。如果有测试集需要调整尺度,应该使用 fit() 方法计算训练集的参数,然后使用 transform() 方法分别对训练集和测试集进行尺度调整,确保使用相同的参数进行尺度调整,以避免信息泄漏。

实验:下面用Pima Indian 数据集将不同计量单位的数据统一成相同的尺度。

代码如下:

import pandas as pd
from matplotlib import pyplot as plt
from numpy import set_printoptions
from sklearn.preprocessing import MinMaxScaler#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)
#将数据转成数组
array = data.values
#分割数据
X = array[:, 0:8]#创建MinMaxScaler对象
trans = MinMaxScaler(feature_range=(0, 1))
#数据归一化
newX = trans.fit_transform(X)
#设置数据打印格式
set_printoptions(precision=3)print(newX)

运行结果:

[[0.353 0.744 0.59  ... 0.501 0.234 0.483][0.059 0.427 0.541 ... 0.396 0.117 0.167][0.471 0.92  0.525 ... 0.347 0.254 0.183]...[0.294 0.608 0.59  ... 0.39  0.071 0.15 ][0.059 0.633 0.492 ... 0.449 0.116 0.433][0.059 0.467 0.574 ... 0.453 0.101 0.033]]

正态化数据 -StandardScaler()

在机器学习中,将数据正态化是指将数据转换成符合正态分布(或高斯分布)的过程。正态化数据是一种常见的数据预处理步骤,它可以使得数据具有零均值和单位方差,有助于提高一些模型的性能,特别是需要数据满足正态分布假设的模型。

在 scikit-learn 中,你可以使用 StandardScaler来对数据进行正态化,这会将数据转换成均值为0,标准差为1的正态分布。

import pandas as pd
from numpy import set_printoptions
from sklearn.preprocessing import StandardScaler#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)
#将数据转成数组
array = data.values
#分割数据
X = array[:, 0:8]#创建StandardScaler对象
trans = StandardScaler().fit(X)
#数据归一化
newX = trans.transform(X)
#设置数据打印格式
set_printoptions(precision=3)print(newX)

运行结果:

[[ 0.64   0.848  0.15  ...  0.204  0.468  1.426][-0.845 -1.123 -0.161 ... -0.684 -0.365 -0.191][ 1.234  1.944 -0.264 ... -1.103  0.604 -0.106]...[ 0.343  0.003  0.15  ... -0.735 -0.685 -0.276][-0.845  0.16  -0.471 ... -0.24  -0.371  1.171][-0.845 -0.873  0.046 ... -0.202 -0.474 -0.871]]

标准化数据

标准化数据(Normalize Data)处理是将每一行的数据的距离处理成1(在线性代数中矢量距离为
1)的数据又叫作“归一元”处理,适合处理稀疏数据(具有很多为 0 的数据),归一元处理的数据对使用权重输入的神经网络和使用距离的 K近邻算法的准确度的提升有显著作用。

使用scikitlearn 中的 Normalizer 类实现。代码如下:

import pandas as pd
from numpy import set_printoptions
from sklearn.preprocessing import  Normalizer#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)
#将数据转成数组
array = data.values
#分割数据
X = array[:, 0:8]#创建StandardScaler对象
trans = Normalizer().fit(X)
#数据归一化
newX = trans.transform(X)
#设置数据打印格式
set_printoptions(precision=3)print(newX)

运行结果:

[[0.034 0.828 0.403 ... 0.188 0.004 0.28 ][0.008 0.716 0.556 ... 0.224 0.003 0.261][0.04  0.924 0.323 ... 0.118 0.003 0.162]...[0.027 0.651 0.388 ... 0.141 0.001 0.161][0.007 0.838 0.399 ... 0.2   0.002 0.313][0.008 0.736 0.554 ... 0.241 0.002 0.182]]

二值数据

二值数据(Binarize Data)是使用值将数据转化为二值,大于阈值设置为1,小于阈值设置为0。这个过程被叫作二分数据或阈值转换。在生成明确值或特征工程增加属性的时候使用,使用scikit-learn中的Binarizer类实现。

代码如下:

import pandas as pd
from numpy import set_printoptions
from sklearn.preprocessing import Binarizer#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)
#将数据转成数组
array = data.values
#分割数据
X = array[:, 0:8]#创建StandardScaler对象
trans = Binarizer(threshold=0.0).fit(X)
#数据归一化
newX = trans.transform(X)
#设置数据打印格式
set_printoptions(precision=3)print(newX)

运行结果:

[[1. 1. 1. ... 1. 1. 1.][1. 1. 1. ... 1. 1. 1.][1. 1. 1. ... 1. 1. 1.]...[1. 1. 1. ... 1. 1. 1.][1. 1. 1. ... 1. 1. 1.][1. 1. 1. ... 1. 1. 1.]]

scikit-learn中对数据进行预处理的四种方法。这四种方法适用于不同的场景,可以在实践中根据不同的算法模型来选择不同的数据预处理方法.先看个大概,后续再度这些格式化数据做更深入的理解说明

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

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

相关文章

使用kubeadm快速部署一个k8s集群

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署(二)ETCD集群部署 Kubernetes高可用集群二进制部署(三)部署…

JVM之垃圾回收器

1.如何判断对象可以回收 1.1 引用计数法 什么是引用计数器法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 …

【C语言学习】整数范围、整数越界、无符号数

1.整数范围 对于一个字节(8位),可以表达的范围是00000000 ~ 11111111 其中00000000 ——> 0 11111111 ~ 10000000 ——> -1 ~ -128(从大到小) 00000001 ~ 01111111 ——> 1~127(从小到大&#xff…

Python需要学的基础有哪些

Python介绍 Python是一种广泛使用的高级编程语言,因其简洁易读的语法和强大的功能而备受欢迎。本文将介绍一些Python教学内容,帮助初学者快速入门编程世界 1. Python基础 Python的基础知识对于编程初学者至关重要。以下是一些重要的基础概念&#xff…

redis 持久化 与 键淘汰策略

redis运维核心: aof日志(全持久化 增量) 、 rdb(半持久化/全量备份) 、 键淘汰策略 、 高可用 1、Redis是基于内存的,一旦Redis重启/退出/故障,内存的数据将会全部丢失。故而有了持久化。 2、持久化:将内存中的数据存于磁盘中&am…

电脑第一次使用屏幕键盘

操作流程 1.在键盘上同时按WinR打开运行; 2.输入control 3.找到设置中心 4.点击屏幕键盘 效果 具体怎么使用 我不咋清除 简单 测试了一下 可以用鼠标点击屏幕键盘的按键 用键盘 按字母键和数字键 是和屏幕键盘不同步的 其他 tab、shift、后退、enter好像同步

stm32和python实现DMA+串口数据收发

STM32F103配置 1-0 串口配置 void uart_init(u32 bound){//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能USART1时钟RCC_AP…

ansible——playbook

playbook playbook是剧本的意思 通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。 playbook本身由以下各部分组成: Tasks: 任务,即调用模块完成的某操作 Variables: 变量 Templates: 模板 Handlers: 处理器,当某条件…

域名校验?反爬界的掩耳盗铃!

这一集我们讲一个比较简单的域名校验,可能你没有听过这个名字,因为这个名字是我编的,那么它究竟是什么呢?又为什么说它是掩耳盗铃呢?我们来看看下面的案例: 必应搜索页隐藏内容虎嗅新闻跳转404 import re…

《Kali渗透基础》13. 无线渗透(三)

kali渗透 1:无线通信过程1.1:Open 认证1.2:PSK 认证1.3:关联请求 2:加密2.1:Open 无加密网络2.2:WEP 加密系统2.3:WPA 安全系统2.3.1:WPA12.3.2:WPA2 3&#…

大数据课程D4——hadoop的YARN

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解YARN的概念和结构; ⚪ 掌握YARN的资源调度流程; ⚪ 了解Hadoop支持的资源调度器:FIFO、Capacity、Fair; ⚪ 掌握YARN的完全分布式结构和常见问题; ⚪ 掌握YARN的服役新节点操作…

Springboot 多数据源 dynamic-datasource动态添加移除数据源

0.前言 上一篇文章我们讲了如何通过多数据源组件,在Spring boot Druid 连接池项目中配置多数据源,并且通过DS注解的方式切换数据源,《Spring Boot 配置多数据源【最简单的方式】》。但是在多租户的业务场景中,我们通常需要手动的…

react-player静音不能自动播放问题

现象 移动端不能自动播放 原因 取决于您使用的浏览器,但muted如果您不想与autoplay用户交互,则必须使用视频。 Chrome 的自动播放策略很简单: 始终允许静音自动播放。在以下情况下允许自动播放声音: 用户与域进行了交互&#x…

RunnerGo条件控制器使用方法

在做性能测试时我们需要根据业务需求、业务场景来配置测试脚本,举个例子:在登录注册场景中,可能会有账号密码全部正确、账号格式错误、密码错误等多种情况,这里的“登录/注册”事件可以视为一个场景。一个真实业务中的场景&#x…

2023 年牛客多校第五场题解

A Jujubesister 题意&#xff1a;给定长度为 n n n 的数列 { a } i 1 n \{a\}_{i1}^n {a}i1n​&#xff0c; q q q 次询问区间 [ l , r ] [l,r] [l,r] 上满足 a i a k > a j a_ia_k>a_j ai​ak​>aj​ 且满足 l ≤ i < j < k ≤ r l \le i <j<k \…

课程作业-基于Python实现的迷宫搜索游戏附源码

简单介绍一下 该项目不过是一个平平无奇的小作业&#xff0c;基于python3.8开发&#xff0c;目前提供两种迷宫生成算法与三种迷宫求解算法&#xff0c;希望对大家的学习有所帮助。 项目如果有后续的跟进将会声明&#xff0c;目前就这样吧~ 效果图如下所示&#xff1a; 环境…

14 springboot项目——首页跳转实现

templates里的静态资源无法访问&#xff0c;需要写mvc的配置类或者改application.xml配置文件实现首页访问。这两个方式用其中一种即可&#xff0c;否则会冲突。 14.1 首页跳转方式一 创建配置类&#xff0c;在config包中创建一个mvc的配置类&#xff1a; package jiang.com.s…

设备管理系统与物联网的融合:实现智能化设备监控和维护

在数字化时代&#xff0c;设备管理系统和物联网技术的融合为工业企业带来了巨大的变革和创新。本文将探讨设备管理系统与物联网的融合&#xff0c;重点介绍设备健康管理平台在实现智能化设备监控和维护方面的关键作用和优势。 一、设备管理系统与物联网的融合 随着物联网技术的…

windows脚本获取管理员权限修改host

很多时候我们常常需要通过管理员权限执行脚本&#xff0c;脚本可能涉及到一些受保护信息的访问&#xff0c;我们写个简单的脚本来更改host文件&#xff0c;host文件就是需要管理员权限才能访问的启动脚本时先检查是否有管理员权限&#xff0c;如果没有就调用授权脚本进行管理员…

BPMNJS插件使用及汉化(Activiti绘制流程图插件)

BPMNJS插件运行最重要的就是需要安装nodejs插件,这不一定要安装和测试好。 主要是使用npm命令 1、配置BPMNJS插件绘制activiti7工作流 1.1、安装和配置nodejs 插件 1.1.1、下载nodejs 下载地址:https://nodejs.org/en 1.1.2、安装nodejs,傻瓜式安装 安装之后在安装…