R语言标准化(归一化)之scale()函数、sweep()函数

#数据集

x<-cbind(c(1,2,3,4),c(5,5,10,20),c(3,6,9,12))

 

#自己写标准化

x_min_temp<-apply(x,2,min) 
x_min<-matrix(rep(x_min_temp,4),byrow=TRUE,ncol=3)#需要输入行数和列数
abs(x-x_min)#当前值减去均值
x_extreme_temp<-apply(x,2,max)-apply(x,2,min)
x_extreme<-matrix(rep(x_extreme_temp,4),byrow=TRUE,ncol=3)#需要输入行数和列数
abs(x-x_min)/x_extreme
 

#sweep函数

center <- sweep(x, 2, apply(x, 2, min),'-') #在列的方向上减去最小值,不加‘-’也行
R <- apply(x, 2, max) - apply(x,2,min)   #算出极差,即列上的最大值-最小值
x_star<- sweep(center, 2, R, "/")        #把减去均值后的矩阵在列的方向上除以极差向量

#sweep函数更简洁、易懂,且不需要输入行数和列数,二者性能也差不多

#sweep再举一个例子哈
m<-matrix(c(1:9),byrow=TRUE,nrow=3)
#第一行都加1,第二行都加4,第三行都加7
sweep(m, 1, c(1,4,7), "+")  


#scale函数,这个比较简单,不多说
scale(x, center = TRUE, scale = TRUE)

有些地方说归一化,有些地方说标准化,万能的CSDN,谁能告诉我归一化和标准化的区别?

2019年补充,

归一化一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。
z-score适用于属性A的最大值和最小值未知的情况(此时归一化已经不合适了,哈哈),或有超出取值范围的离群数据的情况(此时归一化的效果也不好了,哈哈);该种方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕【这一条我也不是很确认】。

  • 11
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
LASSO(Least Absolute Shrinkage and Selection Operator)是一种广泛使用的线性回归模型正则化方法,可用于特征选择和模型简化。LASSO正则化通过惩罚大的权重,可以使得一些特征的权重为0,达到特征选择的效果。坐标下降算法是一种用于求解LASSO模型的优化算法,其基本思想是通过交替更新模型中的每个参数,直到达到收敛的目标。 下面是R语言的LASSO坐标下降算法代码实现: ```r lasso_cd <- function(X, y, lambda, alpha=1, tol=1e-6, max_iter=1000) { n <- nrow(X) p <- ncol(X) beta <- rep(0, p) beta_0 <- mean(y) y <- y - beta_0 X <- scale(X, center=TRUE, scale=FALSE) X <- sweep(X, 2, colMeans(X), "-") RSS <- sum(y^2) iter <- 0 converged <- FALSE while(!converged && iter < max_iter) { iter <- iter + 1 beta_old <- beta for(j in 1:p) { X_j <- X[,j] beta_j <- beta[j] r <- y - X %*% beta - beta_0 r <- r + X_j * beta_j corr <- cor(X_j, r) beta[j] <- soft_threshold(corr, lambda * alpha) if(beta[j] != 0) { r <- r + X_j * beta[j] } beta_0 <- mean(y - X %*% beta) } if(sum(abs(beta - beta_old)) < tol) { converged <- TRUE } } return(list(beta=beta, beta_0=beta_0)) } soft_threshold <- function(x, lambda) { if(x > lambda) { return(x - lambda) } else if(x < -lambda) { return(x + lambda) } else { return(0) } } ``` 其中,X为自变量的矩阵,y为因变量的向量,lambda为LASSO正则化的惩罚系数,alpha为L1正则化项的系数,tol为收敛的阈值,max_iter为最大迭代次数。函数返回的是beta和beta_0两个参数,分别代表模型的系数和截距。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值