r语言中正定矩阵由于误差不正定_R语言之数据处理(一)

b7a7369c6977e8c34690fc582997b688.png

在上一篇小文中,提到了关于R语言导入数据的一些方法,之后的重点就转向了数据的处理上。数据处理其实在整个数据分析项目中所占用的时间是比较多的,所以根据处理的目的不同,也有不同的处理方法。在R语言中,我通常会将数据处理分成三部分:数据质量处理、数据维度处理和特殊文本的处理。由于三个部分的内容也比较多,就先介绍数据质量处理的内容,其余的两部分会在后面的文章介绍。

一、数据清洗

数据清洗简单说就是处理缺失值和异常值的判断,当然要根据实际情况来定义数据清洗的任务。

1.缺失值处理

当我们面对的数据是比较大量的时候,就需要了解数据集中那些变量有缺失值、缺失的数量、属于那种组合方式等有用信息。此时可以使用mice包中的md.pattern()函数,该函数可生成一个以矩阵或者数据框形式展示缺失值模式的表格,且该函数只需要传入需要判断的数据即可。另外还有使用图形方法这种更直观的方法描述数据的缺失,可利用VIM包中的aggr()函数实现,形式如下:

aggr(x,delimiter = NULL,plot = T,...)

x表示一个向量、矩阵或者数据框,delimiter用于区分插值补量,plot则指明是否画图。

识别出数据中的缺失值,接下来对其处理。最常用的方法是将包含缺失值的记录删去,使用na.omit()函数,但仅限于出现缺失值的记录数量比较少。但含缺失值的记录很多时,就要考虑替换缺失值,一般可用均值、中位数和平均数替换,更专业一点的做法是使用插值法(将缺失数据的变量作为因变量,其他变量作为自变量,建立预测模型)

2.异常值的判断与处理

异常值处理的重点在于识别,处理的手段和缺失值基本一致,所以下面主要介绍识别异常值的一些方法。3σ原则是使用比较多的方法,而R语言qc包中的qcc()函数是专业绘制质量监控图的。初次之外,还可以利用箱线图和聚类分析识别出异常值。


二、数据去重

数据去重并不是处理数据的必要步骤,所以单独拿出来说。在R语言中去重的方法也很简单,对于向量数据可使用unique()函数,而针对矩阵或者数据框这种多维数据时,可使用duplicated()函数。


三、数据转换

数据转换的内容简单地可分为三部分,产生衍生变量、数据分箱和数据标注化。衍生变量就是原有的变量属性构造新的属性,比如变量A和变量B通过相乘得到变量C,另外比较常见的就是哑变量的构成(可以使用caret包dummyVars()函数)。

数据分箱实际上就是按照属性值划分子区间,比如将考试成绩0-59分的归为不及格,60-89的归为中等,90-100的归为优秀。R语言中分cut()函数可以实现数据分箱的目的。

数据标准化主要的目的就是消除变量之间的量纲影响,让不同的变量经过标准化后可以有平等分析和比较的基础。常用的标准化有两种,Min-Max标准化和Z-Score标准化,而caret包中的preProcess()函数能非常灵活地实现数据的标注化。


四、数据抽样

在数据分析或者建立数据模型之前,在面对或多或少的数据时,一般不会直接使用数据,而是采用抽样的方法去选取数据,而根据不同的情况,会有不同的抽样方法。下面介绍四种抽样方法及其在R语言中的实现:

  1. 处理类失衡的抽样方法——SMOTE

类失衡会发生在包含分类变量的数据集,比如在整个数据集中,A类的数据占总体的5%,而B类数据占了95%。具体的理论可参考下面的连接:

SMOTE算法​www.jianshu.com
213bf0486c043f4d8668fd3b87644b34.png

现在我们的关键在于如何使用R语言去解决类失衡的情况,比如A类数据有4000条记录,B类数据只有200条记录,此时可以使用DMwR包中的SMOTE()函数。

2.随机抽样

R语言中实现随机抽样的函数是sample(),基本形式如下:

sample(x,size,replace=F/T,prob=NULL)

x是数值型向量,size是抽样个数,replace表示是否放回,prob是与x长度一致的向量,且每个元素表示与x对应位置上的元素被抽中的概率。

affdaf9bcf6e3f646c33ee8bf7c119a8.png

如上面的命令,在1到5中随机抽取3个元素,且每个元素被抽中的概率为0.1、0.2、0.5、0.4和0.3。

3.等比抽样

当面对多分类数据时,我们会采用等比抽样的方法,实现快速得到与原始数据集有比例关系的抽样数据。R语言中实现这一功能的是caret包中的createDataPartition()函数,形式如下:

