机器学习流程—数据预处理下篇

机器学习流程—数据预处理下篇

我们在机器学习项目开发过程中遇到的大多数现实数据集都具有混合数据类型的列。这些数据集由分类列和数字列组成。然而,各种机器学习模型不适用于分类数据,为了使这些数据适合机器学习模型,需要将其转换为数值数据。例如,假设数据集有一个Gender列,其中包含Male 和 Female等分类元素。这些标签没有特定的偏好顺序,而且由于数据是字符串标签,机器学习模型会误解其中存在某种层次结构。

解决此问题的一种方法是标签编码,我们将为这些标签分配一个数值,例如将MaleFemale映射到01。但这可能会在我们的模型中增加偏差,因为它将开始对女性参数给予更高的偏好,即 1>0,但理想情况下,两个标签在数据集中同样重要。为了解决这个问题,我们将使用 One Hot Encoding 技术。

One Hot Encoding

优点
它允许在需要数字输入的模型中使用分类变量。

它可以通过向模型提供有关分类变量的更多信息来提高模型性能。

它可以帮助避免序数问题,当分类变量具有自然排序(例如“小”、“中”、“大”)时可能会出现序数问题。

缺点

它可能会导致维度增加,因为为变量中的每个类别创建一个单独的列。这会使模型变得更加复杂并且训练速度变慢。
它可能会导致数据稀疏,因为大多数观测值在大多数 one-hot 编码列中的值为 0。

它可能会导致过度拟合,特别是当变量中有很多类别且样本量相对较小时。

One Hot Encoding 是一种处理分类数据的强大技术,但它可能导致维度增加、稀疏性和过度拟合。谨慎使用它并考虑其他方法(例如序数编码或二进制编码)非常重要。

示例

One Hot Encoding中,分类参数将男性和女性标签分别设置成单独的列。因此,只要有男性,男性列中的值为 1,女性列中的值为 0,反之亦然。让我们通过一个例子来理解:考虑给出水果及其相应的分类值和价格的数据。

水果水果的分类价值价格
苹果15
芒果210
苹果115
橙子320

对数据应用 one-hot 编码后的输出如下:

苹果芒果橙子价格
1005
01010
10015
00120

使用 Python 进行 One-Hot 编码

创建一个数据集以从 CSV 文件实现One-Hot编码。

# Program for demonstration of one hot encoding # import libraries 
import numpy as np 
import pandas as pd # import the data required 
data = pd.read_csv('employee_data.csv') 
print(data.head()) 

First five rows of Dataframe

分类列中的唯一值

我们可以使用[pandas库中的unique函数从数据帧的列中获取唯一元素。

print(data['Gender'].unique()) 
print(data['Remarks'].unique()) 

输出

array(['Male', 'Female'], dtype=object)
array(['Nice', 'Good', 'Great'], dtype=object)

列中元素的计数

data['Gender'].value_counts() 
data['Remarks'].value_counts() 

输出

Female    7
Male      5
Name: Gender, dtype: int64Nice     5
Great    4
Good     3
Name: Remarks, dtype: int64

使用pandas

使用pandas 的get_dummies 方法实现

one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) 
print(one_hot_encoded_data)

One-Hot encoded columns of the dataset

我们可以观察到数据中有3 个“Remarks”列2 个“Gender”列。

但是,如果有n 个唯一标签,则可以仅使用n-1列来定义参数。例如,如果我们只保留Gender_Female列并删除Gender_Male列,那么我们也可以传达整个信息,当标签为 1 时,表示女性,当标签为 0 时表示男性。这样我们就可以对分类数据进行编码并减少参数的数量。

使用 Sci-kit Learn

Scikit-learn(sklearn) 是 Python 中流行的机器学习库,提供了大量用于数据预处理的工具。它提供了一个OneHotEncoder函数,我们可以在实现该算法之前将分类变量和数值变量编码为二进制向量。确保必须对分类值进行标记和编码,因为 one-hot 编码仅采用数字分类值。

