在 MATLAB 中创建虚拟集以进行统计
Creating Dummy Sets in MATLAB for statistics
我正在考虑在 MATLAB 中创建虚拟集,首先我创建了一个随机变量数组,其中包含 10 个 min=5 和 max =10 的实例,这是我的代码 r = (10-5).*rand(10,1) + 5;
我需要帮助如何创建以下内容;
1:创建依赖于我的第一个正相关变量 (r) 的附加变量?
2:创建依赖于负相关的第一个变量 (r) 的附加变量?
3:创建球形数据集?
谢谢。
这很容易做到。就二维问题而言,表现出正相关的数据是那些独立值每增加一次输出明显增加的数据点r
。同样,对于负相关,独立值每增加一次,输出就会减少r
.
因此,您可以简单地定义类型为 y = mx + b
的直线方程,其中 m
和 b
是先验 。一旦你有了这些条款,你只需在这条线的顶部添加你想要的任何噪音来产生你的 "correlated" 噪音。因此,给定 m
和 b
,您将像这样解决前两个问题:
问题 #1
为 m
定义一个 正 斜率...类似于 m = 2
.
rng(123); %// For reproducibility
m = 2; %// Set positive slope
b = 4;
r = (10-5).*rand(10,1) + 5; %// Produce 10 random points
x = (1 : 10).'; %// Define x values from 1 - 10
y = m*x + b + r; %// Generate output and plot
plot(x, y, 'b.', 'MarkerSize', 16);
我们得到:
问题 #2
为 m
定义一个 负 斜率...类似于 m = -2
.
rng(123); %// For reproducibility
m = -2; %// Set positive slope
b = 4;
r = (10-5).*rand(10,1) + 5; %// Produce 10 random points
x = (1 : 10).'; %// Define x values from 1 - 10
y = m*x + b + r; %// Generate output and plot
plot(x, y, 'b.');
我们得到:
问题 #3
这实际上会更复杂一些。你应该做的是给定一个中心和一个半径,你只需生成一堆在圆内的二维坐标,然后随机检查是否满足圆的方程:
(x - x0)^2 + (y - y0)^2 <= r^2
如果是,那么我们保留这一点。将随机点生成集中在 -1 <= (x,y) <= 1
附近会更容易,然后我们检查半径是否小于 1 以满足我们的检查。一旦我们找到这些点,我们将按半径缩放这些点,然后将中心移动。请记住,rand
仅产生 [0,1]
之间的值。因此,要生成 [-1,1]
之间的值,我们乘以 2 并减去 1。
类似于:
rng(123);
pts = 2*rand(1000,2) - 1; %// Generate points between [-1,1]
dists = sum(pts.^2, 2); %// Find distances from the centre
pts(dists > 1, :) = []; %// Any values beyond radius of 1 filter
centre = [2 2]; %// Set centre and radius
radius = 5;
pts = radius*pts; %// Scale points by radius
pts = bsxfun(@plus, pts, centre); %// Move points over
plot(pts(:,1), pts(:,2), 'b.', 'MarkerSize', 16); %// Plot points and adjust viewing axis
axis([-10 10 -10 10])
我们得到:
我正在考虑在 MATLAB 中创建虚拟集,首先我创建了一个随机变量数组,其中包含 10 个 min=5 和 max =10 的实例,这是我的代码 r = (10-5).*rand(10,1) + 5;
我需要帮助如何创建以下内容;
1:创建依赖于我的第一个正相关变量 (r) 的附加变量?
2:创建依赖于负相关的第一个变量 (r) 的附加变量?
3:创建球形数据集?
谢谢。
这很容易做到。就二维问题而言,表现出正相关的数据是那些独立值每增加一次输出明显增加的数据点r
。同样,对于负相关,独立值每增加一次,输出就会减少r
.
因此,您可以简单地定义类型为 y = mx + b
的直线方程,其中 m
和 b
是先验 。一旦你有了这些条款,你只需在这条线的顶部添加你想要的任何噪音来产生你的 "correlated" 噪音。因此,给定 m
和 b
,您将像这样解决前两个问题:
问题 #1
为 m
定义一个 正 斜率...类似于 m = 2
.
rng(123); %// For reproducibility
m = 2; %// Set positive slope
b = 4;
r = (10-5).*rand(10,1) + 5; %// Produce 10 random points
x = (1 : 10).'; %// Define x values from 1 - 10
y = m*x + b + r; %// Generate output and plot
plot(x, y, 'b.', 'MarkerSize', 16);
我们得到:
问题 #2
为 m
定义一个 负 斜率...类似于 m = -2
.
rng(123); %// For reproducibility
m = -2; %// Set positive slope
b = 4;
r = (10-5).*rand(10,1) + 5; %// Produce 10 random points
x = (1 : 10).'; %// Define x values from 1 - 10
y = m*x + b + r; %// Generate output and plot
plot(x, y, 'b.');
我们得到:
问题 #3
这实际上会更复杂一些。你应该做的是给定一个中心和一个半径,你只需生成一堆在圆内的二维坐标,然后随机检查是否满足圆的方程:
(x - x0)^2 + (y - y0)^2 <= r^2
如果是,那么我们保留这一点。将随机点生成集中在 -1 <= (x,y) <= 1
附近会更容易,然后我们检查半径是否小于 1 以满足我们的检查。一旦我们找到这些点,我们将按半径缩放这些点,然后将中心移动。请记住,rand
仅产生 [0,1]
之间的值。因此,要生成 [-1,1]
之间的值,我们乘以 2 并减去 1。
类似于:
rng(123);
pts = 2*rand(1000,2) - 1; %// Generate points between [-1,1]
dists = sum(pts.^2, 2); %// Find distances from the centre
pts(dists > 1, :) = []; %// Any values beyond radius of 1 filter
centre = [2 2]; %// Set centre and radius
radius = 5;
pts = radius*pts; %// Scale points by radius
pts = bsxfun(@plus, pts, centre); %// Move points over
plot(pts(:,1), pts(:,2), 'b.', 'MarkerSize', 16); %// Plot points and adjust viewing axis
axis([-10 10 -10 10])
我们得到: