位置: IT常识 - 正文

机器学习中的数据预处理方法与步骤

编辑:rootadmin
机器学习中的数据预处理方法与步骤

推荐整理分享机器学习中的数据预处理方法与步骤,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

数据预处理是准备原始数据并使其适用于机器学习模型的过程。这是创建机器学习模型的第一步,也是至关重要的一步。

在创建机器学习项目时,我们并不总是遇到干净且格式化的数据。并且在对数据进行任何操作时,必须对其进行清理并以格式化的方式放置。所以为此,我们使用数据预处理任务。

为什么我们需要数据预处理?

真实世界的数据通常包含噪声、缺失值,并且可能采用无法直接用于机器学习模型的不可用格式。数据预处理是清理数据并使其适用于机器学习模型的必要任务,这也提高了机器学习模型的准确性和效率。

它涉及以下步骤:

获取数据集导入相关库导入数据集查找缺失的数据编码分类数据将数据集拆分为训练集和测试集特征缩放一、获取数据集

要创建机器学习模型,我们需要的第一件事是数据集,因为机器学习模型完全适用于数据。以适当格式收集的特定问题的数据称为数据集。

数据集可能有不同的格式用于不同的目的,例如,如果我们想为商业目的创建关于肝病患者的机器学习模型,那么数据集将是肝病患者所需的数据集。数据集我们通常将其放入 CSV文件中。但是,有时,我们可能还需要使用 HTML 或 xlsx 文件。

什么是 CSV 文件?CSV 代表“逗号分隔值”文件;它是一种文件格式,允许我们保存表格数据,例如电子表格。它对于庞大的数据集很有用,并且可以在程序中使用这些数据集。

二、导入常见库

为了使用 Python 进行数据预处理,我们需要导入一些预定义的 Python 库。这些库用于执行一些特定的工作。我们将使用三个特定的库进行数据预处理,它们是:

numpymatplotlibpandas三、导入数据集3.1 读取数据

一般使用pandas来读取文件:

data_set = pd .read_csv('Dataset.csv')

data_set是存储数据集的变量的名称,在函数内部,我们传递了数据集的名称。一旦我们执行了上面这行代码,它将成功地在我们的代码中导入数据集。

这里以心脏病数据集为例:

import pandas as pddata=pd.read_csv('heart.csv')data

读取如下:

3.2提取因变量和自变量

在机器学习中,区分特征矩阵(自变量)和因变量与数据集很重要。在我们的数据集中,有三个自变量age,sex…其中target是因变量。

提取自变量

x= data.iloc[:,:-1].valuesx

如下:

