资源简介

神经网络拟合曲线

资源截图

代码片段和文件信息

import numpy as np
import matplotlib.pyplot as plt
from multiprocessing import Process Lock Array
import time


def load_data(filename):
    “““载入数据。“““
    xys = []
    with open(filename ‘r‘) as f:
        for line in f:
            xys.append(map(float line.strip().split()))
        xs ys = zip(*xys)
        return np.asarray(xs) np.asarray(ys)

def identity_basis(x):
    ret = np.expand_dims(x axis=1)
    return ret



def gaussian_basis(x feature_num=20):
    ‘‘‘高斯基函数‘‘‘
    #==========
    #todo ‘‘‘请实现高斯基函数‘‘‘
    ret_x = np.expand_dims(x axis=1)
    max_x = np.max(x)
    min_x = np.min(x)
    line_number = ret_x.shape[0]
    l = (max_x-min_x)/19
    u = np.zeros((line_number20)dtype=float)
    for j in range (020):
        u[:j] = min_x+l*j
    ret = np.zeros((line_number20)dtype=float)
    for j in range(020):
        for i in range(0line_number):
            ret[ij]=np.exp(-((ret_x[i:]-u[ij])*(ret_x[i:]-u[ij]))/(l*l))
    #==========
   
    return ret




def main(x_train y_train):
    “““
    训练模型,并返回从x到y的映射。
    
    “““
    #basis_func = identity_basis
    basis_func = gaussian_basis
   
    phi0 = np.expand_dims(np.ones_like(x_train) axis=1)
    phi1 = basis_func(x_train)
    phi = np.concatenate([phi0 phi1] axis=1)
    #==========
    #todo ‘‘‘计算出一个优化后的w,请分别使用最小二乘法以及梯度下降两种办法优化w‘‘‘
    w = np.zeros((21)dtype=float)
    w = np.linalg.inv((np.transpose(phi)).dot(phi)).dot(np.transpose(phi)).dot(np.transpose(y_train))
    #==========

    
    def f(x):
        phi0 = np.expand_dims(np.ones_like(x) axis=1)
        phi1 = basis_func(x)
        phi = np.concatenate([phi0 phi1] axis=1)
        
        y = np.dot(phi w)
        return y
        pass

    return f

def evaluate(ys ys_pred):
    “““评估模型。“““
    std = np.sqrt(np.mean(np.abs(ys - ys_pred) ** 2))
    return std

# 程序主入口(建议不要改动以下函数的接口)
if __name__ == ‘__main__‘:
    train_file = ‘train.txt‘
    test_file = ‘test.txt‘
    # 载入数据
    x_train y_train = load_data(train_file)
    x_test y_test = load_data(test_file)


    # 使用线性回归训练模型,返回一个函数f()使得y = f(x)
    f = main(x_train y_train)

    y_train_pred = f(x_train)
    std = evaluate(y_train y_train_pred)
    print(‘训练集预测值与真实值的标准差:{:.1f}‘.format(std))
    
    # 计算预测的输出值
    y_test_pred = f(x_test)
    # 使用测试集评估模型
    std = evaluate(y_test y_test_pred)
    print(‘预测值与真实值的标准差:{:.1f}‘.format(std))

    #显示结果
    plt.plot(x_train y_train ‘ro‘ markersize=3)
    plt.plot(x_test y_test ‘k‘)
    plt.plot(x_test y_test_pred ‘k‘)
    plt.xlabel(‘x‘)
    plt.ylabel(‘y‘)
    plt.title(‘Linear Regression‘)
    plt.legend([‘train‘ ‘test‘ ‘pred‘])
    plt.show()

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2975  2020-11-04 22:01  linear-model.py
     文件        3580  2020-10-29 09:43  test.txt
     文件        5315  2020-10-29 09:43  train.txt

评论

共有 条评论