1.4 局部加权回归的正规方程推导及实现

本文介绍了一种使用高斯核函数计算权重的局部加权回归算法,通过定义正态分布函数和权重矩阵,实现了对输入数据的非线性拟合。文章详细展示了算法的实现过程,包括权重矩阵的计算、参数求解以及结果的可视化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

#定义维度
m=40
n=2

#定义一个正态分布,参数分别为均值,方差以及X的行向量
def guassianDistribution(mean,var,x):
    return 1/np.sqrt( 2 * np.pi * var )*np.exp( - (x-mean) ** 2 / (2*var) )

#传入一个m*n维矩阵,一个1*n维的矩阵,默认带宽参数为0.07
def getWeight(X,input_x,bd=0.07):
    W=np.identity(m)
    diff=X-input_x
    for i in range(m):
        W[i,i]=np.exp( diff[i]*diff[i].T/(-2* bd**2) )
    return W

def getTheta(X,Y,W):
    A=X.T * W * X
    B=X.T * W * Y
    # 求秩,需要判断下是否为奇异矩阵
    rank = np.linalg.matrix_rank(A)
    # 不是直接求解就行,是的话求最小二范数二乘解
    if rank == min(m, n):
        theta = np.linalg.solve(A, B)
    else:
        theta = np.linalg.lstsq(A, B)
    return theta

#定义输入矩阵,输出矩阵
X=np.mat([[1,x1] for x1 in np.random.rand(m)])
Y=np.mat(np.array([guassianDistribution(0.5,0.5,x) for x in X[:,1]])).T
input_x=np.mat([1,0.7])

#计算
theta=getTheta(X,Y,getWeight(X,input_x))

#画图
plt.scatter(np.array(X[:,1]),np.array(Y.T))
plt.plot(X[:,1],X*theta)
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值