-
1 # Duhss
-
2 # 醫療兵皮特兒
先說一下你提問中的每個引數的意義:
表示sigmoid函式的計算值,也就是一個機率,也就是機器學習中的預測的機率。
表示一個函式的的命名,這裡可以是任意的,下文用g表示。
就是資料集中特徵xb(後文用x表示)的引數是一個多維向量,也就是邏輯迴歸中需要進行迭代更新的引數。這裡為了與xb做點乘,所以θ做了轉置,由列向量變為行向量。(感謝TheGreatPrawn指正。)
表示資料集中的特徵,是一個多維向量。
表示分類的結果,也就是機率大於或小於某一個閾值的時候,分成兩類。
下面用自己的理解和語言具體解釋:
看到你說的例子是邏輯迴歸,是在學習完線性迴歸後進階的一個演算法,線性迴歸是用一條直線來擬合數據集的特徵值(矩陣X)和標籤(矩陣Y),從而達到利用新的特徵值(新矩陣X)來預測新的標籤(未知值Y)。
要了解你的問題之前,你需要明白梯度下降的原理。如果不明白可以先學習一下梯度下降,這裡就不介紹了。用最簡單的一句話概括梯度下降就是:“以偏導為方向,找到最低點。”
就像下圖所表示的:
我們回到正題上來:
你所貼的圖名字叫做sigmiod公式,也就是機率密度的累加公式,為什麼要引入sigmiod函式?
邏輯迴歸的決策邊界:可以是非線性的
有下列的資料集,利用線性迴歸演算法進行擬合是無法完成工作的,邏輯迴歸的決策邊界是非線性的,所以我們可以利用邏輯迴歸演算法進行二分類或擬合。(你所提的問題是二分類任務,y的取值不是0就是1。)
下圖就是一個非線性的二分類:
那麼sigmoid函式式什麼樣的?
sigmoid公式:
正態分佈的密度累積函式
上圖表示機率的正態分佈,下圖(sigmoid函式)表示上圖機率的累加。
兩張圖的座標軸不對應,但表示的意思是一樣的。
自變數為任意實數,應變數的值域為[0,1]
g(z)的取值範圍是0~1,相當於一件事發生的機率
此函式是機率論中的機率密度累積函式
輸入範圍是(-oo,+oo),輸出範圍[0,1]
將線性迴歸預測出的一個值,放到sigmoid函式當中來,轉換為機率問題
一個機率值如果可能性是70%,那麼不可能性就是1-70%
你的例子中是以50%為分界線的,其實可以是任意值。
一旦求出機率,就可以得到分類結果
把z換成
θ就是我們要求的值,x就是樣本的特徵。
這裡的θ和x都是矩陣。公式就成了你最開始說的
這裡的θ,x也就是你的xb都是矩陣
關於θ:線上性迴歸中,我們是要算出 θ,最後用來完成預測任務,而在邏輯迴歸中,我們的θ是隨機取值的,然後根據梯度指定方向進行一步一步的更新迭代後得到的一個最優的θ。
解釋:將任意輸入對映到了[0,1]區間,我們線上性迴歸當中可以得到一個預測值(),但是線性迴歸是特例,這裡的θ是隨機取值的
再將該值對映到sigmoid函式當中,就完成了預測值到機率的轉換問題,也就是分類任務
這裡是隨機θ之後,為了得到的最小值,化成的機率問題,只是單純地變為機率問題,再由θ和新的x得到預測值,這裡說的預測值就是這個
引入機率函式相當於線性迴歸中的將實際值轉換為高斯分佈機率函式的問題
分類任務:,
類似於你提問中的
既然是二分類任務,那麼結果就是非此即彼的,所以y不是0就是1
這兩個公式進行整合,才能利於我們後邊的計算
整合後:
上面的式子,y=0或y=1都是沒整合之前的樣子。
似然函式:,要讓所有的樣本(數量為m)滿足θ準確最大機率,就是誤差最小的機率,也就是線性迴歸中所說的損失函式最小的機率,所以要進行累乘。
但是在計算機內部,乘運算要比加運算複雜的多,如果我們先將該運算轉化成加法運算,那麼計算機計算起來就會高效的多。
我們這裡要求的是整個函式的最大值,因為整個函式是大於0的,那麼乘法的最大值也就對應於加法的最大值。
對似然函式取對數,就可以把乘法轉換為加法
對數似然:,同線性迴歸一樣,用對數將累乘轉換為求和。這裡是從1累加到m,m表示樣本個數。
但是梯度下降的方法,我們習慣用求最小值的方法解決問題。
這裡引入一個
將求它的最小值,也就是對數似然函式的最大值。
這裡就轉換成求最小值的問題了。
這裡所說的求值,並不是直接計算出來的,而是讓計算機一步一步的去試出來的。
還記得最前面說的梯度下降要做的事情麼?
“以偏導為方向,找到最低點。”
求偏導數:
化簡得:
這裡少了一個m,因為m是常數,對於最終的結果起不到作用,可以忽略也可以不忽略。
為什麼是偏導?
這裡的θ是一個矩陣,並不是一維的,如果是N維的,那麼就要對每一維求偏導。
i表示第幾個樣本,j表示樣本的第幾個特徵,一個樣本有N個特徵。
這樣做的目的是,找到一組θ值,使得J(θ)最小,做法就如上述所說:J(θ)對θ的每一個維度求偏導,得出θ的方向,然後一步一步的去試θ,第一次的θ是θ1,第二次是θ2,我們用△θ=θ2-θ1,
當△θ很小的時候(多小由自己規定),我們就認為,找到了最優的θ。
方向的問題解決了,一步一步要怎麼解決?也就是如何進行迭代?
我們叫做引數更新
引數更新:
這裡引入了一個α,表示一步一步的步長,試想一下如果步長很大,我們就可以直接跨越最低點從而找不到最優的θ,所以這裡的α是越小越好。
這裡的“:=”是賦值的意思
這就完成了迭代的工作,每走一步,θj就會更新一次。
例如在python中寫一個for迴圈,迴圈體就是θj = θj-α後面那一串,
則θj在迴圈結束後,就會得到最優值。
求出了θ的最優值,那麼可以做分類和擬合的工作了:
分類:
根據原有資料集中的x對y進行分類。記得機率小於或大於某一個閾值就可以將y分類麼?
擬合(預測):
根據新的資料集x,
利用
推算出新的y,也就是預測工作了。
總結:
邏輯迴歸相當於隨機取θ,然後算出預測值,將預測值帶入到sigmoid函式中,轉換為機率問題,求出損失函式最小的機率,如何求出最小的機率?
並不是讓導數等於0,而是先求出θ偏導的方向,一次取一個θ,再帶入到引數更新中,因為α是步長,後面那一串是方向,有了步長和方向,就可以得到新的θ,最後求新老θ的差值
如果導數越接近於0的時候,那麼差值就越小,θ就會越收斂,這樣就會求出θ。
機器學習中的演算法很多,不要被繁雜的數學公式搞蒙了,包括後邊你要學習的隨機森林,貝葉斯,聚類,支援向量機,PCA降維,卷積神經網路等等都有大量的數學公式和推導,其實只要理解他要做一件什麼事就行,數學的推算只是為了做這一件事而創造的工具而已。如果數學概念或者公式無法理解,可以多搜一下,有很多人用大白話講數學,當然有時間看一下國外的數學教程更好,他們用初中的數學推算教高等數學,非常易於理解。喜歡就去學,不要被什麼供大於求什麼飽和之類的言論誤導,畢竟藝多不壓身嘛。
回覆列表
大兄弟,你現在多大? 剛入門嗎?程式設計和數學基礎如何?老實跟你說,這個東西現在很多人都在搞,但是很多人都不知道自己為什麼要搞這個領域,或許是覺得熱門,得錢多,有難度?現在的所謂演算法崗,已經遠遠供大於求。勸你不要再踏上這條路擠破頭了。目前的理論解決不了人工智慧的,還有,所謂的深度學習,就是幾十年前的多層神經網路而已。不要被表面現象所迷惑了。