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

一、问题描述

考虑一元目标函数

(1)写出目标函数F的

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

二、实验目的

学习梯度下降算法。

三、实验内容

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

2.数据预处理:

四、实验结果及分析

(1)w = 0时

数据挖掘——梯度下降算法解决一元函数_第1张图片数据挖掘——梯度下降算法解决一元函数_第2张图片

(2)w = 2时

数据挖掘——梯度下降算法解决一元函数_第3张图片数据挖掘——梯度下降算法解决一元函数_第4张图片

五、完整代码

机器学习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)

你可能感兴趣的:(python,大数据处理,人工智能,算法,数据挖掘,r语言)