createDataPartition(x,time,p,list=F/T,groups = min(5,length(x)))

x是包含了多分类信息的向量,time表示需要进行抽样的次数,p表示需要从数据中抽取的样本比例,list表示结果是否是为list形式,默认为T,groups表示如果输出变量是数值型数据,则默认按分位数分组进行取样。以iris数据集为例,使用str()函数查看iris数据集的构成:

01b0483a451f68bc0746d0ae1a0b2243.png

可以知道iris数据集中的Species变量是分类变量,且有3类元素。使用createDataPartition()函数进行抽样。

f52a07c5d18b0f5a575109a891240446.png

从结果可以看到三类的数据量是一样的。

4.交叉验证的样本抽取

如果我们在建立模型时只采用一次抽样的数据,这样得到的数据模型随机性和误差性是比较大的,因此使用N折交叉验证的方法可以提高模型结果的可靠性。步骤大概是将数据集的每条记录分配下标1,2,...N个数据,换言之就是将数据集分成了N份,然后,每次提取一份作为测试数据集,剩下的N-1份数据作为训练数据集,然后记录下拟合的N个模型结果和误差,最后计算平均误差来衡量模型的准确性。对K折交叉验证法原理不熟悉的伙伴,可以看以下的连接:

K折交叉验证​blog.csdn.net

R语言中实现K折交叉验证法,主要是使用caret包中的createFolds()和createMultiFolds()两个函数。两者的形式别如下:

createFolds(x,k=10,list = T,returnTrain = F)

x是要依据分类的变量,k指指定的折数,默认是10,list表示返回的结果索引值是否为列表形式,默认为True,returnTrain表示是否返回抽样的真实值,默认Flase。

createMultiFolds(x,k = 10,times = 5)

x和k的参数意义与createFolds()一样,times为指定抽样组数。

两个函数都可是实现K折交叉验证的抽样,具体的使用方法可参照下面的连接:

k折交叉验证(R语言)​www.jianshu.com
e8b0135bbf91f6b65c5c8968062eca4a.png

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

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

相关文章

【chromium】 渲染显示相关概念

DRM(Direct Rendering Manager) DRM 由两个部分组成:一是 Kernel 的子系统,这个子系统对硬件 GPU 操作进行了一层框架封装。二是提供了一个 libdrm 库,里面封装了一系列 API,用来进行图像显示。 说到这里,其实这么理解…

ASP.NET Core MVC 之区域(Area)

区域(Area)是一个 ASP.NET MVC 功能,用于将相关功能组织为一个单独的命名空间(用于路由)和文件结构(用于视图)。使用区域通过向控制器和操作添加 一个路由参数(area)来创…

esp32 arduino adc_英雄联盟手游射手出装怎么出 adc英雄出装推荐

2020-11-02 18:06:31 角色扮演 人气值:加载中...英雄联盟手游adc怎么出装备?英雄联盟手游虽然没有上线国服和台湾服,但是我们已经有很多热心的玩家在外服中研究出了各种射手的玩法,那么adc要怎么出装呢?小编已经准备…

camel.js_Camel 2.11 –没有Spring的Camel Web应用程序

camel.js在撰写本文时,我们刚刚向即将到来的Apache Camel 2.11添加了一个新组件,该组件允许使用Camel运行Web应用程序,而不必依赖Spring Framework来加速Camel。 或与此相关的任何其他第三方框架。 有点as愧地说,在2013年&#x…

宅男计划

题解 $dp$不行考虑三分 发现单峰 1.理性打表,得到单峰 2.感性思考,你会发现你买食物次数越多,你钱数越少,你买的好食品更多,你买食物次数越少,你钱数越多,然而你必须买一些价格贵保质期长弥补次数少. 单峰,我们三分就完了(其实也可以模拟退火,然而我参数爆炸了一直60分) 那么$c…

.net 后台 下载 图片_特殊的 “图片软件” !

01 引语简单的图片处理软件我说过不少,像windows自带的图片编辑、在线处理图片的稿定设计、或者ps的一些插件。虽然我知道这类工具型软件的文章,大多数小伙伴都只是随便看一眼,心里默念 “咦,好像有用!”,…

流操作中的noException

本文介绍了一些简单的编码实践。 没什么好看的。 在StackOverflow上也进行了讨论。 您只是将一个庞大而复杂的循环重构为一个更具可读性的流表达式,而忘记了某些方法调用引发了异常。 包含此代码的方法将引发此异常,该异常在方法头中声明。 您不想在此级…

