1. 程式人生 > >機器學習案例——梯度下降與邏輯迴歸簡單例項

機器學習案例——梯度下降與邏輯迴歸簡單例項

梯度下降例項

    下圖是f(x) = x2+3x+4 的函式影象,這是初中的一元二次函式,它的導數為g(x) = f(x) = 2x+3。我們很明確的知道,當x = -1.5時,函式取得最小值。

image

    下面就通過梯度下降法來計算函式取最小值時x的取值。

# @Desc  : 梯度下降計算函式的極小值

"""
f(x) = x^2 + 3x + 4
f(x)的導數  g(x) = 2x + 3
"""
def test():
    def derivative(x_pre):  # f(x)的導數
        return 2 * x_pre + 3

    x_pre = -5
# 初始值 x_now = 1 # 梯度下降初始值 alpha = 0.01 # 學習率,即步長 pression = 0.00001 # 更新的閥值 count = 0 # 統計迭代次數 while abs(x_now - x_pre) > pression: x_pre = x_now # x = x - αg(x),g(x)為f(x)的導數 x_now = x_pre - alpha * derivative(x_pre) count += 1 print(x_now) print(count) # 結果
-1.4995140741236221 423

    可以看出,已經非常逼近真實的極值-1.5了,總共經過了423次迭代,邏輯迴歸中的梯度下降也是這樣的,只不過函式沒這麼簡單而已。

邏輯迴歸例項

    自己在編寫程式碼過程中,使用的是機器學習案例——鳶尾花資料集分析中提到的鳶尾花資料集,我把其中一個類別刪除了,只留下了兩個類別。經過訓練後,得到引數如下圖所示。

image

    上面的資料有4個特徵,不太好展示,因此重新用了別人家的資料,程式碼無需變動。建議還是參考別人寫的更詳細(地址在文章末尾),最後得到的引數是下面這個樣子的,畫出來的擬合效果還是不錯的,為了不影響閱讀程式碼貼在最後了。

[[-0.47350404]
 [ 0.74213291]
 [-5.47457118]]

image

參考內容:

image

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

alpha = 0.001  # 學習率
iteration = 5000  # 迭代次數


# 載入資料集
def load_data():
    # 讀入資料
    df = pd.read_csv('test.csv')

    # 取label標籤
    Y_train = np.mat(df['class'])

    # 將行向量轉換為列向量
    Y_train = np.mat(Y_train)
    Y_train = Y_train.T

    # 刪除最後一列,即刪除標籤列
    df.drop('class', axis=1, inplace=True)

    # 新增一列,當b吧,方便計算,初始化為1
    df['new'] = 1
    X_train = np.mat(df)
    return X_train, Y_train


# 返回最後訓練的引數
def gradient_descent(X_train, Y_train):
    row, col = X_train.shape

    # 初始化,全為0
    W = np.zeros((col, 1))

    # 進行max_iteration次梯度下降
    for i in range(iteration):
        # 直接使用numpy提供的tanh函式
        h = np.tanh(np.dot(X_train, W))
        error = Y_train + h

        # 梯度下降
        W = W - alpha * np.dot(X_train.T, error)
    return W.getA()


# 這段程式碼來抄自https://github.com/apachecn/MachineLearning/blob/master/src/py2.x/ML/5.Logistic/logistic.pyu
def plot_show(W):
    X_train, Y_train = load_data()
    xcord1 = []
    ycord1 = []

    xcord2 = []
    ycord2 = []

    for i in range(X_train.shape[0]):
        if int(Y_train[i]) == 1:
            xcord1.append(X_train[i, 0])
            ycord1.append(X_train[i, 1])
        else:
            xcord2.append(X_train[i, 0])
            ycord2.append(X_train[i, 1])

    fig = plt.figure()

    ax = fig.add_subplot(111)
    ax.scatter(xcord1, ycord1, s=20, c='red', marker='s', alpha=.5)
    ax.scatter(xcord2, ycord2, s=20, c='green', alpha=.5)

    x = np.arange(-4.0, 5.0, 0.1)
    """
    函式原型是:f(x) = w0*x0 + w1*x1 + b
    x1在這裡被當做y值了,f(x)被算到w0、w1、b身上去了
    所以有:w0*x0 + w1*x1 + b = 0
    可以得到:(b + w0 * x) / -w1
    """
    y = (W[2] + W[0] * x) / -W[1]

    ax.plot(x, y)
    plt.title('BestFit')
    plt.xlabel('X1')
    plt.ylabel('X2')

    plt.show()


