1. 程式人生 > >機器學習->監督學習->logistic迴歸,softMax迴歸

機器學習->監督學習->logistic迴歸,softMax迴歸

本篇博文來總結一下回歸模型裡面兩個非常重要的模型。

  • logistic迴歸
  • softMAX迴歸

Logistic迴歸

logistics迴歸雖然有“迴歸”兩字但是卻是分類模型,並且是個二分類模型。

logistics迴歸是個線性分類模型,有著線性的決策邊界,但是有著非線性的啟用函式去估計後驗概率。

下面就從數學層面講講logistics迴歸。
首先介紹下sigmoid函式
這裡寫圖片描述

其函式影象:
這裡寫圖片描述

顯然sigmoid函式只能取得0到1之間的數。
線性分類有著線性的決策邊界,類似於下圖:
這裡寫圖片描述

對於線性邊界,邊界決策函式:
這裡寫圖片描述

構造預測函式:
這裡寫圖片描述

現在以此作為二分類分類標準,下面分別是為類別1,類別0的概率:
這裡寫圖片描述

綜上:
這裡寫圖片描述

在衡量模型好壞方面除了構造合理的損失函式外還可以通過最大似然估計,即是用似然函式來進行引數估計。

似然函式(獨立作積):
這裡寫圖片描述

最大似然函式(目標函式):
這裡寫圖片描述

上式其實就是將crossentropy 的公式取負:

L=p(x)log(q(x))
用來衡量兩種分佈的擬合程度,如果p(x)q(x) 為兩種相同的分佈,則其crossentropy 為0。

最大化MLEloss 其實就是最小化crossentropy

我們這裡是要求出似然函式最大時對應的引數,一般來說對似然函式求導,其導函式為0時對應的引數就是我們要求的引數,但是這裡很難對似然函式直接求導使其為0。

同線性迴歸一樣,我們可以在目標函式後面加上正則項來控制模型的複雜程度,來防止過擬合,可以加上L1或L2正則項,具體可以看這篇博文機器學習->監督學習->線性迴歸(LASSO,Ridge,SGD) 裡面相關內容。

最大似然函式對這裡寫圖片描述求導,然後通過梯度下降法來求梯度方向
這裡寫圖片描述
這裡寫圖片描述

這裡需要注意:當我們以損失函式進行引數估計時(例如線性迴歸裡面的最小二乘估計),因為是求損失函式最小時的引數(是一個不斷下降地逼近最低值),故採用梯度下降法,當我們用最大似然函式進行引數估計時,是求似然函式最大時對應的引數(是一個不斷上升地逼近最高值),那麼這時時梯度上升法。其實道理都是一樣,只是前面正負號的問題。

我們發現通過最大似然估計得出的梯度方向還是一種這裡寫圖片描述的形式,跟之前線性迴歸得出的梯度公式一模一樣,那麼這是為什麼呢?這裡需要介紹下一個重要概念 指數族分佈,有關這個概念更詳細的說明請看這篇博文指數族分佈。那麼哪些分佈屬於指數族分佈呢?

  • 高斯分佈屬於指數族分佈
  • 二項分佈屬於指數族分佈
  • 泊松分佈屬於指數族分佈

只要樣本的分佈屬於指數族分佈,那麼在用最大似然估計求梯度方向時,最後的形式都是一個這裡寫圖片描述,並且得出的模型都是線性模型,只不過是一種廣義線性模型(GLM)。

我們再來明確一下什麼叫廣義線性模型(GLM)

  • y不再只是正態分佈,而是擴大為指數族中 的任一分佈
  • 變數這裡寫圖片描述
    連線函式g
  • 連線函式g單調可導
    如Logistic迴歸中這裡寫圖片描述

在梯度下降法中每次迭代都要代入全部資料進行更新引數,在批梯度下降法中,每次迭代隨機選擇一部分資料樣本來更新引數:
這裡寫圖片描述

當資料量小時還好,當資料量很大時,這樣迭代方法耗時耗力。
由此產生mini_batch梯度下降法(mini_batchGD),就是每次迭代隨機選擇訓練集的中一個數據樣本或者一批資料樣本代入更新引數。

