数据挖掘——梯度下降算法解决一元函数

一、问题描述

考虑一元目标函数

(1)写出目标函数F的

(2)初始值w=0,请画出梯度下降算法在最小化目标函数F的搜索轨迹。初始值w=2呢?

二、实验目的

学习梯度下降算法。

三、实验内容

1.数据导入:采用自动生成的数据

2.数据预处理:

四、实验结果及分析

(1)w = 0时

(2)w = 2时

五、完整代码

机器学习GitHub:https://github.com/wanglei18/machine_learning

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties      #步骤一
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)    #步骤二

def addLine(X):
    length = X.shape[0]         #矩阵第一维度的长度
    num = np.ones((length,1))
    for i in range(0, length):
        num[i] = i+1              #坐标轴 x
    X = np.c_[num, X]             #合并坐标轴
    return X

def printLine(x_name, y_name, title, X): #x轴,y轴,标题,矩阵
    plt.figure(1)
    plt.plot(X[:,0], X[:,1], 'bo', ms=3)    #蓝色散点
    plt.plot(X[:,0], X[:,1], 'b', ms=3, label='line1')    #蓝色实线
    plt.xlabel(x_name, fontproperties = font)   #步骤三
    plt.ylabel(y_name, fontproperties = font)
    plt.title(title, fontproperties = font)
    plt.show()
    return 0

N, eta = 20, 0.1
w = 2
y = np.ones((N, 1))     #[[1.] **** [1.]]总共20个
X = np.ones((N, 1))

for t in range(N):
    w = w - eta*2*(w-1/2)       #每一次迭代
    y[t] = w
    X[t] = w*w - w + 1        #原函数
y = addLine(y)               #一维数组转换成二维数组
X = addLine(X)
print("X = ", X)
print("y = ", y)
print("w = ", w)
printLine('N', 'W', 'W与N的关系图', y)
printLine('N', 'F(W)', 'F(W)函数图', X)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李逍遥~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值