网站建设哪个最好,什么杭州seo公司,长春作网站,深鑫辉网站建设目录
特征缩放
1#xff0c;标准化-scale
2#xff0c;归一化-rescale
3#xff0c;行规范化
4#xff0c;数据平滑
特征变换
1. 非线性特征
2. 正态性变换
3. 连续变量离散
特征降维 特征缩放
不同数值型特征的数据量纲可能相差多个数量级#xff0c;这对很多…目录
特征缩放
1标准化-scale
2归一化-rescale
3行规范化
4数据平滑
特征变换
1. 非线性特征
2. 正态性变换
3. 连续变量离散
特征降维 特征缩放
不同数值型特征的数据量纲可能相差多个数量级这对很多数据模型会有很大 影响所以有必要做归一化处理就是将列或行对齐并转化为一致。
1标准化-scale
标准化也称为 Z 标准化将数据变成均值为 0, 标准差为 1。标准差离均差平方的算数平均数即方差的算数平方根。所以这里缩放的是数据的标准差而不是数据的范围。
R里常用scale函数
scale(x) # 标准化
scale(x, scale FALSE) # 中心化: 减去均值中心化后0 就代表均值更方便模型解释
示例
rm(list ls())
#生成随机数
set.seed(123)
data - runif(100, 1, 1000)#在1-1000中间生成100个随机数
data[1:10]
[1] 288.28994 788.51683 409.56794 883.13439 940.52682 46.51094 528.57738
[8] 892.52663 551.88358 457.15812#标准化
a - scale(data)
a[1:10]
[1] -0.7402982 1.0166700 -0.3143283 1.3489993 1.5505811 -1.5895088
[7] 0.1036736 1.3819880 0.1855330 -0.1471753
#中心化: 减去均值
b - scale(data, scale FALSE)
b[1:10]
[1] -210.77049 289.45640 -89.49249 384.07395 441.46638 -452.54949
[7] 29.51695 393.46619 52.82314 -41.90231data[1]-mean(data)#减去均值
[1] -210.7705
2归一化-rescale
归一化是将数据线性放缩到 [0, 1], 一般还同时考虑指标一致化将正向指标 值越大越好和负向指标值越小越好都变成正向。同时还涉及数据缩放。R语言数据缩放-1到1-CSDN博客 rescale function(x, type pos, a 0, b 1) {
rng range(x, na.rm TRUE)
switch (type,
pos (b - a) * (x - rng[1]) / (rng[2] - rng[1]) a,
neg (b - a) * (rng[2] - x) / (rng[2] - rng[1]) a)
}
探索
rm(list ls())
library(dplyr)
library(scales)
#生成随机数
set.seed(123)
data - runif(100, 1, 1000)#在1-1000中间生成100个随机数
data[1:5]
[1] 288.2899 788.5168 409.5679 883.1344 940.5268#缩放到-1到1之间
a - rescale(data,to c(-1, 1))
a[1:5]
[1] -0.4224240 0.5854362 -0.1780724 0.7760722 0.8917068
注意标准化和归一化是两种不同数据缩放的方法归一化Normalization是指将数据缩放到[0,1]的范围内公式为(x - min)/(max - min)其中x为原始数据min和max分别为数据集中的最小值和最大值。归一化后的数据分布在[0,1]之间适用于数据分布有明显边界的情况。
标准化Standardization是指将数据按照均值为0标准差为1的方式进行缩放公式为(x - mean)/std其中x为原始数据mean和std分别为数据集的均值和标准差。标准化后的数据分布在均值附近标准差为1适用于数据分布没有明显边界的情况。
区分规范化归一化标准化正则化 - 知乎 (zhihu.com)
3行规范化
行规范化常用于文本数据或聚类算法是保证每行具有单位范数即每行的 向量” 长度” 相同。想象一下 个特征下每行数据都是 维空间中的一 个点做行规范化能让这些点都落在单位球面上到原点的距离均为 1。行规范化一般采用 2 范数什么是范数norm以及L1,L2范数的简单介绍-CSDN博客
library(tidyverse)
data - iris
#前三行 行规范化(去除第5列的物种)
data1 - iris[1:3,-5] %%pmap_dfr(~ c(...) / norm(c(...), 2))
# A tibble: 3 × 4Sepal.Length Sepal.Width Petal.Length Petal.Widthdbl dbl dbl dbl
1 0.804 0.552 0.221 0.0315
2 0.828 0.507 0.237 0.0338
3 0.805 0.548 0.223 0.03434数据平滑
若数据噪声太多的问题通常就需要做数据平滑。 最简单的数据平滑方法是移动平均即用一定宽度的小窗口1滑过曲线会把 曲线的毛刺尖峰抹掉能一定程度上去掉噪声还原原本曲线。 窗口宽度越大平滑的效果越明显。理解就是使用 平均值代替波动值
比如五点平滑用前两点/自身/后两点共五点平均值代替自身因变量值
rm(list ls())
library(slider)
library(patchwork)
p1 economics %%ggplot(aes(date, uempmed)) geom_line()
p2 economics %% # 做五点移动平均mutate(uempmed slide_dbl(uempmed, mean,.before 2, .after 2)) %%ggplot(aes(date, uempmed)) geom_line()
p1 | p2 特征变换
1. 非线性特征
library(tidymodels)
recipe(hwy ~ displ cty, data mpg) %%
step_poly(all_predictors(), degree 2,
options list(raw TRUE)) %%
prep() %%
bake(new_data NULL)2. 正态性变换
对数变换或幂变换对于方差逐渐变大的异方差的时间序列数据或右偏分布的数据可以尝试做 对数变换或开根号变换以稳定方差和变成正态分布。
rm(list ls())
df mlr3data::kc_housing
p1 ggplot(df, aes(price)) geom_histogram()
p2 ggplot(df, aes(log10(price))) geom_histogram()
p1 | p2 对数变换特别有用因为具有可解释性对数值的变化是原始尺度上的相对 百分比变化。若使用以 10 为底的对数则对数刻度上每增加 1 对应原始 刻度上的乘以 10。
3. 连续变量离散
在统计和机器学习中有时需要将连续变量转化为离散变量称为连续变量离 散化或分箱常用于银行风控建模特别是线性回归或 Logistic 回归模型。
例子使得结果更便于分析和解释。比如年龄从中年到老年患高血压比例 增加 25%而年龄每增加一岁患高血压比例不一定有显著变化
rbin 包提供了简单的分箱方法
• rbin_manual(): 自定义分箱手动指定切分点左闭右开
• rbin_equal_length(): 等宽分箱
• rbin_equal_freq(): 等频分箱
• rbin_quantiles(): 分位数分箱
• rbin_winsorize(): 缩尾分箱不受异常值影响
特征降维
特征降维主要是PCA的补充-CSDN博客
PCA利用的是协方差矩阵的特征值分解原理实现多个特征向少量综合特征主成分的转化每个成分都是多个原始特征的线性组合且各个成分互补相关第一主成分用于解释数据变异 方差最大的第二主成分次之以此类推。
#鸢尾花主成分降维
rm(list ls())
data - irislibrary(recipes)
recipe(~.,datairis) %%step_normalize(all_numeric()) %%step_pca(all_numeric(),threshold 0.85)%%##设置阈值prep()%%bake(new_dataNULL)
————————————————
版权声明本文为CSDN博主「hx2024」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。
原文链接https://blog.csdn.net/hx2024/article/details/134402726
结果
# A tibble: 150 × 3 Species PC1 PC2 fct dbl dbl 1 setosa -2.26 -0.478 2 setosa -2.07 0.672 3 setosa -2.36 0.341 4 setosa -2.29 0.595 5 setosa -2.38 -0.645 6 setosa -2.07 -1.48 7 setosa -2.44 -0.0475 8 setosa -2.23 -0.222 9 setosa -2.33 1.11 10 setosa -2.18 0.467 # ℹ 140 more rows # ℹ Use print(n ...) to see more rows
感谢张敬信老师的书籍
参考
张敬信 老师的《R语言编程基于tidyverse》
为R语言正名之书《R语言编程基于tidyverse》正式上市 - 知乎 (zhihu.com)
张敬信老师投稿视频-张敬信老师视频分享-哔哩哔哩视频 (bilibili.com)
资源获取introR: 这是一本中文 R 语言入门书基于最新 tidyverse 包。 (gitee.com)
张敬信-1393页-R语言编程基于tidyverse-完整课件(带书签).pdf (gitee.com)