# importing libraries 
import pandas as pd 
import numpy as np 
from sklearn.preprocessing import OneHotEncoder # Retrieving data 
data = pd.read_csv('Employee_data.csv') # Converting type of columns to category 
data['Gender'] = data['Gender'].astype('category') 
data['Remarks'] = data['Remarks'].astype('category') # Assigning numerical values and storing it in another columns 
data['Gen_new'] = data['Gender'].cat.codes 
data['Rem_new'] = data['Remarks'].cat.codes # Create an instance of One-hot-encoder 
enc = OneHotEncoder() # Passing encoded columns enc_data = pd.DataFrame(enc.fit_transform( data[['Gen_new', 'Rem_new']]).toarray()) # Merge with main 
New_df = data.join(enc_data) print(New_df) 

输出

   Employee_Id  Gender Remarks  Gen_new  Rem_new    0    1    2    3    4
0            45    Male    Nice        1        2  0.0  1.0  0.0  0.0  1.0
1            78  Female    Good        0        0  1.0  0.0  1.0  0.0  0.0
2            56  Female   Great        0        1  1.0  0.0  0.0  1.0  0.0
3            12    Male   Great        1        1  0.0  1.0  0.0  1.0  0.0
4             7  Female    Nice        0        2  1.0  0.0  0.0  0.0  1.0
5            68  Female   Great        0        1  1.0  0.0  0.0  1.0  0.0
6            23    Male    Good        1        0  0.0  1.0  1.0  0.0  0.0
7            45  Female    Nice        0        2  1.0  0.0  0.0  0.0  1.0
8            89    Male   Great        1        1  0.0  1.0  0.0  1.0  0.0
9            75  Female    Nice        0        2  1.0  0.0  0.0  0.0  1.0
10           47  Female    Good        0        0  1.0  0.0  1.0  0.0  0.0
11           62    Male    Nice        1        2  0.0  1.0  0.0  0.0  1.0

这里我们将 enc.fit_transform() 方法转换为数组,因为 OneHotEncoder 的 fit_transform 方法返回 SpiPy 稀疏矩阵,因此当我们有大量分类变量时,首先转换为数组可以节省空间。

虚拟变量陷阱

前面我们使用One Hot Encoding 生成的变量就可称之为虚拟变量

在统计学中,特别是在回归模型中,我们处理各种类型的数据。数据可以是定量(数字)或定性(分类)的。数值数据可以在回归模型中轻松处理,但我们不能直接使用分类数据,它需要以某种方式进行转换。

为了将类别属性转换为数值属性,我们可以使用标签编码过程(标签编码为每个数据类别分配一个唯一的整数)。但这个过程并不是唯一合适的,因此,在标签编码之后的回归模型中使用了One Hot Encoding ,这使我们能够根据分类属性中存在的类别数量创建新属性,即如果分类属性中有n个类别,则将创建n 个新属性。创建的这些属性称为虚拟变量。因此,虚拟变量是回归模型中分类数据的“代理”变量。 这些虚拟变量将使用 one-hot编码
创建,每个属性的值为 0 或 1,表示该属性是否存在。

虚拟变量陷阱: 虚拟变量陷阱是一种场景,其中属性高度相关(多重共线性),并且一个变量可以预测其他变量的值。当我们使用one-hot 编码来处理分类数据时,可以借助其他虚拟变量来预测一个虚拟变量(属性)。因此,一个虚拟变量与其他虚拟变量高度相关。在回归模型中使用所有虚拟变量会导致虚拟变量陷阱。因此,回归模型的设计应排除一个虚拟变量。 例如 –让我们考虑性别有两个值男性(0 或 1)和女性(1 或 0) 的情况。包括两个虚拟变量可能会导致冗余,因为如果一个人不是男性,在这种情况下该人是女性,因此,我们不需要在回归模型中使用这两个变量。这将保护我们免受虚拟变量陷阱的影响。

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

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

相关文章

