• 使用正弦函数生成一个包含两个正弦周期的数据集(振幅可自行设定),从中均匀采样 20 个数据样本,对每个样本的目标变量 yi 添加一个随机的扰动值(扰动值不要太大),形成数据集 D1
时间: 2024-10-19 16:15:19 浏览: 38
生成一个包含两个正弦周期的数据集可以按照以下步骤操作:
1. **确定参数**:首先,你需要设定正弦函数的振幅(amplitude)、频率(frequency)、相位偏移(phase shift)以及数据集的起始角度(start angle)。假设振幅为A、频率为f、初始角度为θ。
2. **创建基本正弦波**:对于每个时间点t,你可以计算对应的正弦值,公式为 `y = A * sin(2 * π * f * t + θ)`。
3. **设置两个周期**:为了得到两个正弦周期,选择一个合适的间隔(如半个周期length),然后在每个周期内生成一些数据点,比如每隔`length / (2 * n_periods)`。
4. **采样数据**:均匀地从这两个周期之间抽取20个数据样本。例如,你可以将时间范围划分为20份,并取每个区间内的中心点作为数据点。
5. **添加随机扰动**:对于每个采样的yi值,生成一个小于某个阈值(比如正负0.1)的随机数,然后加上这个扰动。这样就得到了带扰动的目标变量yi。
具体实现Python代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 参数设定
A = 1.0 # 振幅
f = 1.0 # 频率
n_periods = 2 # 正弦周期数
time_length = 1 # 总时间长度
扰动范围 = 0.1 # 扰动的最大值
sample_points = 20 # 数据点数量
# 创建时间轴
t = np.linspace(0, time_length, sample_points)
# 计算基础正弦波
base_sine = A * np.sin(2 * np.pi * f * t)
# 两个周期的位置
periods = [i * time_length / n_periods for i in range(n_periods)]
# 在每个周期内采样
data = []
for period_start in periods:
data.extend(base_sine[period_start:period_start + len(t)])
# 添加随机扰动
perturbed_data = data.copy()
np.random.seed(42) # 设置随机种子保证每次结果一致
noise = np.random.uniform(-扰动范围, +扰动_range, size=len(data))
perturbed_data += noise
# 绘制原始数据和扰动后的数据
plt.figure()
plt.plot(t, base_sine, label="Base Sine")
plt.plot(t, perturbed_data, 'o', label="Data with Noise")
plt.legend()
plt.title("Two-Sinusoid Data Set D1")
plt.show()
D1 = list(zip(t, perturbed_data)) # 形成二维数据集
```
阅读全文