使用水平线来拟合模型

时间:2017-09-10 07:57:38

标签: python-3.x matplotlib machine-learning linear-regression

我正在使用水平线编写一个python代码,使用范围为[0,1]的函数sin(2.pi.x)来调查未命中。 我首先通过使用高斯分布添加一些随机噪声来生成N个数据点,其中μ= 0且sigma = 1。

   import matplotlib.pyplot as plt
   import numpy as np

   # generate N random points
   N=30
   X= np.random.rand(N,1)
   y= np.sin(np.pi*2*X)+ np.random.randn(N,1)

我需要使用水平线来拟合模型并显示它。但我不知道接下来该怎么做。 你能帮我解决这个问题吗?我很欣赏它。

2 个答案:

答案 0 :(得分:0)

根据我的理解,您会产生嘈杂的正弦波并尝试适合水平线?

import os
import fnmatch
import numpy as np
import matplotlib.pyplot as plt

# generate N random points
N=60
X= np.linspace(0.0,2*np.pi, num=N)
noise = 0.1 * np.random.randn(N)
y= np.sin(4*X) + noise

numer = sum([xi*yi for xi,yi in zip(X, y)]) - N * np.mean(X) * np.mean(y)
denum = sum([xi**2 for xi in X]) - N * np.mean(X)**2
b = numer / denum
A = np.mean(y) - b * np.mean(X)

y_ = b * X+ A

plt.plot(X,y)
plt.plot(X,y_)
plt.show()

答案 1 :(得分:0)

假设您要使用最小二乘损失函数,根据定义,您试图找到yhat最小化np.sum((y-yhat)**2)的值。通过yhat进行区分,您会发现最小值是在yhat = np.sum(y)/N实现的,当然只有y.mean(),而@ImportanceOfBeingErnest在评论中已经指出了这一点。

plt.scatter(X, y)
plt.plot(X, np.zeros(N) + np.mean(y))

Plot of mean