月光魔草

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

首先,导入一组数据,代码如下:

import numpy as np
import matplotlib.pyplot as plt

x, y = [], []
for sample in open("../_Data/prices.txt", "r"):
    _x, _y = sample.split(",")
    x.append(float(_x))
    y.append(float(_y))
x, y = np.array(x), np.array(y)
x = (x - x.mean()) / x.std()
plt.figure()
plt.scatter(x, y, c="g", s=6)
plt.show()

其中对导入数据进行处理:

  x.mean()是平均值,x.std()是标准差

def get_model(deg):
    return lambda input_x=x0: np.polyval(np.polyfit(x, y, deg), input_x)
 # 根据参数n、输入的x、y返回相对应的损失
def get_cost(deg, input_x, input_y):
    return 0.5 * ((get_model(deg)(input_x) - input_y) ** 2).sum()
test_set = (1,2,3,4)
for d in test_set:
# 输出相应的损失
    print(get_cost(d, x, y))
    
 # 画出相应的图像
plt.scatter(x, y, c="g", s=20)
for d in test_set:
    plt.plot(x0, get_model(d)(), label="degree = {}".format(d))
# 将横轴、纵轴的范围分别限制在(-2,4)、(〖10〗^5,8×〖10〗^5)
plt.xlim(-2, 4)
plt.ylim(1e5, 8e5)
# 调用legend方法使曲线对应的label正确显示
plt.legend()
plt.show()

应用如下模型对多项式进行拟合:

以下是拟合的结果,从图像中能得出,n取3时效果最好

 

posted on 2020-06-14 17:39  月光魔草  阅读(428)  评论(0编辑  收藏  举报