为了提取自变量,我们将使用Pandas 库的iloc[ ]方法。它用于从数据集中提取所需的行和列。在上面的代码中,第一个冒号(😃 用于获取所有行,第二个冒号(😃 用于获取所有列。这里我们使用了:-1,因为我们不想取最后一列,因为它包含因变量。因此,通过这样做,我们将获得特征矩阵。

提取因变量 为了提取因变量,我们将再次使用 Pandas .iloc[] 方法:

y = data .iloc[:,-1].valuesy

在这里,我们只取了最后一列的所有行。它将给出因变量数组。输出为:

array([0, 0, 0, ..., 0, 1, 0], dtype=int64)3.3 处理缺失数据

数据预处理的下一步是处理数据集中缺失的数据。如果我们的数据集包含一些缺失的数据,那么它可能会给我们的机器学习模型带来巨大的问题。因此,有必要处理数据集中存在的缺失值。

处理缺失数据的方法: 处理缺失数据主要有两种方式,分别是:

通过删除特定的行:第一种方法通常用于处理空值。这样,我们只需删除包含空值的特定行或列。但这种方式效率不高,删除数据可能会导致信息丢失,无法给出准确的输出。通过计算平均值:通过这种方式,我们将计算包含任何缺失值的列或行的平均值,并将其放在缺失值的位置。这种策略对于具有数字数据的特征很有用,例如年龄、薪水、年份等。在这里,我们将使用这种方法。

依然是处理心脏病数据集如下:

from sklearn.impute import SimpleImputerimport numpy as npimputer = SimpleImputer(missing_values=np.nan, strategy='mean')imputerimputer= imputer.fit(x[:, 1:12]) x[:, 1:12]= imputer.transform(x[:, 1:12]) x

输出为:

array([[52., 1., 0., ..., 2., 2., 3.], [53., 1., 0., ..., 0., 0., 3.], [70., 1., 0., ..., 0., 0., 3.], ..., [47., 1., 0., ..., 1., 1., 2.], [50., 0., 0., ..., 2., 0., 2.], [54., 1., 0., ..., 1., 1., 3.]])3.4 编码分类数据

为了便于介绍这个编码分类,这里我随意构造了一个数据集:

读取:

import pandas as pddata=pd.read_csv('ceshi.csv',encoding='gbk')x= data.iloc[:,:-1].values y = data .iloc[:,-1].values x

如下:

array([['中国', 28, 21504], ['美国', 29, 32102], ['德国', 27, 34150], ['法国', 25, 28740], ['中国', 24, 18750]], dtype=object)

查看目标:y

array(['是', '是', '否', '否', '否'], dtype=object)

这里没有缺失值,就不用处理了,但是为了演示这个过程,我还是假装有缺失值来处理下:

from sklearn.impute import SimpleImputerimport numpy as npimputer = SimpleImputer(missing_values=np.nan, strategy='mean')imputerimputer= imputer.fit(x[:, 1:2]) x[:, 1:2]= imputer.transform(x[:, 1:2]) x

输出为:

array([['中国', 28.0, 21504], ['美国', 29.0, 32102], ['德国', 27.0, 34150], ['法国', 25.0, 28740], ['中国', 24.0, 18750]], dtype=object)机器学习中的数据预处理方法与步骤

可以看到处理与未处理之间是没有变化的,因为这个方法是用均值处理填充缺失值。

现在开始讲编码分类:分类数据是具有某些类别的数据,例如在我们的数据集中;有两个分类变量:国家和购买

由于机器学习模型完全适用于数学和数字,但如果我们的数据集有一个分类变量(字符),那么在构建模型时可能会产生麻烦。因此有必要将这些分类变量编码为数字。这就是为啥需要编码。

对于国家变量: 首先,我们将国家变量转换为分类数据。为此,我们将使用preprocessing库中LabelEncoder()类:

from sklearn.preprocessing import LabelEncoderlabel_encoder_x= LabelEncoder() x[:, 0]= label_encoder_x.fit_transform(x[:, 0]) x

输出为:

array([[0, 28.0, 21504], [3, 29.0, 32102], [1, 27.0, 34150], [2, 25.0, 28740], [0, 24.0, 18750]], dtype=object)

可以看到国家这里被编码成了0,1,2,3三个数字,表示三种。如果这些国家有重复,数字就会重复。第一个国家与第五个国家都是中国,编码后数字都是0。

对于购买变量 同样的到底对其进行编码:

labelencoder_y= LabelEncoder()y= labelencoder_y.fit_transform(y) y

输出为:

array([1, 1, 0, 0, 0])

可以看到”是“被编码为1,”否“被编码为0。因为购买的变量只有两个类别是或否,所以自动编码为 0 和 1。

四、将数据集拆分为训练集和测试集

在机器学习数据预处理中,我们将数据集分为训练集和测试集。这是数据预处理的关键步骤之一,因为通过这样做,我们可以提高机器学习模型的性能。

假设,如果我们通过一个数据集对我们的机器学习模型进行了训练,并且我们通过一个完全不同的数据集对其进行了测试。然后,这会给我们的模型理解模型之间的相关性带来困难。

如果我们训练我们的模型非常好并且它的训练精度也非常高,但是我们给它提供了一个新的数据集,那么它会降低性能。因此,我们总是尝试制作一个在训练集和测试数据集上表现良好的机器学习模型。在这里,我们可以将这些数据集定义为:训练集和测试集。

训练集:用于训练机器学习模型的数据集子集,我们已经知道输出。

测试集:用于测试机器学习模型的数据集子集,并通过使用测试集,模型预测输出。

为了拆分数据集,我们将使用以下代码行将数据集以8:2进行拆分:

from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.2, random_state=0)

解释:

在上面的代码中,第一行用于导入将数据集的数组拆分为随机训练和测试子集。x_train:训练数据的特征x_test:测试数据的特征y_train:训练数据的因变量y_test:测试数据的自变量

在train_test_split() 函数中,我们传递了四个参数,其中前两个用于数据数组,test_size用于指定测试集的大小。test_size 可能是 0.5、0.3 或0 .2,它表示训练集和测试集的划分比率。一般采用0.3或者0.2。

可以挨个查看一下:

五、特征缩放

特征缩放是机器学习中数据预处理的最后一步。它是一种将数据集的自变量标准化在特定范围内的技术。在特征缩放中,我们将变量放在相同的范围和相同的比例中,这样任何变量都不会支配另一个变量。

正如我们所看到的,年龄和工资列的值不在同一个范围内。机器学习模型是基于欧几里德距离的,如果我们不对变量进行缩放,那么它会在我们的机器学习模型中引起一些问题。

欧几里得距离为: 如果我们从年龄和薪水计算任何两个值,那么薪水值将支配年龄值,并且会产生不正确的结果。所以为了消除这个问题,我们需要为机器学习执行特征缩放。

在机器学习中执行特征缩放有两种方法:

标准化正常化

标准化方法:x为原始值,mean为平均值,a为标准差,x’为标准化后的值 正常化方法:x为原始值,min为最小值,max为最大值,x’为正常化后的值

在这里,我们将对数据集使用标准化方法,对于特征缩放,我们将sklearn.preprocessing库的StandardScaler类导入为:

from sklearn.preprocessing import StandardScaler

现在,我们将为自变量或特征创建StandardScaler类的对象。然后我们将拟合和转换训练数据集。

from sklearn.preprocessing import StandardScalerst_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_train

查看输出:

array([[-0.96225045, 0.72760688, -0.70185794], [ 1.34715063, 1.21267813, 1.2711634 ], [ 0.57735027, -0.72760688, 0.6452625 ], [-0.96225045, -1.21267813, -1.21456796]])

对于测试数据集,我们将直接应用transform()函数而不是fit_transform()因为它已经在训练集中完成了。

x_test = st_x .transform(x_test)x_test

输出为:

array([[-0.19245009, 0.24253563, 1.65243796]])

通过执行上述代码行,我们将得到 x_train 和 x_test 的缩放值。正如我们在上面的输出中看到的,所有变量都在值 -1 到 1 之间缩放,不过还是会有几个值在缩放后远离这个范围,这是正常的。

注意:

在这里,我们没有对因变量进行缩放,因为只有两个值 0 和 1。但是如果这些变量的取值范围更大,那么我们还需要对这些变量进行缩放。

注意,以上数据是我编的,不具有实际性,你应该是从这个里面学习对应方法。说白了,对于非字符变量需要编码,编码成数字,本来就是数字就不用编码了。

如果你python基础不够好,可以参考我的基础专栏,其中有教程也有练习题。如果你觉得我专栏的题太少了,你需要更多的刷题,推荐一个免费刷题网站:牛客网

本文链接地址:https://www.jiuchutong.com/zhishi/294483.html 转载请保留说明!

上一篇:涅迪克角灯塔上的节日彩灯,缅因州 (© Walter Bibikow/Alamy)

下一篇:最新waymo数据集 百度网盘(wisdm数据集)

  • 华为手环4怎么开机(华为手环4怎么充电)

    华为手环4怎么开机(华为手环4怎么充电)

  • 小米滑板车怎么调节到运动模式(小米滑板车怎么启动)

    小米滑板车怎么调节到运动模式(小米滑板车怎么启动)

  • switch支持多少w快充(switch支持多少w充电器)

    switch支持多少w快充(switch支持多少w充电器)

  • switch能插耳机吗(switch可以插耳机不)

    switch能插耳机吗(switch可以插耳机不)

  • 怎么把照片加入精选照片(怎么把照片加入表情包)

    怎么把照片加入精选照片(怎么把照片加入表情包)

  • 荣耀30没有3.5mm的耳机孔吗(荣耀30没有耳机孔怎么办)

    荣耀30没有3.5mm的耳机孔吗(荣耀30没有耳机孔怎么办)

  • 拼多多已经确认收货了,还能申请退款吗(拼多多已经确认收货了还能退货退款吗)

    拼多多已经确认收货了,还能申请退款吗(拼多多已经确认收货了还能退货退款吗)

  • 苹果机怎么设置自己想要的铃声(苹果手机怎么设置锁屏壁纸)

    苹果机怎么设置自己想要的铃声(苹果手机怎么设置锁屏壁纸)

  • 抖音为什么不显示音浪了(抖音为什么不显示火花)

    抖音为什么不显示音浪了(抖音为什么不显示火花)

  • 快手为什么提交不了订单(快手为什么提交不了作品)

    快手为什么提交不了订单(快手为什么提交不了作品)

  • 华为手机掉水里了没声音怎么办(华为手机掉水里了开不了机还能修好吗)

    华为手机掉水里了没声音怎么办(华为手机掉水里了开不了机还能修好吗)

  • flash版本过低是什么意思(flash 版本太低)

    flash版本过低是什么意思(flash 版本太低)

  • 全半角切换快捷键(全半角切换快捷键怎么改不了)

    全半角切换快捷键(全半角切换快捷键怎么改不了)

  • 华为手机屏幕不灵敏是怎么回事(华为手机屏幕不停的自动跳)

    华为手机屏幕不灵敏是怎么回事(华为手机屏幕不停的自动跳)

  • 苹果8p突然掉电很快(iphone8突然掉电)

    苹果8p突然掉电很快(iphone8突然掉电)

  • 七天网络如何授权(七天网络怎么登录注册授权)

    七天网络如何授权(七天网络怎么登录注册授权)

  • xr与xs的a12处理器一样吗(xrxs处理器一样吗)

    xr与xs的a12处理器一样吗(xrxs处理器一样吗)

  • 港版iphone11支持电信卡吗(港版iphone11支持双卡双待吗)

    港版iphone11支持电信卡吗(港版iphone11支持双卡双待吗)

  • 惠普m227双面复印教程(惠普m227sdn双面复印)

    惠普m227双面复印教程(惠普m227sdn双面复印)

  • 手机的望远镜功能怎么打开(手机的望远镜功能怎么弄)

    手机的望远镜功能怎么打开(手机的望远镜功能怎么弄)

  • 边玩手机边充电会怎样(边玩手机边充电电量越来越少)

    边玩手机边充电会怎样(边玩手机边充电电量越来越少)

  • 怎样删掉新闻资讯(怎么去掉新闻)

    怎样删掉新闻资讯(怎么去掉新闻)

  • 5g上市是换手机还是换手机卡呢(5g出来是不是有要换手机)

    5g上市是换手机还是换手机卡呢(5g出来是不是有要换手机)

  • 几款常用的表单设计器解决方案(几款常用的表单设计软件)

    几款常用的表单设计器解决方案(几款常用的表单设计软件)

  • react实现路由跳转(react路由exact)

    react实现路由跳转(react路由exact)

  • 税前扣除凭证按照用途分为哪些
  • 经营所得和企业所得
  • 只有收入没有成本 企业所得税
  • 出口合同包括哪些条款
  • 无力支付什么意思
  • 短期借款明细账应采用三栏式账页格式
  • 哪些企业需要纳税
  • 开发票高校是企业还是非企业单位
  • 购进库存商品到销售全部分录
  • 财务凭证和预算凭证目录只能有一条数据
  • 实际发生坏账后要把计提的坏账冲回吗?
  • 有限合伙企业转让投资股权
  • 外购礼品发放员工
  • 多交税款抵税会计分录
  • 有限合伙企业经营期限多久
  • 吸收合并控股合并新设合并的区别
  • 个体户季度报税表怎么填
  • 如何理解定时是指收入在什么时候记入账册?
  • 保证金逾期退还
  • 安装费发票开具3%税率国税需要备案吗?
  • 分公司企业所得税怎么缴纳
  • boss直聘收费怎么这么贵
  • 高新技术研发人员比例
  • 税前净利润等于什么
  • 筹建期间内发生的开办费属于什么费用
  • 厂区绿化工程计入什么科目
  • 应收账款转让的风险
  • win10excel闪退是什么原因
  • 财政总预算会计科目
  • keyemain.exe是什么进程
  • php和javaweb
  • 盘亏固定资产累计折旧
  • 金融企业会计计提贷款呆账准备金主要贯彻了
  • php统计字符串长度
  • 财务人员如何管控费用支出
  • 职工教育经费计入管理费用吗
  • thinkphp5上传图片
  • 年底社保怎么交
  • 安装windows(install windows)
  • 数据库读写异常
  • php8.0 特性
  • linux时间12小时制
  • 资产负债表和利润表的勾稽关系
  • 营业执照筹建是做什么的
  • mongodb cond
  • python send_from_directory
  • 递延收益的影响
  • 向投资者分配现金股利为什么会导致所有者权益减少?
  • 税务现金流量表填错了怎么办
  • 哪些发票是成品发票
  • 销售应税服务或劳务的纳税义务发生时间的一般规定
  • 吸收合并需要编制
  • 工地的工人工资怎么入账
  • 员工外出培训报告范文
  • 如何进行汇算清缴
  • 出差补贴算工资吗
  • 航天金税服务费发票在哪打印
  • 获得赔偿收入什么科目
  • 利息税额计算公式
  • mysql5.7.24安装配置教程
  • linux怎么用root运行命令
  • window7窗口
  • linux系统的介绍
  • androidstudio listview
  • jquery1
  • shell delete
  • pycharm中文教程
  • NGUI的depth和Z轴的关系
  • Unity3D中的事件处理
  • node 回调函数
  • easyui怎么用
  • js响应事件的过程
  • python高级写法
  • android使用红杏代理更新sdk
  • 纳税人欠缴税款数额在10万元以上
  • 电子税务局财务制度备案在哪
  • 上海市松江区房价?
  • 在京东上买货
  • 企业租入房子用交税吗
  • 湖北航天金税盘服务器地址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设