美文网首页
R语言基础学习(一)

R语言基础学习(一)

作者: monkey_study | 来源:发表于2022-04-16 00:11 被阅读0次

    分享一下之前的笔记,顺带mark一下,减轻电脑存储负荷!

    R语言基础学习

    数据分析的过程
    数据采集(笔记,python等)
    数据存储
    数据分析(统计):使用统计方法,有目的地对收集到的数据进行分析处理,并且读取分析结果。
    数据挖掘:data mining,一般是指从大量的数据中通过算法搜索隐藏于其中信息的过程。数据挖掘算法:二元分类法,数据预测器,回归,贝叶斯网络,logistic回归,序列,时间序列,quest,C&R树,异常,特征选择,神经网络,K-mean,主成分分析/因子,SVM,genlin,Cox等
    数据可视化
    进行决策
    我们为什么要做数据分析?通过数据分析得出的结果来指导决策

    #数据  要分析与某事物相关的所有数据
    #       接受数据的复杂繁复
    #       关注数据之间的相关性
    #例子  啤酒与尿布   男性购买啤酒时,常常会购买小孩子尿布,通过大量数据分析,发现两者之间的相关性,所以放在一起
    #  路遥知马力,日久见人心    日子长了,对一个人的了解越来越多,即对这个人的数据更加了解,可以以此对他进行预测,判断。 
    #通过分析一个人的朋友圈内容,判断性格类型 
    #google利用大数据成功预测冬季流感
    
    
    
    

    数据可视化

    图形可以更好地展示工作效果或者更易让人理解

    R语言

    robert Gentleman(生物学家) and Ross Ihaka开发了R语言
    robert Gentleman(生物学家) 开发了bioconductor 用于生物统计

    #R用于计算
    x<-1:100
    min(x)
    max(x)
    mean(x)
    sd(x)  #计算方差
    ?sd
    sd(1:2) ^ 2
    getwd()  #获取当前工作路径
    options()   #更改默认设置
    .First    
    .Last
    # alt+ -   快速赋值快捷键
    #拟合方差分析模型   aov    analysis of variance model
    ?aov
    # microsoft R open  
    # R 语言分析步骤
    #数据收集,数据存储,数据分析,数据挖掘,数据可视化,进行决策
    # 数据集是粉色,蓝色是函数,表格是数据框,紫色的是包
    #runif() 函数用于生成从min到max区间范围内的服从正态分布的随机数。
    u<-runif(50,min = 1,max = 2)  
    dunif(u)==u
    

    操作小知识

    
    #工作台中使用 Esc键 进行中断
    # ctrl+ 向上箭头 可以查看之前的操作
    # Alt+shift+K 显示Rstudio中的所有快捷操作
    

    R基本操作####

    getwd()  #work directory  #查看当前工作路径
    setwd(dir = )  #设置更改工作路径,参数 dir="路径" 
    list.files()  #显示当前工作目录中的文件
    dir()  #显示当前工作目录中的文件
    a <- 3  # <- 赋值符号   快捷键 alt+ -
    mean(1,2,3,4,5)  #错误示例! #1
    mean(1:5)  #求取平均值 #3 参数 x为对象,na.rm=T/F ,是否去除NA缺失值
    ?mean
    ls()   #列出工作环境中的对象
    str(a)  #显示数据结构
    ls(all.names = T)  #参数显示所有对象的名称
    ?ls
    rm(list = ls())   #列出当前环境对象后,remove对象
    rm(a)  #rm 函数删除后,不能恢复 
    rm(a,b)  #删除多个对象的值
    history()  #列出历史记录
    # ctrl+L  清空工作台屏幕
    save.image()   #函数保留当前工作空间
    q()  #退出R软件
    

    R包的安装

    # 打开镜像站点时,选择据离自己最近的!
    install.packages("包的名称")  # 安装包
    BiocManager::install("",update = F,ask = F) #从bioconductor安装包
    library()  #不加参数查询已安装包
    .libPaths()  #显示包的库所在位置 #[1] "D:/R/R-4.1.2/library"
    library(package)  #加载包
    # R软件自带R包有:base,datasets,utils,grDevices,graphics,stats,methods,splines,
    # stats4,tcltk
    #键入函数的名称,tab键后,可查看函数对应来源的包 
    library(ggplot2)
    require(ggplot2)  #加载包
    help(package = "ggplot2")  #查看包的帮助文档
    require(CLL)
    detach(package:CLL)   #移除已加载的包  detach 解除绑定
    summary(CLL)
    remove.packages("CLL")   #从电脑上删除已安装的包,参数lib 以字符串向量形式给出包的安装目录
    ?remove.packages
    library(CLL)  #再次加载CLL包,显示不存在该包
    ?detach
    search()   #显示已加载且可用的包
    installed.packages()   #列出已安装的包,及版本号,依赖关系等
    update.packages()   #g更新已安装的包
    chooseCRANmirror()   #选择镜像站点
    chooseBioCmirror()  #选择镜像站点
    install.packages("vcd")   #用于可视化类别数据的包
    library(vcd)
    

    R包在不同设备间的移植

    installed.packages()   #查看已安装的包
    Npackage<- installed.packages()[,1]   #保存R包的名字为Npackage
    class(Npackage)   #类型为字符串
    save(Npackage,file = "./Name of package.Rdata")  #把文件存为Rdata文件
    load(file = "")   #加载对应路径的文件
    # for(i in Npackage){install.packages(i)}    使用该循环函数自动安装Npackage中的包
    ?sav
    

    R帮助文档的使用

    help.start()    #打开帮助文档  或者用ctrl+3
    ?mean   #查看帮助
    args(mean)   #列举出函数的默认参数  argument
    example("example")   #查看函数的示例
    example(mean)
    demo(graphics)   #查看函数的示例图片  demographic
    vignette()  #查看包的帮助文档
    library(ComplexHeatmap)
    vignette("ComplexHeatmap")   
    help.search("heatmap")   #检索本地包中的某个函数的帮助信息
    apropos("ggplot")   #函数返回一个字符串向量给出检索列表匹配的对象的名字,本地搜索
    apropos("ggplot",mod="function")   #搜索本地文件 ggplot函数(mod设定搜索类型为function)
    find("ggplot")  #返回给定名字的对象的位置,寻找函数对应的包!!!
    apropos("^.$")  #一个字母长度的物体   
    ?apropos
    ?RSiteSearch   #搜索帮助页面,背景插图或者任务视图中的关键词或者词组,在浏览器中的R语言官网搜索引擎中查看他们
    RSiteSearch("ComplexHeatmap",restrict = "vignette")  #连接到R官网,按照restrict限制类型搜索complexHeatmap对应信息
    # restrict参数有function,vignette,以及views
    # Rseek.org  网站   社群  可以问问题
    

    R内置数据集

    help(package = "datasets")  #打开datasets包的帮助文档
    data()   #显示内置数据集,列举可获得的数据集
    ?data
    rivers
    rivers<-c(1,2,3)
    rivers
    data("rivers")  #重新载入rivers数据集
    names(euro)   #输出向量的名字信息,用于获得或者设置对象的名字
    example("names")
    args(names)  #展示函数的参数
    ?names
    heatmap(volcano,cexRow = 0.4,cexCol = 0.4,scale ="row" )  #热图绘制函数
    #所有的参与热图的数值是否做Z-score处理,并且是对数值的每一列处理还是每一行处理。
    
    

    数据结构

    #数据类型
    # 数值型,可直接用于计算,加减乘除等
    # 字符串型,可以进行连接、转换、提取
    # 逻辑型,判断真假
    # 日期型等;
    ### 对象  :object,指可以赋值给变量的任何事物。包括常量,数据结构,函数,甚至图形。对象都具有某种模式,描述了此对象是如何存储的,以及某个类。
    sink("myoutput",append = T,split = T)  #发送R脚本到一个文件,append追加文本,split将输出同时发送到屏幕和输出文件中。
    # 数据集,行表示观测,列表示变量
    ?sink
    pdf("mygraphs.pdf")  #保存为pdf文件
    sink()
    dev.off()   #将数据返回终端
    getwd()
    data()
    ## 向量:vector,构成其他数据结构的基础。有一个或多个元素构成。用于存储数值型,字符串型或逻辑性数据的一组数组。
    # 由函数c来创建向量。
    a<-c(1,2,3)  #数值型向量
    typeof(a)
    class(a)
    y<-c("2",'3','4')  #字符型向量
    y
    class(y)
    m<- c(T,F,T)   #逻辑型向量
    class(m)
    ###其他创建向量的方式
    seq(from=1,to=100,by=4)
    seq(from=1,to=100)   #产生等差序列的函数
    rep(1,2)    #重复函数
    1:10   #从一到10
    # rep(x = 2,each=5,times=2)   2每个输出5个,重复2次
    mode(m)   #查看数据类型
    # 向量化编程
    x <- c(1,2,3,4,5)
    y<-c(7,7,8,9,10)
    x*2+y
    x[x>3]
    rep(x,c(2,4,6,1,3))   #对向量x进行重复,用向量控制x中每个元素重复次数
    

    向量索引

    ## 正整数索引
    x<-c(1:100)  #创建向量
    x  #输出x
    length(x)   #查看向量长度
    x[1]   #按照位置提取向量中的元素
    x[0]
    x[-19]   #访问第十九个元素以外的其他元素
    x[c(4:18)]   #访问x中对应向量位置的元素
    ## 逻辑值索引
    y <- c(1:10)
    y[c(T,F,T,F,T,F,T,F,T,F)]
    y[c(T)]
    y[c(T,F,T)]  #按照顺序对应循环判断并输出为T的元素
    y[rep(c(T,F,T),3)]
    y[y>2&y<7]
     # && 操作符仅用于长度为1的 vector,因此它只会返回 vector 中第一项的比较结果,即 FALSE。
    ### 字符串型向量元素的索引
    d<-c('1','3','4','sdw','dsdw')
    # %in% #用于判断元素是否在数据集中,返回逻辑值
    1%in% d 
    sdw %in% d
    d["dsdw"%in%d]
    d[d %in% c("1","3")]
    names(d)<-c(1,2,3)  #给向量d中的元素按照位置信息对应命名
    d
    ?names
    d["2"]   #通过名称访问数据集中的值,在后续的数据框中可通过列名,访问该列数据
    euro  #R内置数据中的一个向量
    euro["ATS"] 
    x
    x[101]<-101  #添加元素
    x
    p<-c(1:3)
    p[20]<-4  #在第20个位置上添加元素
    p
    append(p,values = 30,after = 3)   #在p的第三个元素后追加30
    rm(p)   #删除向量
    x<-x[-c(1:3)]   #删除向量中第1到3个元素
    x
    
    

    向量运算

    x+1  #向量x中的每个元素均加1
    x<-x-10
    y<-seq(1,5,3)
    y
    x
    x+y   #较短的y元素循环与x中的元素加和
    ## 逻辑运算
    x>5
    x<--6:6
    abs(x)  #计算绝对值
    sqrt(x)  #计算x的平方根
    log(x)   #对数
    exp(x)   #计算指数函数
    ceiling(c(-2.3,3.145))   #向上取整
    floor(c(2.6,3.1))  #向下取整
    trunc(c(2.6,3.1))   #返回整数部分
    round(c(1.6,3.45454),digits = 3)   #保留小数点位数,四舍五入
    signif(c(1.6,3.45454),digits = 3)  #与round函数类似
    sum()  #求和   min(x)   max()  mean()  均值
    var(x)    #求方差
    sd(x)  #求标准差
    round(sd(x),digits = 2)  #求标准差且结果保留2位小数
    prod(x)  #求取连乘的积
    median(x)  #求中位数
    quantile(x)  #求取四分位数
    quantile(x,c(0.2,0.3,0.6))  #分别计算20%,30%,60%位数
    t<-c(1,4,5,6,7)
    which(t==5)  #返回t等于5的值的位置
    

    矩阵

    # 矩阵(matrix)是一个按照长方阵列排列的复数或实数集合,是二维的,需要行与列。
    # 矩阵中的元素可以是数值型、逻辑型、字符型,但同一矩阵中的元素需要时同一个模式。
    x<-matrix(1:20,nrow = 4,ncol = 5)  #创建矩阵并赋值给x
    x #输出x
    class(x)  #查看数据类型 "matrix" "array" 
    rnames<-c(paste("R",1:4,sep = ""))
    cnames <- c(paste("C",1:5,sep = ""))
    x<-matrix(1:20,nrow = 4,byrow = T,dimnames = list(rnames,cnames))  #数据默认按照列排列,byrow=T调整为按照行排列,参数dimnames以列表形式为行列命名
    x
    dim(x)  #显示数据集的维度信息 4行5列
    x<-1:20
    dim(x) <- c(2,2,5)   #可以用来定义数据集的维度
    x  #此时x从向量变成了三维数组array
     class(x)  #[1] "array"
     ### 数组
     dim1 <- c("A1","A2")
     dim2<-c("B1","B2","B3")
     dim3 <- c("C1","C2","C3","C4")
     z <- array(1:24,dim = c(2,3,4),dimnames = list(dim1,dim2,dim3))
    z
    # 矩阵、数组数据的访问  #可以通过下标进行访问
    x[1,2,3]
    x[1,c(1,2),3]
    # 通过行列名提取数据
    x["C1"]
    colSums()   rowSums()   rowMeans()  #计算行列的和或者平均值
    #矩阵行列转置
    o<-matrix(1:30,5,6)
    t(o)  #从5行六列到 6行5列
    

    列表

    #列表就是一些对象的有序集合。可以是多个向量,矩阵,数据框甚至列表的组合。
    g<-"my first list"
    h <- c(25,18,24,34)
    j <- matrix(1:20,4,5)
    l<-c("noe","toe","wes")
    mylist <- list(g,h,j,l)
    mylist
    mylist <- list(title=g,sdsd=h,j,l)   #可以为列表中的对象命名
    mylist
    # 列表中的元素提取
    mylist[1]  #提取第一组字符串
    mylist[c(1,4)]  #用向量来提取多组数据(第一组和第四组数据)
    mylist$title   #数据框和list可以用$提取对应的数据
    mylist["title"]  #根据名称字符串提取数据
    class(mylist[1])  #使用一个中括号输出的数据类型依旧是list
    class(mylist[[1]])   #两个中括号可以访问list中存储的各类数据类型
    #对list中赋值的操作也要使用两个中括号!
    mylist$title <- NA  #使用该操作清空对应list的值
    mylist
    

    数据框

    ##数据框是比较规则的列表
    patientID <- c(1,2,3,4)
    age <- c(25,34,28,52)
    diabetes <- c(rep(c("Type1","Type2"),2))
    status <- c("Poor","Improved","Excellent","Poor")
    patientdata <- data.frame(patientID,age,diabetes,status)
    patientdata
    #数据框元素的选取
    patientdata[1:2]  #选取第一二列数据
    # 用$符号提取数据
    patientdata$patientID
    patientdata[c("diabetes","status")]  #列名字符串提取数据
    women
    lm(height~weight,data=women)     #构建线性模型
    ### attach detach with 函数
    str(patientdata)   #查看数据结构
    
    

    因子

    function (x = character(), levels, labels = levels, exclude = NA, 
        ordered = is.ordered(x), nmax = NA) 
    #因子,在R中名义行变量与有序性变量称为因子,factor。这些分类变量的可能值称为一个水平,level,例如good,better,best。由这些水平值构成的向量称为因子。
    diabetes <- factor(diabetes)   #因子的生成  因子是向量
    status <- factor(status,ordered = T) #有序性因子的生成
    patientdata<-data.frame(patientID,age,diabetes,status)
    str(patientdata)
    summary(patientdata) #显示连续型变量的最大小值,均值,四分位数,显示分类变量的频数值。
    table(patientdata$diabetes)   #对因子型向量进行频次统计
    week <- factor(c("Mon","Tus","Wen","For","Fri"),ordered = T,levels =c("Mon","Tus","Wen","For","Fri") )  #参数ordered 按照等级排序,levels 划分等级
    week
    plot(patientdata$diabetes)  #因子画出的图为直方图 ,分类变量,按照类别统计相应频数
    state.region
    class(state.region)  #factor
    plot(state.region)
    
    

    缺失值 NA

    1+NA  #[1] NA
    NA==0  #[1] NA
    # 缺失值会被保留和传送
    a <- c(NA,1:30)
    a
    sum(a) #[1] NA
    mean(a,na.rm=T)  #[1] 465   #去掉缺失值,并不纳入计算
    b <- c(1:30)
    mean(b)
    is.na(a)  #进行缺失值NA逻辑测试
    # na.omit()   去除缺失值
    #用于数据框,可以去除包含缺失值的行
    
    #### 处理缺失值的包
    #删除缺失值  #行删除  omit.na()  配对删除法
    # 最大似然估计 mvmle包
    # 插补缺失值    单个插补  Hmisc包   多重插补  Mi包,Mice包,amelia包
    # mitools包
    
    # 缺失数据NaN,代表不可能的值   
    # Inf无穷, 存在
    

    字符串

    nchar("hello world")  #统计字符串的长度
    month.name
    length(month.name)  #统计向量中字符串的个数
    nchar(month.name)  #统计每个字符串的长度
    nchar(c(12,2,342))  #将数值型向量中的元素按照字符串统计长度
    paste(c("ecerybody","loves","stats")) #[1] "ecerybody" "loves"     "stats"    
     #将向量中的字符串连接起来成为一个字符串
    paste("ecerybody","loves","stats")  #[1] "ecerybody loves stats"
    paste("ecerybody","loves","stats",sep ="_")  #sep参数 分隔符
    paste0("ecerybody","loves","stats")  #中间没有空隙的连接
    names <- c("jake","mark","lory")
    paste(names,"loves stats")  #names中的元素分别与loves stats相连接
    temp<-substr(month.name,start = 1,stop = 4)  #从字符串向量中提取子字符串向量
    toupper("temp")   #大写转换
    tolower("teEmp")  #小写转换
    ?sub  #首字母替换
    ?gsub  #全部匹配替换  ##需要学习正则表达式
    gsub("^(\\w)","\\U\\1",tolower(temp))   #每个字符串首位加了一个大写的U
    gsub("^(\\w)","\\U\\1",tolower(temp),perl = T)   #替换首字母大写
      # ^ 匹配一行的开头位置    \w匹配任意字符  () 限定多选结构的范围
    # \1  \2  匹配第一个    \U 大写
    x <- c("b","A+","AC")
    grep("A+",x,fixed = T)   #抓取x中包含A+的位置信息
    grep("A",x,fixed = F)  #抓取x中包含A的位置信息,+号表示之后的无穷任意字符
    match()   #与grep类似
    args(strsplit)
    function (x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE) 
    NULL
    strsplit("/usr/local/bin/R","/")
    #字符串分割函数   按照"/"对字符串进行分割
    class(strsplit("/usr/local/bin/R","/")) # "list"  输出值为list类型
    # stringr包
    ?stringr
    help(package="stringr")  #查看stringr包的帮助文档
    

    日期与时间

    ##时间序列数据  survival   timeseries包
    class(presidents)  #[1] "ts"  time series
    airmiles  #时间序列
    # Time Series:
    # Start = 1937 
    # End = 1960 
    # Frequency = 1 
    #  [1]   412   480   683  1052  1385  1418  1634  2178  3362  5948  6109
    # [12]  5981  6753  8003 10566 12528 14760 16769 19819 22362 25340 25343
    # [23] 29269 30514
    Sys.Date()  #查看当前系统的时间
    class(Sys.Date())  #[1] "Date"
    a <- "2017/07/02"
    a <- as.Date(a)  #将a从字符串转换为Date类型数据
    a
    class(a)  #[1] "Date" 
    

    读取文件

    args(read.table)
    function (file, header = FALSE, sep = "", quote = "\"'", 
        dec = ".", numerals = c("allow.loss", "warn.loss", 
            "no.loss"), row.names, col.names, as.is = !stringsAsFactors, 
        na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, 
        check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, 
        blank.lines.skip = TRUE, comment.char = "#", allowEscapes = FALSE, 
        flush = FALSE, stringsAsFactors = FALSE, fileEncoding = "", 
        encoding = "unknown", text, skipNul = FALSE) 
    head()   #读取前6行
    tail()   #读取后6行
    library(Hmisc)
    spss.get()    #导入spss数据
    library(foreign)
    read.dta()   #读入stata软件数据
    # foreign 包 读取各种文件
    x <- read.table("clipboard",header = T,sep = ",")  #读取剪切板上的文件
    readClipboard()   #读取剪切板信息
    read.table()   #直接读取压缩文件
    readlines()  #读取不标准的数据 
    

    写入文件

    cat()   #直接将结果显示到屏幕上
    ?write   #写入文件的一系列函数
    # append参数 表示追加文件
    # 压缩函数 gzfile(“.gz”)
    saveRDS()  #保存为Rdata文件
    readRDS()   #读取R文件
    load()   #加载文件
    

    数据类型转换

    methods(is)  #查看is函数
    args(subset)
    ?subset
    subset(airquality, Temp > 80, select = c(Ozone, Temp))  #输入数据类型为向量,矩阵或者数据框
    #参数 x 对象   subset 逻辑判断表达式   select 包含从一个数据框中选择的列
    ?sample  #随机抽样  replace参数,控制放不放回抽样
    x <- 1:100
    x<-sample(x,40,replace = T)
    x
    x<-sample(x,40,replace = F)   #不放回随机抽样,排序后有重复
    x<-sort(x)    #排序用order或者sort函数
    mtcars
    mtcars[-c(1:5),]  #删除一到五行的数据
    #数据框合并
    cbind(UScitiesD,)  #按照列合并
    data1<-head(USArrests,20)
    data2 <- tail(USArrests,20)
    rbind(data1,data2)     #按照行合并  !!! 要有相同的列数
    data2[duplicated(data2),]  #取出重复的部分
    unique(data2)  #去除重复的部分
    
    #### 数据框的翻转
    sractm<-t(mtcars)  #行列翻转
    sractm
    ?rev
    letters
    rev(letters)  #反转元素
    women
    rownames(women)
    rev(rownames(women))  #翻转行名
    women[rev(rownames(women)), ]  #使用反转的行名索引,提取数据
    transform(women,cm=height*2.54)   #对数据框的列进行修改或增加 。
    sort(rivers)  #排序为从小到大  ,只能用于向量,不能用于数据框
    mtcars[sort(rownames(mtcars)),]  #对每一行数据排序后索引
    ?order   #函数返回的是位置信息
    sort(rivers)
    order(rivers)
    rivers[8]
    order(mtcars$mpg)
    mtcars[order(mtcars$mpg),]
    ?rank   #秩次排序
    WorldPhones
    class(WorldPhones)#  "matrix" "array" 
    worldPhones<-as.data.frame(WorldPhones)
    rs<- rowSums(worldPhones)
    cm <- colMeans(worldPhones)
    total <- cbind(worldPhones,total=rs)
    total
    rbind(total,mean=cm)
    worldPhones
    ?apply  #输入  数据框或者矩阵
    apply(WorldPhones,1,FUN = sum)
    apply(WorldPhones,2,FUN = mean) 
    ?lapply   #返回值为list   sapply  返回值为向量或者矩阵
    state.center
    lapply(state.center,FUN = length)  #每个集合中50个值
    sapply(state.center,FUN = length)
    sapply(state.center,FUN = length)  #返回值为向量
    ?tapply
    state.division
    state.name
    tapply(state.name,state.division,FUN = length)   #每个州有多少个州的名字
    

    数据的中心化与标准化处理

    数据中心化,是指数据集中的各项数据减去数据集的均值。 x-的平均值
    数据标准化,是指在中心化之后再除以数据集的标准差,即数据集中的各项数据减去数据集的均值再除以数据集的标准差。Z-score=x-均值/标准差
     归一化:1)把数据变成(0,1)或者(1,1)之间的小数。
     (1)Min-Max Normalization
       x' = (x - X_min) / (X_max - X_min)
       (2)平均归一化
       x' = (x - μ) / (MaxValue - MinValue)
       (3)非线性归一化
      1)对数函数转换:y = log10(x)
      2)反余切函数转换:y = atan(x) * 2 / π
      (3)经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。
    目的:对数据中心化和标准化的目的是消除特征之间的差异性,可以使得不同的特征具有相同的尺度,让不同特征对参数的影响程度一致。通过中心化和标准化处理,得到均值为0,标准差为1的服从标准正态分布的数据。
    归一化和标准化的区别:归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种。标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。
    在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。
    2)KNN
      需要度量距离的模型,一般在特征值差距较大时,都会进行归一化/标准化。不然会出现“大数吃小数”
      4 什么时候用归一化?什么时候用标准化?
      (1)如果对输出结果范围有要求,用归一化。
      (2)如果数据较为稳定,不存在极端的最大最小值,用归一化。
      (3)如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。

    state.x77
    heatmap(state.x77)
    #中心化
    x <- c(1,2,3,6,3)
    mean(x)
    x-mean(x)   #[1] -2 -1  0  3  0
    sd(x)   #[1] 1.870829   求取标准差的函数
    {x-mean(x)}/sd(x)  #标准化
    ?scale
    args(scale)
    # function (x, center = TRUE, scale = TRUE)   center=T,中心化处理,sacle=T,标准化处理
    {x-min(x)}/(max(x)-min(x))  # 0.0 0.2 0.4 1.0 0.4   归一化 
    

    相关文章

      网友评论

          本文标题:R语言基础学习(一)

          本文链接:https://www.haomeiwen.com/subject/mfscertx.html