Python 多线程编程实战:threading 模块的最佳实践

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 线程的创建 1. 继承 threading.Thread 类 2. 使用 threading.Thread 对象 线程的同步 使用锁 线程的通信…

最新趋势揭秘:即时通讯开发中的人工智能应用

随着人工智能技术的快速发展和广泛应用,即时通讯开发领域迎来了一场前所未有的变革和机遇。在当今数字化时代,人工智能已经成为各行各业发展的重要引擎之一,即时通讯应用也不例外。人工智能技术的应用不仅可以提升即时通讯的用户体验和功能&a…

大数据基础设施搭建 - Flink

文章目录 一、上传并解压压缩包二、修改集群配置2.1 修改flink-conf.yaml文件2.2 修改workers文件2.3 修改masters文件2.4 分发配置文件2.5 修改其他两台机器的配置文件flink-conf.yaml 三、启动关闭集群(Standalone模式)四、访问WEB-UI五、向集群提交作…

常用日期和时间标准对比:HTML, ISO 8601, RFC 3339, RFC 5322

1. HTML, ISO 8601, RFC 3339, RFC 5322 对比 日期和时间,对于不同系统和平台之间的数据交换和互操作至关重要。本文将对比 HTML 标准、ISO 8601、RFC 3339 和 RFC 5322,为读者提供参考。 表格文字版见文末-附 1.1. 标准链接 HTML 标准: https://html…

【机器学习300问】27、高偏差与高方差是什么?他们对评估机器学习模型起何作用?

〇、回归模型举例 (1)第一种情况 你选择了一个简单的模型,比如一个直线,却想拟合类似抛物线分布的数据。 图1 (2)第二种情况 你选择了一个复杂的模型,比如一个四次多项式,想拟合类…

android高级面试题及答案,已拿offer

一、java相关 java基础 1、java 中和 equals 和 hashCode 的区别 2、int、char、long 各占多少字节数 3、int 与 integer 的区别 4、谈谈对 java 多态的理解 5、String、StringBuffer、StringBuilder 区别 6、什么是内部类?内部类的作用 7、抽象类和接口区别 java高…

2.模拟问题——6.活着的树

输入 500 3 100 200 150 300 470 471 输出 298 【提交地址】 简单思路 初始化一个全false的bool数组&#xff0c;表示树未被移走&#xff0c;然后根据输入值将数组内的对应序号值设为true表示已经移走。 最后统计false的数目即为剩下的树数。 #include <cstdio> #incl…

步进电机驱动器接法

实物 参数 共阳极&#xff1a; 使能给高电平有效 共阴极&#xff1a; 使能给低电平有效 整体接线 参考内容 B站UP范辉

20240305-2-海量数据处理常用技术概述

海量数据处理常用技术概述 如今互联网产生的数据量已经达到PB级别&#xff0c;如何在数据量不断增大的情况下&#xff0c;依然保证快速的检索或者更新数据&#xff0c;是我们面临的问题。 所谓海量数据处理&#xff0c;是指基于海量数据的存储、处理和操作等。因为数据量太大无…

字节跳动热门的前端开源项目

字节跳动开源官网 Arco Dsign Arco Design 是一套设计系统&#xff0c;主要服务于字节跳动旗下中后台产品的体验设计和技术实现。它的目标在于帮助设计师与开发者解放双手、提升工作效率&#xff0c;并高质量地打造符合业务规范的中后台应用。它拥有系统的设计规范和资源&…

(学习日记)2024.03.05:UCOSIII第七节:SysTick+任务时间片

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

计算机网络 网络原理之Http

目录 1 前言2 什么是http的一次交互&#xff1f;3 理解“协议”二字4 认识URL4.1 简介4.2 URL的编码和解码(urlencode和urldecode) 5 抓包工具 fiddler6 http和https的区别7 http 头8 HTTP 状态码9 常见的 Http 服务器 1 前言 为什么要了解Http原理呢&#xff1f;因为http原理…