我正在考虑在MATLAB中创建虚拟集,首先我创建了一个包含10个min=5实例和max =10的随机变量数组,下面是我的代码r = (10-5).*rand(10,1) + 5;
--我需要关于如何创建以下内容的帮助;
1:创建与我的第一个变量(r)正相关的附加变量?
2:创建与我的第一个变量(r)负相关的附加变量?
3:创建一个sphare形状的数据集?
谢谢。
发布于 2015-02-16 19:10:06
这样做很简单。就二维问题而言,表现出正相关的数据是那些数据点,在这些数据点中,独立值r
的每增加一次,产出都会明显增加。同样,对于负相关性,独立值r
每增加一次,产出就会减少。
因此,您可以做的就是简单地定义一个y = mx + b
类型的直线方程,其中m
和b
是先验确定的。一旦您有了这些术语,您只需在这一行的顶部添加任何您想要的噪声,以生成您的“相关”噪声。因此,给定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 = -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])
我们得到:
https://stackoverflow.com/questions/28350113
复制相似问题