【问题标题】:How to generate a polynomial dataset如何生成多项式数据集
【发布时间】:2021-11-01 08:19:20
【问题描述】:

我正在尝试生成一个多项式数据集。我写了一个代码

def generate_dataset1():
    n = 500
    X = 2 - 3 * np.random.normal(0, 1, n)
    y = X - 2 * (X ** 2) + 0.5 * ( X ** 3) + np.random.normal(-3, 3, n)
    m = np.random.uniform(0.3, 0.5, (n, ))
    b = np.random.uniform(5, 10, (n, ))
    
    plt.scatter(X, y, s=10)
    plt.show()

现在,如果我想使用给定的公式(来自Wikipedia)生成数据集,你能告诉我我需要改变什么吗?

y = B_0 + B_1*x, B_2*x2 + B_3*x3 + ... + e

这里,x2 表示 x (square)x3 表示 x (cube),以此类推,e 是均值为 0 的未观察到的随机误差。

【问题讨论】:

  • 这就是你所拥有的,只有 B_0、B_1 和 B_2 的常量。你有什么困惑?
  • 我将如何编写代码以将xB 相乘?因为,度数随着 x 的增加而增加。比如说,我必须将 B_0 与 x 相乘,但我必须将 B_1 与 x2 相乘。
  • 简单的方法是将其视为((B_3*x + B_2) * x + B_1) * x + B_0。你看到图案了吗?这就产生了一个三次方程。

标签: python python-3.x numpy regression


【解决方案1】:

xB 的乘法有很多种,例如点积。但我认为 for 循环应该足够好。只需遍历Bx 的元素即可:

def generate_dataset(B, n):
    # B is beta, n is number of sample

    e = np.random.normal(-3, 3, n)
    X = 2 - 3 * np.random.normal(0, 1, n)
    y = 0
    for i in range(len(B)):
        y += B[i] * X**i
    y += e
    return X, y

def plot_dataset(X, y):
    #m = np.random.uniform(0.3, 0.5, (n, ))    # not sure why you need this
    #b = np.random.uniform(5, 10, (n, ))    # not sure why you need this

    plt.scatter(X, y, s=10)
    plt.show()

n = 500
B = [0, 1, -2, 0.5]    # [beta0, beta1, beta2, beta3]
X, y = generate_dataset(B, 500)
plot_dataset(X, y)

【讨论】:

  • 出于好奇,如果我要使用np.dot,那怎么写呢?
  • 不确定,可能类似X= 1, x, x**2, x**3], axis=1),然后申请y = X @ B
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2018-03-16
  • 2019-04-23
  • 1970-01-01
  • 2011-01-10
相关资源
最近更新 更多