线性回归和梯度下降

本文详细介绍了如何利用随机梯度下降算法实现多变量线性回归模型,通过核函数将属性映射到更高维空间,提高了模型的泛化能力。文章包含代码实现和可视化结果,展示了模型训练过程和最终预测效果。

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

# -*- coding: utf-8 -*-
import numpy as np
import mkdata as mk
import matplotlib.pyplot as plt
import random

N = 100
iterNums = 10000
#核函数 将属性(x1,x2)映射为(x1,x2,x1*x2,x1*x1,x2*x2)
def kernel(X,y):
    m,n = X.shape
    X_copy = np.zeros((m+3, n))
    
    X_copy[0]=X[0]
    X_copy[1]=X[1]
    
    for i in range(n):
        X_copy[2][i] = X[0][i]*X[1][i]
        X_copy[3][i] = X[0][i]*X[0][i]
        X_copy[4][i] = X[1][i]*X[1][i]
    return X_copy    

#随机梯度下降
def gradientDescent_stochastic(X,y):
    m,n = X.shape
    w = np.zeros(m)
    b = 0
    
    for i in range(iterNums):
        j = random.choice(range(n))
        w = w - (np.dot(w, X[:,j].T)+b - y[0][j])*X[:,j]
        b = b - (np.dot(w, X[:,j].T)+b-y[0][j])
    return w,b
  #批量梯度下降      
def gradientDescent_batch(X, y):
    
    
    m,n = X.shape
    w = np.zeros(m)
    b = 0
    
    for i in range(iterNums):
        diff = np.zeros(m)
        bb = 0
        for j in range(n):
            diff += (np.dot(w, X[:,j].T)+b-y[0][j])*X[:,j]
            bb += np.dot(w,X[:,j].T)+b-y[0][j]
        w = w - 0.01 * diff
        b = b - 0.01 * bb
    return w, b
    
if __name__ == "__main__":
    X,y,w = mk.mk_data(N)
    theta, bias = gradientDescent_batch(X,y)
    #theta, bias = gradientDescent_stochastic(X,y)
    plt.scatter(X[0,y[0]==1], X[1, y[0]==1], color='red')
    plt.scatter(X[0,y[0]==-1], X[1, y[0]==-1], color='g')
    
    x=np.arange(-2,2,0.1)
    x2 = (-bias-theta[0]*x)/theta[1]
    
    plt.plot(x,x2)
    
    plt.show()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值