這裡寫圖片描述

隨機梯度法雖然大大減少了迭代所需的時間,但是偶爾卻會使預測結果並不十分準確。

def logistic_regression(data,alpha,lamda):
    n=len(data)-1 ## n個特徵
    w=[0 for x in range(n)]
    w1=[0 for x in range(n)]
    for times in range(10000):
        for d in data:
            for i in range(n):
                w1[i]=w[i]+alpha*(d[n]-h(w,d))*d[i]+lamda*w[i] ## 加上了一個正則項
            for i in range(n):
                w[i]=w1[i]
    return w

Logistic Regression + Square Error

首先,線性迴歸中其y^ 為連續值,而邏輯迴歸中y^ 為離散的數值。

我們線上性迴歸中,講到用squareError 作為損失函式,那麼為什麼在邏輯迴歸中,不採用squareloss 呢?
沒事,我們先嚐試採用squareloss 應用到邏輯迴歸中,則有:

這裡寫圖片描述

這裡寫圖片描述

由上面的推導可以看出:
y^==0 時:

  • 計算出的f(x)==1 時,說明距離最優點還很遠,但是此時計算出的導數為0,引數幾乎不更新了。
  • 計算出f(x)==0 時,說明已經在最優點了,此時導數為0,看起來較為合理。

y^==1 時,同樣有這種缺陷。

所以在邏輯迴歸中,不太適用squareloss

這裡寫圖片描述

由上面這張圖來看,crossentropy 在距離最優點較遠的地方時,斜率較大,引數更新較快;而squareError 在距離最優點較遠地方,變化比較平滑,更新較慢。

Logistic迴歸的損失函式

在邏輯迴歸中,這裡寫圖片描述,由此可得:

這裡寫圖片描述

這裡寫圖片描述

我們要取這個對數似然函式這裡寫圖片描述的最大值。那麼這裡寫圖片描述(negative Log Likelihood,簡稱NLL)就可以認為是邏輯迴歸的損失函式

這裡寫圖片描述

因為這個最後的形式過於複雜,我們可以做個簡單的變換使得
很明顯當這裡寫圖片描述時,這裡寫圖片描述這裡寫圖片描述

這裡寫圖片描述

Limitation of Logistic Regression

邏輯迴歸畢竟是線性的分類,還是存在天然無法的一些問題,例如:

這裡寫圖片描述

顯然對於上面,對於上面這類DataSet,邏輯迴歸不好解決。那麼如果非要用邏輯迴歸解決,該如何是好呢?
先做Featuretransformation,將某一類的樣本分到直線的一側,例如:

這裡寫圖片描述

SoftMax迴歸

對Logistic迴歸有了個深刻的認識後,softMax迴歸就簡單多了,只不過由二分類變成了多分類。

這裡寫圖片描述

這裡寫圖片描述

def soft_max(data,K,alpha,lamda):
    n=len(data)-1 ## 樣本特徵維度
    w=np.zeros((K,n)) ##當前權重矩陣:每個類別有各自的權重向量
    w1=np.zeros((K,n)) ## 臨時權重矩陣,用於存放臨時更新的權重
    for time in range(1000):
        for d in data:
            x=d[:-1] ## 輸入特徵向量
            for k in range(K):
                y=0  ## 預設情況下,這個樣本屬於k類的期望(概率)為0
                if int(d[-1]+0.5)==k:
                    y=1 ## 在0.5誤差內,在認為該樣本屬於k類的期望為1
                p=predict(w,x,k) ## 輸出預測該樣本為k類的期望
                g=(y-p)*x ## 梯度
                w1[k]=w[k]+alpha*g+lamda*w[k]
            w=w1.copy()
    return w

根據以上所學做一道題目:

#coding:utf-8
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.patches as mpatches