if __name__ == '__main__':
    X_train, Y_train = load_data()
    # print(Y_train)
    W = gradient_descent(X_train, Y_train)
    print(W)
    plot_show(W)

相關推薦

機器學習案例——梯度下降邏輯迴歸簡單例項

梯度下降例項     下圖是f(x) = x2+3x+4 的函式影象,這是初中的一元二次函式,它的導數為g(x) = f’(x) = 2x+3。我們很明確的知道,當x = -1.5時,函式取得最小值。     下面就通過梯度下降法來計算函式取最小值時x的

影象機器學習-1-梯度下降ubuntu

現值研一,進入了飛行器控制實驗室,在我迷茫不知學什麼的時候,這時候劉洋師兄帶著影象識別與跟蹤這個課題來到了我們面前,師兄傾其所有交給我們學習的方法和步驟與資料,第一節課,師兄給我們講解了影象識別與跟蹤以及機器學習或深度學習的應用和前景以及基本框架和概念。可以說帶領我進入了影象與機器學習的第一步。

機器學習筆記(一)邏輯迴歸多項邏輯迴歸

1.邏輯迴歸與多項邏輯迴歸 1.1什麼是邏輯迴歸? 邏輯迴歸,可以說是線上性迴歸的基礎上加上一個sigmoid函式,將線性迴歸產生的值歸一化到[0-1]區間內。sigmoid函式如下: ​

機器學習梯度下降演算法分析簡述

梯度下降演算法分析與簡述 梯度下降(gradient descent)是一種最優化演算法,基於爬山法的搜尋策略,其原理簡單易懂,廣泛應用於機器學習和各種神經網路模型中。在吳恩達的神經網路課程中,梯度下降演算法是最先拿來教學的基礎演算法。 梯度下降演算法的

Stanford機器學習 第三週:邏輯迴歸正則化

一、邏輯迴歸 1.1 分類問題 判斷一封電子郵件是否是垃圾郵件;判斷一次金融交易是否是欺詐;判斷腫瘤是惡性的還是良性的等屬於分類問題。 Eg:預測病人的腫瘤是惡性(malignant)還是良性(benign),用線性迴歸的方法擬合一條直線如圖 當hθ大於等於0.5時,預測 y

機器學習梯度下降法原理及用其解決線性迴歸問題的C語言實現

本文講梯度下降(Gradient Descent)前先看看利用梯度下降法進行監督學習(例如分類、迴歸等)的一般步驟: 1, 定義損失函式(Loss Function) 2, 資訊流forward propagation,直到輸出端 3, 誤差訊號back propagation。採用“鏈式法則”,求損失函式關

機器學習梯度下降

梯度 學習 模型 最快 參數 nbsp 函數 bsp 每一個 在吳恩達的機器學習課程中,講了一個模型,如何求得一個參數令錯誤函數值的最小,這裏運用梯度下降法來求得參數。 首先任意選取一個θ 令這個θ變化,怎麽變化呢,怎麽讓函數值變化的快,變化的小怎麽變化,那麽函數值怎麽才能

機器學習實戰(四)邏輯迴歸LR(Logistic Regression)

目錄 0. 前言 1. Sigmoid 函式 2. 梯度上升與梯度下降 3. 梯度下降法(Gradient descent) 4. 梯度上升法(Gradient ascent) 5. 梯度下降/上升法的數學推導

機器學習梯度下降gradient descent

視屏地址:https://www.bilibili.com/video/av10590361/?p=6  引數優化方法:梯度下降法  learning rate  learning rate : 選擇rate大小 1、自動調learning ra

機器學習筆記——梯度下降(Gradient Descent)