optimize table 需要多久_吉林市政工程资质新办需要多久

七。 暖通空调专业:水暖工程,建筑环境与设备,环境工程,暖通空调,供暖和通风与空调,制冷和空调,水暖,供暖和通风,HVAC,公共设备安装。如何申请第三级土木工程资…

Java EE 6 开发环境

软件安装: 选择 Glassfish 支持 Java EE 6 的最新版本 3.1.2.2根据 Glassfish 3.1.2 的 certification matrix,要求 JDK 1.6 update 29,因此,选择 JDK 6 最新版本 JDK 6u45选择 Eclipse Indigo,其之后的版本要求 JDK 7…

mysql连接不断线_某些小时后MySql连接自动掉线

mysql连接不断线MySql配置为删除任何闲置超过8小时的连接。 这意味着什么? 在8个小时的间隔后返回到已部署的应用程序之后(如果未更改默认SQL参数),将会遇到异常情况。 如何解决这个问题? 增加wait_time参数-不是一个…

pb65 xp 安装无反应_长春优质AFB型耐腐蚀泵安装

长春优质AFB型耐腐蚀泵安装 k5b5b5s长春优质AFB型耐腐蚀泵安装 并及时更换轴套。而随着科技的不断发展,新式设备的问世,设备一般都开始被筛选。无密封自吸泵无密封自吸泵就是一种新式泵,该泵密封可靠,选用无泄漏密封设备&#xff…

虚函数探秘

C的多态分为动态多态和静态多态,其中静态多态主要靠重载和模板来实现,而动态多态则主要靠继承来实现了。 那么静态和动态,怎么算静,怎么算动呢?静态多指编译期能决定的事情,而动态多指运行时才决定的事情。…

Errai框架简介

Errai是Red Hat开发和维护的框架,旨在结合GWT和JEE世界的优点。 根据Red Hat的说法,Errai是基于GWT的框架,用于使用下一代Web技术构建富Web应用程序。 在此简单声明的背后,存在一种与GWT完全不同的开发方式,在下面的文…

动态壁纸安卓_高清无水印!这4款壁纸软件,让你的手机好看又独特

手机与我们每日相伴,我们总会精心挑选各种图片设置为手机壁纸,有时换个壁纸就像换了一种心情一样。但网上搜索的壁纸大同小异,有没有风格独特又有趣的?今天就给大家推荐4款各具特色的壁纸App,保证给你耳目一新的感觉。…

在线生成安卓APP图标

移动应用图标/启动图生成工具,一键生成所有尺寸的应用图标/启动图 在线生成安卓APP图标生成 图标在 线 在线图标 安卓图标 生成图标 https://icon.wuruihong.com/ 在线png图片压缩 png压缩 https://compresspng.com/zh/ 在线gif图片压缩 gif压缩 https://www.soog…

NOIP模拟测试29「爬山·学数数·七十和十七」

爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左面第一个大于当前值的值,极右值为右面第一个大于当前值的值 ,找到最大值…

手机音频拼接软件_良心分享:业界最顶尖的软件!

01短视频的爆火,让全民都接触了“剪辑”要知道在最最最开始大众离它很远,更多是一种职业而非爱好最具影响力的是抖音、B站等平台抖音让更多人接触到了剪辑哔哩让更多人学会剪辑技术虽然抖音的视频时长普遍较短但这并不妨碍剪辑技术的展现比如&#xff0c…

java堆内存和堆外内存_Java堆空间,本机堆和内存问题

java堆内存和堆外内存最近,我正在和一个朋友讨论为什么Java进程使用的内存比启动Java进程时设置的最大堆多。 代码创建的所有Java对象都是在Java堆空间内创建的,其大小由-Xmx选项定义。 但是一个Java进程由很多空间组成,而不仅仅是Java堆空间…

springboot实践1

环境安装 安装jdk 推荐安装jkd1.8,我使用的是mac,假设已经安装好homebrew,则jdk的安装指令是: brew install java 在 ~/zshrc ,添加两行 export JAVA_HOME你的jdkPath export PATH$PATH:$JAVA_HOME;然后保存; 输入 echo ${JAVA_HOME} 回车&…

电脑入门基础教程_ARM入门最好的文章------转载一位资身工程师的入门心得

开始学ARM一团雾水,不知道如何入手.这个介绍的比较全面.本人认为aRM入门最好的文章1. 抓住51开发ARM这几个月来我一直都爬在51的问题,自己都有一点笑自己了,用了4个月的时间,来巩固51的原理和程序,还好我自己算是走过来了&#xf…