在本文中,我們將分析變換的理論計算 線性迴歸函數 в 逆 Logit 變換函數(也稱為邏輯響應函數)。 然後,使用武器庫 最大似然法,根據邏輯迴歸模型,我們推導出損失函數 物流損失,或者換句話說,我們將定義一個函數,用它在邏輯迴歸模型中選擇權重向量的參數 .
文章大綱:
- 讓我們重複一下兩個變數之間的線性關係
- 讓我們確定轉型的必要性 線性迴歸函數 в 邏輯響應函數
- 讓我們進行轉換和輸出 邏輯響應函數
- 讓我們試著理解為什麼最小平方法在選擇參數時效果不好 功能 物流損失
- 我們用 最大似然法 用於確定 參數選擇功能 :
5.1. 案例一:函數 物流損失 對於具有類別名稱的對象 0 и 1:
5.2. 案例一:函數 物流損失 對於具有類別名稱的對象 -1 и +1:
本文充滿了簡單的範例,其中所有計算都很容易透過口頭或紙本進行;在某些情況下,可能需要計算器。 所以準備好吧:)
本文主要針對具有機器學習基礎知識的資料科學家。
本文也將提供用於繪製圖表和計算的程式碼。 所有程式碼都是用該語言編寫的 python 2.7。 讓我提前解釋一下所使用版本的“新穎性” - 這是參加著名課程的條件之一 揚德克斯 在同樣知名的線上教育平台上 Coursera,並且,正如人們可能假設的那樣,該材料是根據本課程準備的。
01.直線依賴
問這個問題是很合理的──線性相關性和邏輯迴歸與它有什麼關係?
這很簡單! 邏輯迴歸是屬於線性分類器的模型之一。 簡單來說,線性分類器的任務就是預測目標值 來自變數(回歸量) 。 據認為,特徵之間存在依賴性 和目標值 線性。 因此分類器的名稱是線性的。 非常粗略地說,邏輯迴歸模型是基於特徵之間存在線性關係的假設 和目標值 。 這就是連接。
工作室裡有第一個例子,正確的是,它是關於所研究的數量的線性依賴性的。 在準備這篇文章的過程中,我遇到了一個已經讓很多人感到緊張的例子──電流對電壓的依賴性 (“應用迴歸分析”,N. Draper、G. Smith)。 我們也會在這裡看看。
根據 歐姆定律:
哪裡 - 當前強度, - 電壓, - 反抗。
如果我們不知道 歐姆定律,那麼我們可以透過改變來經驗找到依賴性 和測量 ,同時支持 固定的。 然後我們會看到依賴圖 從 給出一條或多或少穿過原點的直線。 我們說「或多或少」是因為,雖然這種關係實際上是準確的,但我們的測量可能會包含一些小誤差,因此圖表上的點可能不會完全落在這條線上,而是會隨機散佈在這條線上。
圖1“依賴性” 從 »
圖表繪製程式碼
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import random
R = 13.75
x_line = np.arange(0,220,1)
y_line = []
for i in x_line:
y_line.append(i/R)
y_dot = []
for i in y_line:
y_dot.append(i+random.uniform(-0.9,0.9))
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(x_line,y_line,color = 'purple',lw = 3, label = 'I = U/R')
plt.scatter(x_line,y_dot,color = 'red', label = 'Actual results')
plt.xlabel('I', size = 16)
plt.ylabel('U', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
02.線性迴歸方程式需要變換
讓我們來看另一個例子。 假設我們在銀行工作,我們的任務是根據某些因素來確定借款人償還貸款的可能性。 為了簡化任務,我們只考慮兩個因素:借款人的月薪和每月貸款還款。
這個任務是有條件的,但是透過這個例子我們可以理解為什麼它還不夠使用 線性迴歸函數,並找出該函數需要進行哪些轉換。
讓我們回到這個例子。 據了解,薪水越高,借款人每個月能撥出的資金來償還貸款的金額就越多。 同時,對於一定的薪資範圍,這種關係將是相當線性的。 例如,假設工資範圍為 60.000 RUR 到 200.000 RUR,並假設在指定的工資範圍內,每月付款的大小與工資大小的依賴關係是線性的。 假設對於指定的工資範圍,工資與付款比率不能低於 3,且借款人仍必須有 5.000 RUR 的儲備金。 只有在這種情況下,我們才會假設借款人將向銀行償還貸款。 那麼,線性迴歸方程式將採用以下形式:
哪裡 , , , - 薪水 第-個借款人, - 貸款支付 -th 借款人。
將固定參數的工資和貸款支付代入方程 您可以決定是否發放或拒絕貸款。
展望未來,我們注意到,使用給定的參數 線性迴歸函數,用於 後勤回應功能 將產生較大的值,使確定貸款償還機率的計算變得複雜。 因此,建議將我們的係數降低 25.000 倍。 係數的這種轉換不會改變發放貸款的決定。 讓我們記住這一點以供將來使用,但是現在,為了使我們所討論的內容更加清楚,讓我們考慮三個潛在藉款人的情況。
表 1 “潛在藉款人”
生成表的程式碼
import pandas as pd
r = 25000.0
w_0 = -5000.0/r
w_1 = 1.0/r
w_2 = -3.0/r
data = {'The borrower':np.array(['Vasya', 'Fedya', 'Lesha']),
'Salary':np.array([120000,180000,210000]),
'Payment':np.array([3000,50000,70000])}
df = pd.DataFrame(data)
df['f(w,x)'] = w_0 + df['Salary']*w_1 + df['Payment']*w_2
decision = []
for i in df['f(w,x)']:
if i > 0:
dec = 'Approved'
decision.append(dec)
else:
dec = 'Refusal'
decision.append(dec)
df['Decision'] = decision
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision']]
根據表中的數據,Vasya 的薪水為 120.000 萬盧布,希望獲得一筆貸款,以便他每月可以償還 3.000 盧布。 我們確定,要批准貸款,Vasya 的薪水必須超過付款金額的三倍,並且還必須剩餘 5.000 RUR。 Vasya 滿足這個要求: 。 甚至還有 106.000 RUR。 儘管在計算時 我們降低了可能性 25.000次,結果都是一樣-貸款可以批准。 費迪亞(Fedya)也將獲得一筆貸款,但萊莎(Lesha)儘管收到的貸款最多,但仍必須抑制自己的胃口。
讓我們為這個案例畫一個圖表。
圖2“借款人分類”
繪製圖表的程式碼
salary = np.arange(60000,240000,20000)
payment = (-w_0-w_1*salary)/w_2
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(salary, payment, color = 'grey', lw = 2, label = '$f(w,x_i)=w_0 + w_1x_{i1} + w_2x_{i2}$')
plt.plot(df[df['Decision'] == 'Approved']['Salary'], df[df['Decision'] == 'Approved']['Payment'],
'o', color ='green', markersize = 12, label = 'Decision - Loan approved')
plt.plot(df[df['Decision'] == 'Refusal']['Salary'], df[df['Decision'] == 'Refusal']['Payment'],
's', color = 'red', markersize = 12, label = 'Decision - Loan refusal')
plt.xlabel('Salary', size = 16)
plt.ylabel('Payment', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
所以,我們的直線,根據函數構造 ,將「壞」借款人與「好」借款人區分開來。 那些願望與其能力不相符的借款人位於線上方(Lesha),而根據我們模型的參數,能夠償還貸款的借款人則位於線下方(Vasya 和 Fedya)。 換句話說,我們可以這樣說:我們的直線將借款人分為兩類。 讓我們將它們表示如下: 到類 我們將最有可能償還貸款的借款人分類為 或 我們將包括那些最有可能無法償還貸款的借款人。
讓我們總結一下這個簡單例子的結論。 我們先說一個觀點 將點的座標代入直線對應的方程 ,考慮三個選項:
- 如果該點在線下並且我們將其分配給類 ,那麼函數的值 將會是積極的 對 。 這意味著我們可以假設償還貸款的機率在 。 函數值越大,機率越高。
- 如果一個點位於一條線上方,我們將其分配給該類 或 ,那麼函數的值將為負 對 。 那我們假設債務償還的機率在 而且,函數的絕對值越大,我們的置信度就越高。
- 該點位於一條直線上,位於兩個類別之間的邊界上。 在這種情況下,函數的值 將是平等的 償還貸款的機率等於 .
現在,讓我們想像一下,我們的借款人不是兩個,而是數十個,也不是三個,而是數千個。 然後我們將得到的不是直線 m維 平面和係數 我們不會憑空得出,而是根據所有規則,並根據已償還或尚未償還貸款的借款人的累積數據得出。 事實上,請注意,我們現在正在使用已知的係數來選擇借款人 。 事實上,邏輯迴歸模型的任務正是確定參數 ,此時損失函數的值 物流損失 會趨向於最小值。 但關於向量是如何計算的 ,我們將在文章的第五部分中了解更多內容。 同時,我們回到了應許之地——我們的銀行家和他的三個客戶。
感謝功能 我們知道誰可以獲得貸款,誰需要被拒絕。 但你不能帶著這些資訊去找主管,因為他們想從我們這裡得到每個借款人償還貸款的機率。 怎麼辦? 答案很簡單——我們需要以某種方式轉換函數 ,其值在範圍內 其值將位於範圍內的函數 。 並且存在這樣一個函數,它被稱為 邏輯響應函數或逆邏輯變換。 見面:
讓我們一步步看看它是如何運作的 邏輯響應函數。 請注意,我們將朝相反的方向行走,即我們假設我們知道機率值,其範圍為 對 然後我們將這個值「展開」到整個數字範圍 對 .
03.我們推導邏輯響應函數
步驟1.將機率值轉換為範圍
函數變換過程中 в 邏輯響應函數 我們將不再打擾我們的信用分析師,而去參觀博彩公司。 不,當然,我們不會下注,我們感興趣的是表達式的含義,例如,機會是 4 比 1。所有投注者都熟悉的賠率是「成功」與「成功」的比率。失敗」。 用機率術語來說,賠率是事件發生的機率除以事件不發生的機率。 讓我們寫下事件發生機率的公式 :
哪裡 - 事件發生的機率, — 事件不發生的機率
例如,如果一匹綽號為“Veterok”的年輕、強壯、頑皮的馬在比賽中擊敗一位名叫“Matilda”的老而鬆弛的老婦人的概率等於 ,那麼「Veterok」成功的機會將是 к 反之亦然,知道了賠率,我們計算機率就不難了 :
因此,我們學會了將機率「轉換」為機會,機會的值來自 對 。 讓我們再踏出一步,學習將機率「翻譯」到整個數軸: 對 .
步驟2.將機率值轉換為範圍
這一步非常簡單——讓我們以歐拉數為底的賠率取對數 我們得到:
現在我們知道如果 ,然後計算值 會非常簡單,而且應該是正面的: 。 這是真實的。
出於好奇,讓我們檢查一下如果 ,那麼我們期望看到負值 。 我們檢查: 。 這是正確的。
現在我們知道如何將機率值轉換為 對 沿著整個數軸從 對 。 在下一步中,我們將做相反的事情。
現在,我們注意到,根據對數規則,知道函數的值 ,您可以計算賠率:
這種確定賠率的方法將對我們下一步有用。
步驟 3. 讓我們推導出一個公式來決定
所以我們學習了,知道了 ,求函數值 。 然而,事實上,我們需要的恰恰相反──知道價值 找到 。 為此,讓我們轉向逆賠率函數這樣的概念,根據該概念:
在本文中,我們不會推導上述公式,但我們將使用上面範例中的數字來檢查它。 我們知道賠率是 4 比 1 (),事件發生的機率為 0.8()。 我們來進行替換: 。 這與我們之前進行的計算相吻合。 讓我們繼續。
在最後一步我們推斷出 ,這意味著您可以在逆賠率函數中進行替換。 我們得到:
將分子和分母同時除以 , 然後:
為了以防萬一,為了確保我們沒有在任何地方犯錯誤,讓我們再做一次小檢查。 在第2步中,我們為 確定 。 然後,將值代入 代入邏輯響應函數,我們期望得到 。 我們代入並得到:
恭喜,親愛的讀者,我們剛剛導出並測試了邏輯響應函數。 讓我們來看看該函數的圖形。
圖3“Logistic響應函數”
繪製圖表的程式碼
import math
def logit (f):
return 1/(1+math.exp(-f))
f = np.arange(-7,7,0.05)
p = []
for i in f:
p.append(logit(i))
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(f, p, color = 'grey', label = '$ 1 / (1+e^{-w^Tx_i})$')
plt.xlabel('$f(w,x_i) = w^Tx_i$', size = 16)
plt.ylabel('$p_{i+}$', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
在文獻中,您也可以找到該函數的名稱: 乙狀結腸函數。 該圖清楚地表明,對象屬於某個類別的機率的主要變化發生在相對較小的範圍內 ,從某個地方 對 .
我建議回到我們的信用分析師那裡,幫助他計算貸款償還的機率,否則他可能會面臨沒有獎金的風險:)
表 2 “潛在藉款人”
生成表的程式碼
proba = []
for i in df['f(w,x)']:
proba.append(round(logit(i),2))
df['Probability'] = proba
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision', 'Probability']]
因此,我們確定了貸款償還的機率。 總的來說,這似乎是正確的。
事實上,薪資為 120.000 RUR 的 Vasya 每月向銀行提供 3.000 RUR 的機率接近 100%。 順便說一句,我們必須明白,如果銀行的政策規定,例如,貸款給客戶的貸款償還機率大於0.3,那麼銀行就可以向Lesha發放貸款。 只是在這種情況下,銀行會為可能的損失建立更大的準備金。
還應該指出的是,工資與付款比率至少為 3,且餘裕為 5.000 RUR,取自上限。 因此,我們不能使用原始形式的權重向量 。 我們需要大幅降低係數,此時我們將每個係數除以25.000,也就是說,我們本質上是對結果進行了調整。 但這是專門為了簡化初始階段對材料的理解而這樣做的。 在生活中,我們不需要發明和調整係數,而是找到它們。 在本文的下一部分中,我們將推導出用於選擇參數的方程 .
04.確定權重向量的最小平方法 在邏輯響應函數中
我們已經知道這種選擇權重向量的方法 如 最小平方法(LSM) 事實上,我們為什麼不在二元分類問題中使用它? 事實上,沒有什麼可以阻止您使用 跨國企業,只有這種方法在分類問題中給出的結果不如 物流損失。 這是有理論基礎的。 我們先來看一個簡單的例子。
假設我們的模型(使用 MSE и 物流損失)已經開始選擇權重向量 我們在某個步驟停止了計算。 無論是在中間、結尾或開頭都沒關係,最主要的是我們已經有了權重向量的一些值,我們假設在這一步中,權重向量 兩種型號沒有差異。 然後將得到的權重代入 邏輯響應函數 () 對於屬於該類別的某個對象 。 我們檢查兩種情況,根據所選的權重向量,我們的模型非常錯誤,反之亦然 - 模型非常有信心該物件屬於該類 。 讓我們來看看使用時會被罰款什麼 跨國企業 и 物流損失.
根據使用的損失函數計算懲罰的程式碼
# класс объекта
y = 1
# вероятность отнесения объекта к классу в соответствии с параметрами w
proba_1 = 0.01
MSE_1 = (y - proba_1)**2
print 'Штраф MSE при грубой ошибке =', MSE_1
# напишем функцию для вычисления f(w,x) при известной вероятности отнесения объекта к классу +1 (f(w,x)=ln(odds+))
def f_w_x(proba):
return math.log(proba/(1-proba))
LogLoss_1 = math.log(1+math.exp(-y*f_w_x(proba_1)))
print 'Штраф Log Loss при грубой ошибке =', LogLoss_1
proba_2 = 0.99
MSE_2 = (y - proba_2)**2
LogLoss_2 = math.log(1+math.exp(-y*f_w_x(proba_2)))
print '**************************************************************'
print 'Штраф MSE при сильной уверенности =', MSE_2
print 'Штраф Log Loss при сильной уверенности =', LogLoss_2
一個失誤的案例 — 模型將一個物件指派給一個類別 機率為 0,01
使用處罰 跨國企業 將:
使用處罰 物流損失 將:
堅定信心的案例 — 模型將一個物件指派給一個類別 機率為 0,99
使用處罰 跨國企業 將:
使用處罰 物流損失 將:
這個例子很好地說明了,如果出現嚴重錯誤,損失函數 日誌損失 模型的懲罰顯著超過 MSE。 現在讓我們來了解使用損失函數的理論背景是什麼 日誌損失 在分類問題中。
05.最大似然法與邏輯迴歸
如一開始所承諾的,本文充滿了簡單的範例。 工作室裡還有另一個例子,也是老客人——銀行借款人:Vasya、Fedya 和 Lesha。
為了以防萬一,在開發範例之前,讓我提醒您,在生活中我們正在處理具有數十或數百個特徵的數千或數百萬個物件的訓練樣本。 然而,這裡的數字是為了讓它們能夠輕鬆地融入新手資料科學家的腦海中。
讓我們回到這個例子。 讓我們想像一下,銀行董事決定向每個有需要的人發放貸款,儘管演算法告訴他不要向 Lesha 發放貸款。 現在已經過了足夠的時間,我們知道三位英雄中哪些人償還了貸款,哪些人沒有償還貸款。 意料之中的是:瓦夏和費迪亞償還了貸款,但萊莎沒有償還。 現在讓我們想像一下,這個結果對我們來說將是一個新的訓練樣本,同時,就好像所有影響償還貸款可能性的因素(借款人的工資、每月還款額)的數據都消失了。 然後,直觀地,我們可以假設有三分之一的借款人不向銀行償還貸款,或者換句話說,下一個借款人償還貸款的機率 。 這個直觀的假設得到了理論上的證實,並且是基於 最大似然法,在文獻中通常被稱為 最大似然原理.
首先,讓我們來熟悉一下概念裝置。
抽樣可能性 是準確地獲得這樣的樣本、準確地獲得這樣的觀察結果/結果的機率,即獲得每個樣本結果的機率的乘積(例如,Vasya、Fedya和Lesha的貸款是否同時償還或不同時償還)。
似然函數 將樣本的可能性與分佈參數的值連結起來。
在我們的例子中,訓練樣本是廣義伯努利方案,其中隨機變數僅採用兩個值: 或 。 因此,樣本似然可以寫成參數的似然函數 如下所示:
上述條目可以解釋如下。 Vasya 和 Fedya 償還貸款的聯合機率等於 ,Lesha 不償還貸款的機率等於 (因為這不是發生的貸款償還),因此所有三個事件的聯合機率是相等的 .
最大似然法 是一種透過最大化估計未知參數的方法 似然函數。 在我們的例子中,我們需要找到這樣一個值 ,此時 達到最大值。
實際的想法從何而來──尋找似然函數達到最大值的未知參數的值? 這個想法的起源源於這樣一種想法:樣本是我們可以獲得的有關總體的知識的唯一來源。 我們所知道的關於總體的一切都在樣本中得到了體現。 因此,我們只能說樣本是我們可用的總體的最準確反映。 因此,我們需要找到一個參數,使可用樣本最有可能。
顯然,我們正在處理一個最佳化問題,需要找到函數的極值點。 為了找到極值點,需要考慮一階條件,即使函數的導數為零,並針對所需參數求解方程式。 然而,尋找大量因子的乘積的導數可能是一項漫長的任務;為了避免這種情況,有一種特殊的技術 - 切換到對數 似然函數。 為什麼這樣的轉變是可能的? 讓我們注意一下,我們並不是在尋找函數本身的極值,以及極值點,即未知參數的值 ,此時 達到最大值。 當轉向對數時,極值點不會改變(儘管極端值本身會有所不同),因為對數是單調函數。
讓我們根據上述內容,繼續使用 Vasya、Fedya 和 Lesha 的貸款來開發我們的範例。 首先讓我們繼續 似然函數的對數:
現在我們可以很容易地區分錶達式 :
最後,考慮一階條件 - 我們將函數的導數等於零:
因此,我們對貸款償還機率的直觀估計 理論上是合理的。
很好,但是我們現在應該如何處理這些資訊呢? 如果我們假設三分之一的借款人不將錢歸還給銀行,那麼後者將不可避免地破產。 是的,但僅當評估貸款償還機率等於 我們沒有考慮影響貸款償還的因素:借款人的薪水和每月還款。 讓我們記住,我們之前計算了每個客戶償還貸款的機率,並考慮了這些相同的因素。 我們得到的機率不同於常數等於,這是合乎邏輯的 .
讓我們定義樣本的可能性:
計算樣本似然的程式碼
from functools import reduce
def likelihood(y,p):
line_true_proba = []
for i in range(len(y)):
ltp_i = p[i]**y[i]*(1-p[i])**(1-y[i])
line_true_proba.append(ltp_i)
likelihood = []
return reduce(lambda a, b: a*b, line_true_proba)
y = [1.0,1.0,0.0]
p_log_response = df['Probability']
const = 2.0/3.0
p_const = [const, const, const]
print 'Правдоподобие выборки при константном значении p=2/3:', round(likelihood(y,p_const),3)
print '****************************************************************************************************'
print 'Правдоподобие выборки при расчетном значении p:', round(likelihood(y,p_log_response),3)
恆定值的樣本似然率 :
考慮因素計算貸款償還機率時的樣本可能性 :
事實證明,具有根據因素計算的機率的樣本的似然性高於具有恆定機率值的似然性。 這是什麼意思? 這表明,了解這些因素可以更準確地選擇每個客戶的貸款償還機率。 因此,在發放下一筆貸款時,使用本文第3節末提出的模型來評估債務償還機率會更為正確。
但是,如果我們想最大化 樣本似然函數,那麼為什麼不使用某種演算法來產生 Vasya、Fedya 和 Lesha 的機率,例如分別等於 0.99、0.99 和 0.01。 也許這樣的演算法在訓練樣本上表現良好,因為它會使樣本似然值更接近 ,但是,首先,這樣的演算法很可能在泛化能力上有困難,其次,這個演算法肯定不是線性的。 如果本文的計畫顯然不包括對抗過度訓練(同樣弱的泛化能力)的方法,那麼讓我們更詳細地討論第二點。 為此,只需回答一個簡單的問題。 考慮到我們已知的因素,Vasya 和 Fedya 償還貸款的機率是否相同? 從合理的邏輯來看,當然不是,也不可能。 因此,Vasya 每月將支付工資的 2.5% 來償還貸款,而 Fedya 則幾乎為 27,8%。 同樣在圖 2「客戶分類」中,我們看到 Vasya 比 Fedya 距離類別分隔線更遠。 最後,我們知道該函數 Vasya 和 Fedya 採用不同的值:Vasya 為 4.24,Fedya 為 1.0。 現在,例如,如果 Fedya 的收入增加了一個數量級或要求的貸款較少,那麼 Vasya 和 Fedya 償還貸款的機率將相似。 換句話說,線性相關性無法被愚弄。 如果我們真的計算了幾率 ,並且並不是憑空而來,我們可以有把握地說,我們的價值觀 最好讓我們估計每個借款人償還貸款的機率,但由於我們同意假設係數的確定 是根據所有規則進行的,那麼我們將假設如此 - 我們的係數使我們能夠更好地估計機率:)
然而,我們離題了。 在本節中,我們需要了解權重向量是如何決定的 ,這對於評估每個借款人償還貸款的機率是必要的。
讓我們簡要總結一下我們尋找賠率的武器庫 :
1.我們假設目標變數(預測值)與影響結果的因素之間是線性關係。 由於這個原因,它被使用 線性迴歸函數 物種 ,該行將物件(客戶端)劃分為類別 и 或 (有能力償還貸款的客戶和沒有能力償還貸款的客戶)。 在我們的例子中,方程式的形式為 .
2.我們使用 逆邏輯函數 物種 確定對象屬於某個類別的機率 .
3.我們將我們的訓練集視為廣義的實現 伯努利方案,即對於每個物件產生一個隨機變量,其機率為 (每個物件都有自己的值)取值為 1 並且有機率 - 0。
4.我們知道我們需要最大化什麼 樣本似然函數 考慮到可接受的因素,使可用樣本變得最合理。 換句話說,我們需要選擇樣本最可信的參數。 在我們的例子中,選擇的參數是貸款償還的機率 ,這又取決於未知係數 。 所以我們需要找到這樣一個權重向量 ,此時樣本的可能性最大。
5.我們知道要最大化什麼 樣本似然函數 可以用 最大似然法。 我們知道使用這種方法的所有技巧。
這就是為什麼它是一個多步驟的移動:)
現在請記住,在文章的一開始我們想要導出兩種類型的損失函數 物流損失 取決於物件類別的指定方式。 碰巧,在具有兩個類別的分類問題中,這些類別被表示為 и 或 。 根據符號的不同,輸出將具有相應的損失函數。
案例 1. 將物件分類為 и
此前,在確定樣本的可能性時,根據因素和給定的係數計算借款人償還債務的機率 ,我們應用了公式:
其實 是的意思 後勤回應功能 對於給定的權重向量
那麼沒有什麼可以阻止我們將樣本似然函數編寫如下:
碰巧的是,有時一些新手分析師很難立即理解這個功能是如何運作的。 讓我們來看 4 個簡短的例子來澄清問題:
1. 如果 (即根據訓練樣本,該物件屬於+1類),而我們的演算法 確定將物件分類為類別的機率 等於0.9,則樣本的似然度計算如下:
2. 如果 和 ,那麼計算將是這樣的:
3. 如果 和 ,那麼計算將是這樣的:
4. 如果 和 ,那麼計算將是這樣的:
很明顯,在情況 1 和 3 或一般情況下,似然函數將最大化 - 正確猜測將物件分配給類別的機率值 .
由於以下事實:在確定將物件分配給某個類別的機率時 我們只是不知道係數 ,然後我們會尋找他們。 如上所述,這是一個最佳化問題,首先我們需要找到似然函數相對於權重向量的導數 。 然而,首先我們自己簡化任務是有意義的:我們將尋找對數的導數 似然函數.
為什麼對數後,在 邏輯誤差函數,我們將符號從 上 。 一切都很簡單,因為在評估模型品質的問題中,通常會最小化函數的值,我們將表達式的右側乘以 因此,現在我們不是最大化函數,而是最小化函數。
事實上,現在,就在你眼前,損失函數已經被煞費苦心地推導出來了—— 物流損失 對於包含兩個類別的訓練集: и .
現在,要找到係數,我們只需要找到導數 邏輯誤差函數 然後,使用數值最佳化方法,例如梯度下降或隨機梯度下降,選擇最佳係數 。 不過,考慮到文章篇幅較大,建議大家自己進行微分,或者可能這將是下一篇文章的主題,有大量的算術,沒有如此詳細的例子。
案例 2. 將物件分類為 и
這裡的方法與類別相同 и ,而是損失函數輸出的路徑本身 物流損失,會更加華麗。 讓我們開始吧。 對於似然函數,我們將使用運算符 “如果……那麼……”。 也就是說,如果 第一個物件屬於該類 ,然後為了計算樣本的可能性,我們使用機率 ,如果該物件屬於該類 ,然後我們代入可能性 。 似然函數如下圖所示:
讓我們用手指來描述它是如何運作的。 讓我們考慮 4 種情況:
1. 如果 и ,那麼採樣可能性就會“消失”
2. 如果 и ,那麼採樣可能性就會“消失”
3. 如果 и ,那麼採樣可能性就會“消失”
4. 如果 и ,那麼採樣可能性就會“消失”
很明顯,在情況 1 和 3 中,當演算法正確確定機率時, 似然函數 會最大化,也就是說,這正是我們想要得到的。 然而,這種方法相當麻煩,接下來我們將考慮更緊湊的表示法。 但首先,讓我們對改變符號的似然函數進行對數,因為現在我們將最小化它。
我們來代替 表達 :
讓我們使用簡單的算術技術來簡化對數下的正確項並得到:
現在是擺脫操作員的時候了 “如果……那麼……”。 請注意,當一個對象 屬於班級 ,那麼在對數下的表達式中,在分母中, 上升到權力 ,如果該物件屬於該類 ,然後將 $e$ 求冪 。 因此,可以透過將兩種情況合而為一來簡化度的表示法: 。 然後 邏輯誤差函數 將採用以下形式:
根據對數規則,我們將分數翻轉並輸出符號“「(減)對於對數,我們得到:
這是損失函數 物流損失,用於將物件指派給類別的訓練集中: и .
好了,到此我告辭了,我們就結束這篇文章了。
輔助材料
1. 文學
1) 應用迴歸分析 / N. Draper、G. Smith - 第二版。 – M.:金融與統計,2(英文翻譯)
2) 機率論與數理統計/V.E. 格穆爾曼 - 第 9 版。 - 碩士:高中,2003
3) 機率論/N.I. Chernova - 新西伯利亞:新西伯利亞國立大學,2007
4) 商業分析:從資料到知識 / Paklin N. B., Oreshkov V. I. - 第二版。 — 聖彼得堡:彼得,2 年
5) 資料科學 從頭開始的資料科學 / Joel Gras - 聖彼得堡:BHV Petersburg,2017
6) 資料科學專家實用統計 / P. Bruce、E. Bruce - 聖彼得堡:BHV Petersburg,2018
2.講座、課程(影片)
4)
3. 網路資源
1)
2)
3)
4)
5)
6)
7)
8)
來源: www.habr.com