import numpy as np
import matplotlib.pyplot as plt
a = 0.5 # coefficient
b = 3 # intercept
noiseVar = 2 # 高斯noise的标准差
x = np.arange(1, 100, 1) # x为1到100的整数
# generate data
y = a * x + b + noiseVar * np.random.randn(x.size) # 在生成过程中加入高斯noise
通过上述代码,我们得到了100个相应的数据点。我们现在通过代码将得到的模拟数据和真模型绘制出来。
plt.plot(x, y, 'o', color='r', label='Data') # plot data
plt.plot(x, a*x+b, '-', color='k', label='True model') # plot tru model
plt.xlabel('Population (1000 ppl)')
plt.ylabel('House price (k yuan)')
plt.legend(fontsize=14)
plt.title('Linear model')
会得到如下图像:
若模型表达式变成了这样:
y=β0+β1x+β2x2+β3x3+⋯+βnxn+ϵ
其中,y表示因变量,x表示自变量,β表示系数,ϵ是误差项。
在此基础上,可以尝试将其改写为类似于线性模型的形式,即:
y=w0+w1x1+w2x2+⋯+wpxp+ϵ
其中:
w1=β1,w2=β2x,w3=β3x2
虽然这个模型可以用类似线性模型的方式书写表达式,但其本质上属于非线性模型。
示例:同样用当地人口预测城市房价,假设城市房价与当地人口存在以下关系:
y=ax2+bx+c
假设a = 0.5,b = 3,c = 5,生成模拟数据:
import numpy as np
import matplotlib.pyplot as plt
# Here We create data
a = 0.5 # coefficient1
b = 3 # coefficient1
c = 5 # intercept
noiseVar = 500 # noise的程度,增加了噪声大小以便观察
x = np.arange(-50, 100, 1)
# generate data
y = a * x**2 + b*x + c + noiseVar * np.random.randn(x.size)
由此我们获得了150个数据点,接下来我们绘制图像:
plt.plot(x, y, 'o', color='r', label='Data') # plot data
plt.plot(x, a * x**2 + b*x + c, '-', color='k', label='True model') # plot tru model
plt.xlabel('Population (1000 ppl)')
plt.ylabel('House price (k yuan)')
plt.legend(fontsize=14)
plt.title('Linearized model')
import numpy as np
import matplotlib.pyplot as plt
# Here We create data
noiseVar = 1 # noise的程度
x = np.arange(0.01, 3, 0.01)
# generate data
y = np.log(x) + noiseVar* np.random.randn(x.size)
我们同样得到了一系列数据点,随后我们绘制图像来直观显示模拟的结果:
plt.plot(x, y, 'o', color='r', label='Data') # plot data
plt.plot(x, np.log(x), '-', color='k', label='True model') # plot tru model
plt.xlabel('Population (1000 ppl)')
plt.ylabel('House price (k yuan)')
plt.legend(fontsize=14)
plt.title('Nonlinear model')