R语言--不均衡问题处理

Python018

R语言--不均衡问题处理,第1张

样本不均衡问题是指在机器学习分类任务中,不同类型的样本占比差距悬殊。

比如训练数据有100个样本,其中只有5个正样本,其余均为负样本,这样正样本:负样本=5%:95%,训练数据中负样本过多,会导致模型无法充分学习到正样本的信息,这时候模型的正确率往往较高,但特异性却很低,即模型识别正样本的能力很差。这样的模型是无法投入实际项目中的,我们需要解决不均衡问题带来的影响。

解决样本不均衡,采用的方法是重采样。根据采样的方法,分为欠采样、过采样和组合采样。

在R语言中, ROSE 包用于处理样本不均衡问题。

安装包

加载示范数据,查看列联表。可以看到训练数据 hacide.train 出现了样本不均衡,正样本1只有20个,负样本0有980个。

欠采样会缩小训练数据。训练数据虽然正负样本均衡了,但由于原始的正样本很少,导致处理后总样本数减少很多。这个方法适用于训练数据很大,且正样本也较大的情况,可以用欠采样来减少训练数据规模,提高训练速度。

过采样会增大训练数据。该方法适用于训练数据中正样本数量较少的情况。

组合采样会同时增加正样本和减少负样本。参数 N 表示处理后样本总数,一般设置为训练数据样本数。

不均衡样本对模型的训练结果会产生较大偏差,以实际分类问题为例,对比一下处理与不处理均衡样本的结果。

从预测的结果来看,均衡处理与不均衡处理的模型准确率都很高,都超过了98%,貌似模型都很好。但均衡处理后模型的特异性达到了73.68%,未采用均衡处理的模型只有36.84%,显然 均衡处理能提高模型的特异性

处理样本不均衡问题是做分类问题不可或缺的的一步,针对训练数据的情况,可以采用不同的均衡处理方法。均衡处理的目的是尽可能多的且高效的利用训练数据里的信息,不至于后续训练出的模型学习的不够充分,出现较大偏差。均衡处理对于既要求准确率高,又要求特异性高的模型来说尤为重要。

1.Linux与R的学习先后问题:

师姐说后面作生信分析要用Linux环境进行数据集群分析,所以目前首要任务是熟悉R语言和Python的操作,后面转到Linux环境运行操作大同小异。

2.R及Rstudio的安装问题:

装了Rstudio之后显示没有装R,解决方案是R和Rstudio安装时选择默认路径,是这两个软件装在同一个目录下。

3.输入demo()后显示

>demo()

Warning message:

In file.show(outFile, delete.file = TRUE, title = paste("R", tolower(x$title))) :

  file.show():不存在'C:\Users\灏忔湪浜榎AppData\Local\Temp\RtmpENM66s\RpackageIQR28b82f592cbb'这个文件

(1)找出问题:R存在一个中文目录底下,会出现错误,所以首先第一步要将文件名(即user底下的名字)改为英文的(注:以后文件名尽量设置为英文的,才方便识别)

(2)解决问题:因为win为家庭版,所以没有在计算机管理中没有找到本地用户和组,借鉴了CSDN论坛中一位大神经验贴的后半部分【 【设置】Win10如何更改C:\Users\下的用户名_胡振涛-CSDN博客_如何更改users下的用户名 】,从win+R输入regedit(打开注册表)那块开始,后面将自己中文的文件名改成英文就好了,然后注销再打开,运行R后,输入demo(),显示界面如下图。

4.options()是个啥,没整明白?

   options:指定系统参数

5. runif()函数

    runif (random samples from uniform distribution)  均匀分布中的随机变量

    例如:runif(242, min =-0.3,max=0.3) 从-0.3 到0.3 随机产生242个值

6.包及库

           1——已经安装的包

           2——用来放R安装时自带的包(如base,state等)

7.函数括号内加“”的规律:外部的东西要加引号。安装以后内部的东西不用加引号。

8.批处理命令打出来很奇怪?

9.返回值?——一个运算函数被赋予具体数据后得到值return到这个函数变量上(操作型函数没有返回值)

10.help(package="vcd"/"ggplot2"),命令后help界面无显示

未找到问题原因,解决方案为在CRAN上直接看好了。

11.安装ggplot2包后,输入library(ggplot2),没有反应——说明你装上了。。(有些包library成功是没有输出的)

相反的是可以看到如果安装的是tidyverse,输入library(tidyverse),是有输出的

12.Rstudio工作路径&库安装路径修改(我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《Rstudio更改工作路径&安装包路径》, 一起来围观吧 https://blog.csdn.net/princessyang/article/details/105731349?utm_source=app&app_version=4.7.1&code=app_1562916241&uLinkId=usr1mkqgl919blen)

工作路径修改

getwd()——得到目前的工作路径

setwd(“目标工作路径”)

getwd()——就可以看到路径更改了

库安装路径修改

打开

13.忘了在操作台输入啥可以显示那一长条的包了?

14.数据集和数据结构

    1)数据集就是多个数据组成的集合

    2)数据结构就是数据集的结构

15.rep函数

rep(1:4, each = 2)——1到4,每个element循环2次

[1] 1 1 2 2 3 3 4 4

rep(1:4, c(2,2,2,2))——1到4,对应位置上的element循环2次

[1] 1 1 2 2 3 3 4 4

rep(1:4, c(2,1,2,1))——1到4,对应位置上的element有的循环1次,有的循环2次

[1] 1 1 2 3 3 4  

16.rep(1,40*(1-.8))什么意思?

就是说1这个数字,重复40*(1-0.8)=8遍,但其实只重复7遍,因为计算机返回的结果比8稍小一点。

如果想要得到循环8次,可以使用这个函数:rep(1,round(40*(1-.8)))

17.矩阵

(1)只有在数据长度不是矩阵行数或者列数整数倍的时候才会报错,在矩阵列数X行数所需数据大于数据长度时,会再次重复排列数据,但不会报错。

(2)矩阵默认按照 列 的顺序来排列数据,

matrix(x,5,byrow = T) 按照 行 的顺序排列

 matrix(x,5,byrow = F) 按照 列 的顺序排列

(3)以字符型向量添加行名和列名

>rnames <- c("R1","R2","R3","R4")

>cnames <- c("C1","C2","C3","C4","C5")

>dimnames(m) <- list(rnames,cnames)

(4)矩阵汇总

(5)矩阵索引

y[1,2]——y矩阵中第1行,第2列

18.数组

以“.”开头的文件,通常用作配置,系统默认隐藏这类文件。

 “.Rdata”是保存工作空间的默认文件;

 “.history”是保存历史命令的默认文件。

如果打开Rstudio特别慢,可能是因为.Rdata保存了很大的变量,可以找到.Rdata文件将其删掉。

###各种找不到