高端品牌网站有哪些,网站配色 要用什么原则,优秀网站建设哪个公司好,音乐主题资源网站建设一、分箱平滑的原理
#xff08;1#xff09;分箱方法
在分箱前#xff0c;一定要先排序数据#xff0c;再将它们分到等深#xff08;等宽#xff09;的箱中。 常见的有两种分箱方法#xff1a;等深分箱和等宽分箱。
等深分箱#xff1a;按记录数进行分箱#xff0…一、分箱平滑的原理
1分箱方法
在分箱前一定要先排序数据再将它们分到等深等宽的箱中。 常见的有两种分箱方法等深分箱和等宽分箱。
等深分箱按记录数进行分箱每箱具有相同的记录数每箱的记录数称为箱的权重也称箱子的深度。 等宽分箱在整个属性值的区间上平均分布即每个箱的区间范围设定为一个常量称为箱子的宽度。
2数据平滑
将数据划分到不同的箱子之后可以运用如下三种策略对每个箱子中的数据进行平滑处理
平均值平滑箱中的每一个值被箱中数值的平均值替换。 中值平滑箱中的每一个值被箱中数值的中值替换。 边界平滑箱中的最大值和最小值称为箱子的边界箱中的每一个值被最近的边界值替换。
二、Matlab代码实现
首先用rand()函数随机生成20*5的矩阵其数据范围为[0,1]。
1.等深分箱
clear;clc; % 清除变量和命令窗口Arand(20,5); % 随机生成20*5的矩阵其中每个数取值范围[0,1]
fprintf(当前生成的原数据\n);
disp(A);% 排序参数1表示按列排序取2为按行排序ascend为升序descend为降序
Asort(A,1,ascend);
fprintf(将原数据的每列排序后\n);
disp(A);hinput(请输入等深分箱的深度h(1h20));% 检查输入变量h是否有效
if ~isnumeric(h) || ~isscalar(h) || h1 || h20 || h~floor(h)error(输入变量h必须是一个大于1小于20的正整数);
end%% 对每列进行等深分箱然后求每个箱子的均值
[n,m]size(A); % n行m列
Bzeros(n,m); % 预分配输出变量B
for j1:m % 列jfor i1:h:n % 行i% 当前箱子第一个数位置为i最后一个数位置为min(ih-1,n)p1int64(i); % 转换成整数(i默认是double类型但是索引必须要为整数)p2int64(min(ih-1,n));B(p1:p2,j)mean(A(p1:p2,j)); % 当前箱子的均值end
end % 结束行循环fprintf(\n经过等深分箱用箱均值平滑处理后的数据\n);
disp(B);for i1:h:n 的含义是 i 是一个循环变量它的初始值是 1。h 是一个输入变量它表示等深分箱的深度。n 是一个由 size 函数得到的变量它表示矩阵 A 的行数。这个循环的作用是从第一行开始每隔 h 行取一行作为一个箱子的起始位置然后计算这个箱子中所有元素的均值并赋给输出矩阵 B 的相应位置。 isnumeric 函数是一个用于判断输入是否为数值数组的函数。数值数组是指由数值类型的元素组成的数组例如整数、浮点数、无穷大或非数字。MATLAB 中的数值类型包括 int8, int16, int32, int64, uint8, uint16, uint32, uint64, single, 和 double。 isnumeric 函数的语法格式是 TF isnumeric(A)其中A 是输入数组可以是任意维度的TF 是输出逻辑值如果 A 是数值数组则返回 1 (true)否则返回 0 (false)。 例如如果 A 是一个包含整数和浮点数的矩阵那么 isnumeric(A) 将返回 1如果 A 是一个包含字符串或单元数组的矩阵那么 isnumeric(A) 将返回 0。 ~isscalar(h) 函数是一个逻辑表达式它用于判断 h 是否不是一个标量。标量是一个大小为 1×1 的二维数组也就是一个单个的数值。如果 h 不是一个标量那么 ~isscalar(h) 将返回 1 (true)否则返回 0 (false)。 python代码为
import numpy as np # 导入 numpy 库
A np.random.rand(20,5) # 随机生成 20*5 的矩阵其中每个数取值范围 [0,1]
print(当前生成的原数据)
print(A)# 排序参数 0 表示按列排序取 1 为按行排序ascend 为升序descend 为降序
A np.sort(A, axis0, kindquicksort) # 使用快速排序算法
print(将原数据的每列排序后)
print(A)h int(input(请输入等深分箱的深度 h (1h20))) # 输入一个整数# 检查输入变量 h 是否有效
if not isinstance(h, int) or h 1 or h 20: # 如果 h 不是一个大于 1 小于 20 的整数raise ValueError(输入变量 h 必须是一个大于 1 小于 20 的正整数) # 抛出异常# 对每列进行等深分箱然后求每个箱子的均值
n, m A.shape # n 行 m 列
B np.zeros((n,m)) # 预分配输出变量 B
for j in range(m): # 列 jfor i in range(0, n, h): # 行 i# 当前箱子第一个数位置为 i最后一个数位置为 min(ih,n)p1 int(i) # 转换成整数 (i 默认是 double 类型但是索引必须要为整数)p2 int(min(ih,n))B[p1:p2,j] np.mean(A[p1:p2,j]) # 当前箱子的均值print(\n经过等深分箱用箱均值平滑处理后的数据)
print(B)代码运行结果
输入的深度为3
当前生成的原数据
A 0.4067 0.4504 0.5747 0.5154 0.99690.6669 0.2057 0.3260 0.6575 0.55350.9337 0.8997 0.4564 0.9509 0.51550.8110 0.7626 0.7138 0.7223 0.33070.4845 0.8825 0.8844 0.4001 0.43000.7567 0.2850 0.7209 0.8319 0.49180.4170 0.6732 0.0186 0.1343 0.07100.9718 0.6643 0.6748 0.0605 0.88770.9880 0.1228 0.4385 0.0842 0.06460.8641 0.4073 0.4378 0.1639 0.43620.3889 0.2753 0.1170 0.3242 0.82660.4547 0.7167 0.8147 0.3017 0.39450.2467 0.2834 0.3249 0.0117 0.61350.7844 0.8962 0.2462 0.5399 0.81860.8828 0.8266 0.3427 0.0954 0.88620.9137 0.3900 0.3757 0.1465 0.93110.5583 0.4979 0.5466 0.6311 0.19080.5989 0.6948 0.5619 0.8593 0.25860.1489 0.8344 0.3958 0.9742 0.89790.8997 0.6096 0.3981 0.5708 0.5934将原数据的每列排序后
A 0.1489 0.1228 0.0186 0.0117 0.06460.2467 0.2057 0.1170 0.0605 0.07100.3889 0.2753 0.2462 0.0842 0.19080.4067 0.2834 0.3249 0.0954 0.25860.4170 0.2850 0.3260 0.1343 0.33070.4547 0.3900 0.3427 0.1465 0.39450.4845 0.4073 0.3757 0.1639 0.43000.5583 0.4504 0.3958 0.3017 0.43620.5989 0.4979 0.3981 0.3242 0.49180.6669 0.6096 0.4378 0.4001 0.51550.7567 0.6643 0.4385 0.5154 0.55350.7844 0.6732 0.4564 0.5399 0.59340.8110 0.6948 0.5466 0.5708 0.61350.8641 0.7167 0.5619 0.6311 0.81860.8828 0.7626 0.5747 0.6575 0.82660.8997 0.8266 0.6748 0.7223 0.88620.9137 0.8344 0.7138 0.8319 0.88770.9337 0.8825 0.7209 0.8593 0.89790.9718 0.8962 0.8147 0.9509 0.93110.9880 0.8997 0.8844 0.9742 0.9969请输入等深分箱的深度h(1h20)3经过等深分箱用箱均值平滑处理后的数据
B 0.2615 0.2013 0.1273 0.0521 0.10880.2615 0.2013 0.1273 0.0521 0.10880.2615 0.2013 0.1273 0.0521 0.10880.4262 0.3195 0.3312 0.1254 0.32790.4262 0.3195 0.3312 0.1254 0.32790.4262 0.3195 0.3312 0.1254 0.32790.5472 0.4519 0.3899 0.2633 0.45270.5472 0.4519 0.3899 0.2633 0.45270.5472 0.4519 0.3899 0.2633 0.45270.7360 0.6490 0.4443 0.4851 0.55410.7360 0.6490 0.4443 0.4851 0.55410.7360 0.6490 0.4443 0.4851 0.55410.8526 0.7247 0.5611 0.6198 0.75290.8526 0.7247 0.5611 0.6198 0.75290.8526 0.7247 0.5611 0.6198 0.75290.9157 0.8478 0.7031 0.8045 0.89060.9157 0.8478 0.7031 0.8045 0.89060.9157 0.8478 0.7031 0.8045 0.89060.9799 0.8979 0.8495 0.9626 0.96400.9799 0.8979 0.8495 0.9626 0.96402.等宽分箱
输入箱子的宽度w(0w1)将每列按等宽分箱然后用箱均值平滑。
clear;clc; % 清除变量和命令窗口%Arand(20,5); % 随机生成20*5的矩阵其中每个数取值范围[0,1]
A[ 0.5038 0.3600 0.6690 0.1432 0.94190.6128 0.4542 0.5002 0.5594 0.65590.8194 0.3864 0.2180 0.0046 0.45190.5319 0.7756 0.5716 0.7667 0.83970.2021 0.7343 0.1222 0.8487 0.53260.4539 0.4303 0.6712 0.9168 0.55390.4279 0.6938 0.5996 0.9870 0.68010.9661 0.9452 0.0560 0.5051 0.36720.6201 0.7842 0.0563 0.2714 0.23930.6954 0.7056 0.1525 0.1008 0.57890.7202 0.1093 0.0196 0.5078 0.86690.3469 0.3899 0.4352 0.5856 0.40680.5170 0.5909 0.8322 0.7629 0.11260.5567 0.4594 0.6174 0.0830 0.44380.1565 0.0503 0.5201 0.6616 0.30020.5621 0.2287 0.8639 0.5170 0.40140.6948 0.8342 0.0977 0.1710 0.83340.4265 0.0156 0.9081 0.9386 0.40360.8363 0.8637 0.1080 0.5905 0.39020.7314 0.0781 0.5170 0.4406 0.3604];
fprintf(当前生成的原数据\n);
disp(A);
% 排序参数1表示按列排序取2为按行排序ascend为升序descend为降序
Asort(A,1,ascend);
fprintf(将原数据的每列排序后\n);
disp(A);winput(请输入等宽分箱的宽度w(0w1));
% 检查输入变量w是否有效
if ~isnumeric(w) || ~isscalar(w) || w0error(输入变量w必须是一个大于0小于1的正数);
end%% 对每列进行等宽分箱然后求每个箱子的均值
[n,m]size(A); % n行m列
Bzeros(n,m); % 预分配输出变量B
for j1:m % 列jpos1; % 当前箱子第一个数的位置A(n1,j)18e9; % 保证in1时A(i,j)-A(pos,j)w一定成立for i1:n1 % 行iif A(i,j)-A(pos,j)w % 当前箱子最后一个数的位置为i-1B(pos:i-1,j)mean(A(pos:i-1,j)); % 当前箱子的均值posi; % 更新为下一个箱子的第一个数的位置endend
endfprintf(\n经过等宽分箱用箱均值平滑处理后的数据\n);
disp(B); if A(i,j)-A(pos,j)w 这段代码的作用是判断当前元素是否属于当前箱子。如果当前元素与当前箱子的第一个元素的差大于 w那么说明当前元素已经超出了当前箱子的范围需要开始新的一个箱子如果不大于 w那么说明当前元素还在当前箱子内继续循环。 代码运行结果
输入的宽度为0.2
当前生成的原数据
A 0.5038 0.3600 0.6690 0.1432 0.94190.6128 0.4542 0.5002 0.5594 0.65590.8194 0.3864 0.2180 0.0046 0.45190.5319 0.7756 0.5716 0.7667 0.83970.2021 0.7343 0.1222 0.8487 0.53260.4539 0.4303 0.6712 0.9168 0.55390.4279 0.6938 0.5996 0.9870 0.68010.9661 0.9452 0.0560 0.5051 0.36720.6201 0.7842 0.0563 0.2714 0.23930.6954 0.7056 0.1525 0.1008 0.57890.7202 0.1093 0.0196 0.5078 0.86690.3469 0.3899 0.4352 0.5856 0.40680.5170 0.5909 0.8322 0.7629 0.11260.5567 0.4594 0.6174 0.0830 0.44380.1565 0.0503 0.5201 0.6616 0.30020.5621 0.2287 0.8639 0.5170 0.40140.6948 0.8342 0.0977 0.1710 0.83340.4265 0.0156 0.9081 0.9386 0.40360.8363 0.8637 0.1080 0.5905 0.39020.7314 0.0781 0.5170 0.4406 0.3604将原数据的每列排序后
A 0.1565 0.0156 0.0196 0.0046 0.11260.2021 0.0503 0.0560 0.0830 0.23930.3469 0.0781 0.0563 0.1008 0.30020.4265 0.1093 0.0977 0.1432 0.36040.4279 0.2287 0.1080 0.1710 0.36720.4539 0.3600 0.1222 0.2714 0.39020.5038 0.3864 0.1525 0.4406 0.40140.5170 0.3899 0.2180 0.5051 0.40360.5319 0.4303 0.4352 0.5078 0.40680.5567 0.4542 0.5002 0.5170 0.44380.5621 0.4594 0.5170 0.5594 0.45190.6128 0.5909 0.5201 0.5856 0.53260.6201 0.6938 0.5716 0.5905 0.55390.6948 0.7056 0.5996 0.6616 0.57890.6954 0.7343 0.6174 0.7629 0.65590.7202 0.7756 0.6690 0.7667 0.68010.7314 0.7842 0.6712 0.8487 0.83340.8194 0.8342 0.8322 0.9168 0.83970.8363 0.8637 0.8639 0.9386 0.86690.9661 0.9452 0.9081 0.9870 0.9419请输入等宽分箱的宽度w(0w1)0.2经过等宽分箱用箱均值平滑处理后的数据
B 0.2352 0.0633 0.1038 0.1005 0.21740.2352 0.0633 0.1038 0.1005 0.21740.2352 0.0633 0.1038 0.1005 0.21740.5213 0.0633 0.1038 0.1005 0.43120.5213 0.3413 0.1038 0.1005 0.43120.5213 0.3413 0.1038 0.3560 0.43120.5213 0.3413 0.1038 0.3560 0.43120.5213 0.3413 0.1038 0.5610 0.43120.5213 0.4837 0.5373 0.5610 0.43120.5213 0.4837 0.5373 0.5610 0.43120.5213 0.4837 0.5373 0.5610 0.43120.5213 0.4837 0.5373 0.5610 0.43120.5213 0.7702 0.5373 0.5610 0.43120.7496 0.7702 0.5373 0.5610 0.63830.7496 0.7702 0.5373 0.8467 0.63830.7496 0.7702 0.7591 0.8467 0.63830.7496 0.7702 0.7591 0.8467 0.87050.7496 0.7702 0.7591 0.8467 0.87050.7496 0.7702 0.7591 0.8467 0.87050.9661 0.9452 0.9081 0.9870 0.8705