梯度下降演算法(Gradient Descent) 在所有的機器學習演算法中,並不是每一個演算法都能像之前的線性迴歸演算法一樣直接通過數學推導就可以得到一個具體的計算公式,而再更多的時候我們是通過基於搜尋的方式來求得最優解的,這也是梯度下降法所存在的意義。 不是一個機器學習演

吳恩達機器學習筆記——梯度下降

1:假設函式的引數更新要做到同時更新,即先將求得的引數放在統一的temp中,然後同時賦值給對應的引數w0,w1,w2,w3..... 2:特徵縮放和收斂速度問題 倘若,特徵向量中一些特徵值相差太大,就會導致代價函式特徵引數的函式曲線很密集,以至於需要多次迭代才能達到最小值。 學習率:決定

機器學習之--梯度下降演算法

貌似機器學習最繞不過去的演算法,是梯度下降演算法。這裡專門捋一下。 1. 什麼是梯度 有知乎大神已經解釋的很不錯,這裡轉載並稍作修改,加上自己的看法。先給出連結,畢竟轉載要說明出處嘛。為什麼梯度反方向是函式值區域性下降最快的方向? 因為高等數學都忘光了,先從導數/偏倒數/方向

【原】Andrew Ng斯坦福機器學習 Coursera—Programming Exercise 3 邏輯迴歸多分類和神經網路

作業說明 Exercise 3,Week 4,使用Octave實現手寫數字0-9的識別,採用兩種方式(1)邏輯迴歸多分類(2)三層神經網路多分類。對比結果。 每張圖片20px * 20px,也就是一共400個特徵(因為Octave裡從1開始。所以將0對映為10) (1)邏輯迴歸多分類:實現 lrCost

機器學習之用Python進行邏輯迴歸分析

前言 迴歸和分類方法是機器學習中經常用到的方法,本文首先介紹這兩種方法的區別和聯絡,然後對分類方法中的邏輯迴歸進行較詳細的說明(包括其基本原理及評估指標),最後結合案例介紹如何利用Python進行邏輯迴歸分析。 一、分類與迴歸 1.1什麼是分類和迴歸 區分迴歸問題

機器學習 scikit-learn2 模型實踐 - 邏輯迴歸

邏輯迴歸 - 目錄 1 簡介 1.1 程式碼下載 1.2 程式碼使用方法 3 核心程式碼說明 3.1 模型配置 3.2 模型訓練 3.3 輸出結果 1 簡介 1.1 程式

機器學習梯度下降法詳解

一、導數 導數 就是曲線的斜率,是曲線變化快慢的一個反應。 二階導數 是斜率變化的反應,表現曲線的 凹凸性 y

利用python實現梯度下降邏輯迴歸原理(Python詳細原始碼:預測學生是否被錄取)

本案例主要是:建立邏輯迴歸模型預測一個學生是否被大學錄取,沒有詳細介紹演算法推到, 讀者可查閱其他部落格理解梯度下降演算法的實現:https://blog.csdn.net/wangliang0633/article/details/79082901 資料格式如下:第三列表示錄取狀態,0--

Bobo老師機器學習筆記第五課-邏輯迴歸理論

1、什麼是邏輯迴歸?(Logistic Regresssion) 邏輯迴歸(Logistic Regression)是一種用於解決二分類(0 or 1)問題的機器學習方法,用於估計某種事物的可能性。邏輯迴歸既可以看做是一個迴歸演算法,也可以看作是一個分類問題,通常是用過分類,並且是二分類。 分類

機器學習作業-Logistic Regression(邏輯迴歸

ML課堂的第二個作業,邏輯迴歸要求如下: 資料集連結如下: 邏輯迴歸的關鍵是運用了sigmod函式,sigmod函式有一個很好的性質是其導函式很好求 函式影象: sigmod會將函式值對映到(0,1)區間內,將其輸出值看作是概率則有邏輯迴歸的二分類模型

機器學習3- 梯度下降(Gradient Descent)

1、梯度下降用於求解無約束優化問題,對於凸問題可以有效求解最優解 2、梯度下降演算法很簡單就不一一列,其迭代公式: 3、梯度下降分類(BGD,SGD,MBGD) 3.1 批量梯度下降法(Batch Gradient Descent)     批量梯度下降法,是梯度