def normalization(X):
    '''
    X標準化:以一列作為一個單位,標準化公式(x-該列均值)/(該列標準差)
    因為給的X有兩列,Y一列,則對應的theta有三列,其中theta0對應的X預設是1,故從X的第二列開始標準化。
    '''
    for i in range(1,int(X.shape[1])):
        std,mean=np.std(X[:,i],ddof=1),np.mean(X[:i])##標準差公式裡面預設(ddof=0)除以N,就是陣列長度,ddof=1就是除以(N-1)
        X[:,i]=(X[:,i]-mean)/(std+1e-10)
    return X

def sigmoid(X,T):
    '''
    :param X: 特徵矩陣
    :param T: 引數矩陣
    :return: 返回預測概率
    '''
    return 1.0/(1+np.exp(-(X.dot(T))))

def loadData():
    data = pd.read_csv('iris.data', header=None)
    data[4] = pd.Categorical(data[4]).codes
    data=data[data[4]!=2]
    x, y = np.split(data.values, (4,), axis=1)
    x = x[:, :2]
    ones=np.ones(shape=(x.shape[0],
            
           

相關推薦

機器學習->監督學習->logistic迴歸,softMax迴歸

本篇博文來總結一下回歸模型裡面兩個非常重要的模型。 logistic迴歸 softMAX迴歸 Logistic迴歸 logistics迴歸雖然有“迴歸”兩字但是卻是分類模型,並且是個二分類模型。 logistics迴歸是個線性分類模型,有著線性的

圖解機器學習-監督學習-線性迴歸總結

code:1.分析資料需要用什麼函式來擬合,給定已知sin函式的時候好擬合,但是未知函式是幾次,未知具體函式什麼樣子的時候擬合的時候需要自己觀察資料,並選擇相應的模型擬合,我自己編寫了一段code,擬合一下試試演算法的實用性. x=[1,3,5,6,2,4]'; y=[3,4,5,6,7,

公開課機器學習筆記(7)Softmax迴歸模型

在本節中,我們介紹Softmax迴歸模型,該模型是logistic迴歸模型在多分類問題上的推廣,在多分類問題中,類標籤  可以取兩個以上的值。 Softmax迴歸模型對於諸如MNIST手寫數字分類等問題是很有用的,該問題的目的是辨識10個不同的單個數字。Softmax迴歸

機器學習->監督學習->線性迴歸(LASSO,Ridge,SGD)

本篇博文主要總結線性迴歸,線性迴歸雖然簡單,但是卻是很重要,我將沿著以下幾個主題總結 最小二乘法 使用極大似然估計來解釋最小二乘 的解析式的求解過程 線性迴歸的複雜度懲罰因子(LASSO,Ridge) 梯度下降法 實戰 最小二乘法 線性迴歸,線性是

TensorFlow學習筆記(一)-- Softmax迴歸模型識別MNIST

最近學習Tensorflow,特此筆記,學習資料為21個專案玩轉深度學習 基於TensorFlow的實踐詳解 Softmax迴歸是一個線性的多分類模型,它是從Logistic迴歸模型轉化而來的,不同的是Logistic迴歸模型是一個二分類模型,而Softmax迴歸模型是一個多分類模型

家樂的深度學習筆記「4」 - softmax迴歸

[TOC] ## softmax迴歸 線性迴歸模型適用於輸出為連續值的情景,而softmax迴歸的輸出單元由一個變成了多個,且引入了softmax運算輸出類別的概率分佈,使輸出更適合離散值的預測與訓練,模型輸出可以是一個像影象類別這樣的離散值,其是一個單層神經網路,輸出個數等於分類問題中的類別個數。 #

機器學習-監督學習應用:梯度下降

矩陣 data width 最速下降法 數據 訓練 訓練數據 這樣的 最小 回歸與梯度下降: 回歸在數學上來說是給定一個點集,能夠用一條曲線去擬合之,如果這個曲線是一條直線,那就被稱為線性回歸,如果曲線是一條二次曲線,就被稱為二次回歸,回歸還有很多的變種,如locally

機器學習-監督學習概念

監督學習 Supervised learning     讓我們通過討論幾個監督學習問題開始,假設我們有一個關於俄勒岡州波特蘭市的47座房子的居住面積和價格的一組資料,如下所示: 我們把資料畫成圖,如下:     給出像這樣的資料,

機器學習-監督學習&&無監督學習

監督學習(supervised learning) 通過已有的訓練樣本(即已知資料以及其對應的輸出)來訓練,從而得到一個最優模型,再利用這個模型將所有新的資料樣本對映為相應的輸出結果,對輸出結果進行簡單的判斷從而實現分類的目的,那麼這個最優模型也就具有了對未知資料進行分類的能力。在社會中,我們在很

機器學習--監督學習之梯度下降法

最近在看stanford 吳恩達老師的機器學習課程,附上網易公開課的地址http://open.163.com/special/opencourse/machinelearning.html 突然心血

機器學習——監督學習幾種經典模型特點

監督學習分為分類學習和迴歸學習,分類即從分類別中選擇一個作為結果,其結果是離散的,迴歸待預測的結果是連續的,迴歸於分類的模型大同小異,這裡只介紹分類學習分類學習: 1、線性分類器 受限於資料特徵與分類目標之間的線性假設。LogisticRegression採用精確解析的方

機器學習演算法之一-logistic迴歸softmax模型

開始一個新的系列,換一換口味 分析機器學習演算法的一般思路: 1、確定預測函式或者判別函式,一般表示為H函式; 2、確定Cost函式,表示的是預測輸出值與訓練資料之間的偏差; 3、確定優化演算法。 一、前言 logistic迴歸是常用的二分類模型,屬

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

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

機器學習實戰(Machine Learning in Action)學習筆記————05.Logistic迴歸

機器學習實戰(Machine Learning in Action)學習筆記————05.Logistic迴歸關鍵字:Logistic迴歸、python、原始碼解析、測試作者:米倉山下時間:2018-10-26機器學習實戰(Machine Learning in Action,@author: Peter H

機器學習實戰》Logistic迴歸python3原始碼

邏輯迴歸: 1 梯度上升優化演算法 2 隨機梯度上升演算法 3 改進的隨機梯度上升法 開啟pycharm建立一個logRegression.py檔案,輸入如下程式碼: #coding:utf-8 from numpy import * ""

機器學習softmax迴歸(二)

通過上篇softmax迴歸已經知道大概了,但是有個缺點,現在來仔細看看 Softmax迴歸模型引數化的特點 Softmax 迴歸有一個不尋常的特點:它有一個“冗餘”的引數集。為了便於闡述這一特點,假設我們從引數向量  中減去了向量 ,這時,每一個

機器學習softmax迴歸(一)

在 softmax迴歸中,我們解決的是多分類問題(相對於 logistic 迴歸解決的二分類問題),類標  可以取  個不同的值(而不是 2 個)。因此,對於訓練集 ,我們有 。(注意此處的類別下標從 1 開始,而不是 0)。例如,在 M

機器學習系列文章(監督學習):迴歸

在機器學習領域,最神奇的模型當屬迴歸模型,迴歸模型也是非專業人員一談機器學習就能無意涉及到的內容。在這裡,筆者先談談當前資訊學科被無良媒體誇大報道賺取點選率關注度的商業行為。不知何時起,國民自負的以為手裡拿著手機,包裡揹著筆記本就以為掌握了資訊時代發展的最前沿資訊。這種不理性

機器學習筆記08】分類器(softmax迴歸)

基本定義 首先給出softmax的數學定義,如下: hθ(x(i))=[p(y(i)=1∣x(i);θ)p(y(i)=2∣x(i);θ)⋮p(y(i)=k∣x(i);θ)]=1∑j=1keθjTx(i)[eθ1Tx(i)eθ2Tx(i)⋮eθkTx(i)]

機器學習實戰》logistic迴歸:關於’此處略去了一個簡單的數學推導‘的個人理解

正在看《機器學習實戰》這本書的朋友,在看到logistic迴歸的地方,可能會對P78頁的梯度上升演算法程式碼以及P79這裡的這句話弄的一頭霧水:“此處略去了一個簡單的數學推導,我把它留給有興趣的讀者”。這句話就是針對下面這段我貼出來的程式碼中的gradAscen