ในบทความนี้ เราจะวิเคราะห์การคำนวณทางทฤษฎีของการแปลง ฟังก์ชันการถดถอยเชิงเส้น в ฟังก์ชันการแปลง logit ผกผัน (หรือเรียกว่าฟังก์ชันตอบสนองลอจิสติก). จากนั้นจึงใช้คลังแสง วิธีความน่าจะเป็นสูงสุดตามแบบจำลองการถดถอยโลจิสติก เราได้ฟังก์ชันการสูญเสียมา การสูญเสียทางลอจิสติกส์หรืออีกนัยหนึ่ง เราจะกำหนดฟังก์ชันที่เลือกพารามิเตอร์ของเวกเตอร์น้ำหนักในแบบจำลองการถดถอยโลจิสติก .
โครงร่างบทความ:
- ให้เราทำซ้ำความสัมพันธ์เชิงเส้นระหว่างตัวแปรสองตัว
- เรามาระบุความจำเป็นในการเปลี่ยนแปลงกันดีกว่า ฟังก์ชันการถดถอยเชิงเส้น в ฟังก์ชั่นตอบสนองลอจิสติกส์
- เรามาดำเนินการแปลงและส่งออกกัน ฟังก์ชั่นตอบสนองลอจิสติกส์
- ลองทำความเข้าใจว่าทำไมวิธีกำลังสองน้อยที่สุดจึงไม่ดีเมื่อเลือกพารามิเตอร์ คุณสมบัติ การสูญเสียทางลอจิสติกส์
- เราใช้ วิธีความน่าจะเป็นสูงสุด เพื่อกำหนด ฟังก์ชั่นการเลือกพารามิเตอร์ :
5.1. กรณีที่ 1: ฟังก์ชั่น การสูญเสียทางลอจิสติกส์ สำหรับวัตถุที่มีการกำหนดคลาส 0 и 1:
5.2. กรณีที่ 2: ฟังก์ชั่น การสูญเสียทางลอจิสติกส์ สำหรับวัตถุที่มีการกำหนดคลาส -1 и +1:
บทความนี้ประกอบด้วยตัวอย่างง่ายๆ ซึ่งการคำนวณทั้งหมดทำได้ง่ายด้วยวาจาหรือบนกระดาษ ในบางกรณี อาจจำเป็นต้องใช้เครื่องคิดเลข ดังนั้นเตรียมตัวให้พร้อม :)
บทความนี้มีไว้สำหรับนักวิทยาศาสตร์ข้อมูลซึ่งมีความรู้เบื้องต้นเกี่ยวกับพื้นฐานของแมชชีนเลิร์นนิงในระดับเริ่มต้น
บทความนี้ยังให้โค้ดสำหรับการวาดกราฟและการคำนวณอีกด้วย รหัสทั้งหมดเขียนด้วยภาษา หลาม 2.7. ฉันขออธิบายล่วงหน้าเกี่ยวกับ "ความแปลกใหม่" ของเวอร์ชันที่ใช้ - นี่คือหนึ่งในเงื่อนไขในการเข้าเรียนหลักสูตรที่รู้จักกันดีจาก Yandex บนแพลตฟอร์มการศึกษาออนไลน์ที่มีชื่อเสียงไม่แพ้กัน 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 และในกรณีนี้เท่านั้น เราจะถือว่าผู้กู้จะต้องชำระคืนเงินกู้ให้กับธนาคาร จากนั้นสมการการถดถอยเชิงเส้นจะอยู่ในรูปแบบ:
ที่ไหน , , , - เงินเดือน -ผู้กู้คนที่ - ชำระสินเชื่อ -ผู้กู้คนที่
แทนที่เงินเดือนและการชำระเงินกู้ด้วยพารามิเตอร์คงที่ลงในสมการ คุณสามารถตัดสินใจได้ว่าจะออกหรือปฏิเสธเงินกู้
เมื่อมองไปข้างหน้า เราทราบว่า ด้วยพารามิเตอร์ที่กำหนด ฟังก์ชันการถดถอยเชิงเส้นใช้ใน ฟังก์ชั่นตอบสนองลอจิสติกส์ จะสร้างค่าจำนวนมากซึ่งจะทำให้การคำนวณซับซ้อนเพื่อกำหนดความน่าจะเป็นของการชำระคืนเงินกู้ ดังนั้นจึงเสนอให้ลดค่าสัมประสิทธิ์ของเราลง 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 RUR ต้องการรับเงินกู้เพื่อที่เขาจะได้ชำระคืนเป็นรายเดือนที่ 3.000 RUR เราพิจารณาแล้วว่าในการอนุมัติเงินกู้ เงินเดือนของ 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-มิติ ระนาบและสัมประสิทธิ์ เราจะไม่ถูกนำออกจากอากาศ แต่ได้มาตามกฎทั้งหมดและบนพื้นฐานของข้อมูลที่สะสมของผู้กู้ที่มีหรือยังไม่ได้ชำระคืนเงินกู้ และแน่นอนว่า ขณะนี้เรากำลังเลือกผู้กู้ยืมโดยใช้ค่าสัมประสิทธิ์ที่ทราบอยู่แล้ว . ที่จริงแล้ว งานของแบบจำลองการถดถอยโลจิสติกคือการกำหนดพารามิเตอร์อย่างแม่นยำ ซึ่งค่าของฟังก์ชันการสูญเสีย การสูญเสียทางลอจิสติกส์ จะมีแนวโน้มให้น้อยที่สุด แต่เกี่ยวกับวิธีการคำนวณเวกเตอร์ เราจะหาข้อมูลเพิ่มเติมในส่วนที่ 5 ของบทความ ในระหว่างนี้ เราจะกลับไปยังดินแดนแห่งพันธสัญญา - เพื่อไปหานายธนาคารและลูกค้าทั้งสามของเขา
ขอบคุณฟังก์ชัน เรารู้ว่าใครสามารถกู้ยืมได้และใครต้องถูกปฏิเสธ แต่คุณไม่สามารถไปหาผู้อำนวยการพร้อมข้อมูลดังกล่าวได้เพราะพวกเขาต้องการได้รับความน่าจะเป็นที่ผู้กู้แต่ละรายจะชำระคืนเงินกู้จากเรา จะทำอย่างไร? คำตอบนั้นง่าย - เราจำเป็นต้องแปลงฟังก์ชันด้วยวิธีใดวิธีหนึ่ง ซึ่งมีค่าอยู่ในช่วง ไปยังฟังก์ชันที่มีค่าจะอยู่ในช่วง . และมีฟังก์ชันดังกล่าวอยู่เรียกว่า ฟังก์ชันตอบสนองโลจิสติกหรือการแปลงโลจิตผกผัน. พบปะ:
เรามาดูกันทีละขั้นตอนว่ามันทำงานอย่างไร ฟังก์ชั่นตอบสนองลอจิสติกส์. โปรดทราบว่าเราจะเดินไปในทิศทางตรงกันข้ามคือ เราจะถือว่าเรารู้ค่าความน่าจะเป็นซึ่งอยู่ในช่วงตั้งแต่ ไปยัง จากนั้นเราจะ "คลาย" ค่านี้ให้เท่ากับช่วงตัวเลขทั้งหมด ไปยัง .
03. เราได้รับฟังก์ชันตอบสนองลอจิสติกส์
ขั้นตอนที่ 1 แปลงค่าความน่าจะเป็นเป็นช่วง
ในระหว่างการเปลี่ยนแปลงฟังก์ชัน в ฟังก์ชั่นตอบสนองลอจิสติกส์ เราจะปล่อยให้นักวิเคราะห์เครดิตของเราอยู่คนเดียวและไปเยี่ยมชมเจ้ามือรับแทงแทน ไม่ แน่นอน เราจะไม่วางเดิมพัน ทั้งหมดที่เราสนใจคือความหมายของสำนวน เช่น โอกาสคือ 4 ต่อ 1 อัตราต่อรองที่นักเดิมพันทุกคนคุ้นเคยคืออัตราส่วนของ “ความสำเร็จ” ต่อ “ ความล้มเหลว” ในแง่ของความน่าจะเป็น อัตราต่อรองคือความน่าจะเป็นของเหตุการณ์ที่เกิดขึ้น หารด้วยความน่าจะเป็นของเหตุการณ์ที่ไม่เกิดขึ้น มาเขียนสูตรโอกาสที่เหตุการณ์จะเกิดขึ้นกันดีกว่า :
ที่ไหน - ความน่าจะเป็นของเหตุการณ์ที่เกิดขึ้น - ความน่าจะเป็นของเหตุการณ์ที่ไม่เกิดขึ้น
เช่น ถ้าความน่าจะเป็นที่ม้าอายุน้อย แข็งแรง และขี้เล่น ชื่อเล่นว่า "เวเทอร็อก" จะเอาชนะหญิงชราป้อแป้ชื่อ "มาทิลด้า" ในการแข่งขันได้เท่ากับ แล้วโอกาสสำเร็จของ “เวเทอรอก” ก็คงเป็น к และในทางกลับกันการรู้อัตราต่อรองเราก็คำนวณความน่าจะเป็นได้ไม่ยาก :
ดังนั้นเราจึงได้เรียนรู้ที่จะ "แปล" ความน่าจะเป็นเป็นโอกาสซึ่งนำค่ามา ไปยัง . เรามาเรียนรู้ที่จะ "แปล" ความน่าจะเป็นของเส้นจำนวนทั้งหมดกันดีกว่า ไปยัง .
ขั้นตอนที่ 2 แปลงค่าความน่าจะเป็นเป็นช่วง
ขั้นตอนนี้ง่ายมาก - ลองนำลอการิทึมของอัตราต่อรองไปที่ฐานของเลขออยเลอร์ และเราได้รับ:
ตอนนี้เรารู้แล้วว่าถ้า แล้วจึงคำนวณค่า จะง่ายมาก และยิ่งไปกว่านั้น ควรเป็นบวก: . นี่เป็นเรื่องจริง
ด้วยความอยากรู้ เรามาดูกันดีกว่าว่าจะเป็นเช่นไร จากนั้นเราคาดว่าจะเห็นค่าลบ . เราตรวจสอบ: . ถูกตัอง.
ตอนนี้เรารู้วิธีแปลงค่าความน่าจะเป็นแล้ว ไปยัง ตลอดเส้นจำนวนทั้งหมดจาก ไปยัง . ในขั้นตอนถัดไปเราจะทำตรงกันข้าม
ในตอนนี้ เราสังเกตว่าตามกฎของลอการิทึม การรู้ค่าของฟังก์ชัน คุณสามารถคำนวณอัตราต่อรองได้:
วิธีการกำหนดอัตราต่อรองนี้จะเป็นประโยชน์สำหรับเราในขั้นตอนถัดไป
ขั้นตอนที่ 3 ลองหาสูตรมาพิจารณากัน
เราจึงเรียนรู้รู้ , ค้นหาค่าฟังก์ชัน . อย่างไรก็ตาม ที่จริงแล้ว เราต้องการสิ่งที่ตรงกันข้าม นั่นคือการรู้คุณค่า เพื่อค้นหา . เมื่อต้องการทำเช่นนี้ ให้เราหันมาใช้แนวคิดเช่นฟังก์ชันอัตราต่อรองผกผัน ตามที่:
ในบทความเราจะไม่ได้รับสูตรข้างต้น แต่เราจะตรวจสอบโดยใช้ตัวเลขจากตัวอย่างด้านบน เรารู้ว่าด้วยอัตราต่อรอง 4 ต่อ 1 () ความน่าจะเป็นของเหตุการณ์ที่เกิดขึ้นคือ 0.8 (). มาทำการทดแทนกัน: . สิ่งนี้เกิดขึ้นพร้อมกับการคำนวณของเราก่อนหน้านี้ เดินหน้าต่อไป
ในขั้นตอนสุดท้ายเราอนุมานได้ว่า ซึ่งหมายความว่าคุณสามารถทำการทดแทนในฟังก์ชันอัตราต่อรองผกผันได้ เราได้รับ:
หารทั้งเศษและส่วนด้วย , แล้ว:
ในกรณีนี้ เพื่อให้แน่ใจว่าเราไม่ได้ทำผิดพลาดใดๆ เราจะทำการตรวจสอบเล็กๆ น้อยๆ อีกครั้งหนึ่ง ในขั้นตอนที่ 2 เราสำหรับ ตัดสินใจว่า . จากนั้นจึงทำการแทนค่า เข้าสู่ฟังก์ชันการตอบสนองด้านลอจิสติกส์ที่เราคาดว่าจะได้รับ . เราทดแทนและรับ:
ขอแสดงความยินดี ผู้อ่านที่รัก เราเพิ่งได้รับและทดสอบฟังก์ชันการตอบสนองลอจิสติกส์ ลองดูกราฟของฟังก์ชันกัน
กราฟที่ 3 “ฟังก์ชันตอบสนองลอจิสติกส์”
รหัสสำหรับการวาดกราฟ
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']]
ดังนั้นเราจึงได้กำหนดความน่าจะเป็นของการชำระคืนเงินกู้ โดยทั่วไปสิ่งนี้ดูเหมือนจะเป็นจริง
แท้จริงแล้ว ความน่าจะเป็นที่ Vasya ซึ่งมีเงินเดือน 120.000 RUR จะสามารถให้ธนาคารได้ 3.000 RUR ทุกเดือนนั้นเกือบถึง 100% อย่างไรก็ตาม เราต้องเข้าใจว่าธนาคารสามารถออกเงินกู้ให้กับ Lesha ได้หากนโยบายของธนาคารกำหนดไว้ เช่น เพื่อให้สินเชื่อแก่ลูกค้าที่มีความน่าจะเป็นในการชำระคืนเงินกู้มากกว่า 0.3 กล่าว เพียงแต่ในกรณีนี้ธนาคารจะสร้างสำรองที่มากขึ้นสำหรับการสูญเสียที่อาจเกิดขึ้น
ควรสังเกตด้วยว่าอัตราส่วนเงินเดือนต่อการจ่ายเงินอย่างน้อย 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 หรือไม่ก็ตามในเวลาเดียวกัน)
ฟังก์ชันความน่าจะเป็น เชื่อมโยงความน่าจะเป็นของกลุ่มตัวอย่างกับค่าของพารามิเตอร์การกระจาย
ในกรณีของเรา ตัวอย่างการฝึกเป็นแบบแผน Bernoulli ทั่วไป ซึ่งตัวแปรสุ่มรับค่าเพียงสองค่าเท่านั้น: หรือ . ดังนั้น ความน่าจะเป็นตัวอย่างจึงสามารถเขียนเป็นฟังก์ชันความน่าจะเป็นของพารามิเตอร์ได้ ดังต่อไปนี้:
รายการข้างต้นสามารถตีความได้ดังนี้ ความน่าจะเป็นร่วมกันที่ 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 ใช้ค่าที่แตกต่างกัน: 4.24 สำหรับ Vasya และ 1.0 สำหรับ Fedya ตัวอย่างเช่น หาก Fedya ได้รับลำดับความสำคัญมากขึ้นหรือขอสินเชื่อน้อยลง ความน่าจะเป็นในการชำระคืนเงินกู้ให้กับ Vasya และ Fedya ก็จะใกล้เคียงกัน กล่าวอีกนัยหนึ่ง ไม่สามารถหลอกการพึ่งพาเชิงเส้นได้ และถ้าเราคำนวณอัตราต่อรองจริงๆ และไม่ได้เอามันออกไปจากอากาศเราสามารถพูดได้อย่างปลอดภัยว่าค่านิยมของเรา ดีที่สุดให้เราประมาณความน่าจะเป็นของการชำระคืนเงินกู้ของผู้กู้แต่ละราย แต่เนื่องจากเราตกลงที่จะถือว่าการกำหนดค่าสัมประสิทธิ์ ดำเนินการตามกฎทั้งหมด จากนั้นเราจะถือว่าเป็นเช่นนั้น - ค่าสัมประสิทธิ์ของเราช่วยให้เราสามารถประมาณความน่าจะเป็นได้ดีขึ้น :)
อย่างไรก็ตามเราพูดนอกเรื่อง ในส่วนนี้ เราต้องเข้าใจว่าเวกเตอร์ของตุ้มน้ำหนักถูกกำหนดอย่างไร ซึ่งจำเป็นในการประเมินความน่าจะเป็นของการชำระคืนเงินกู้ของผู้กู้แต่ละราย
ให้เราสรุปสั้น ๆ เกี่ยวกับคลังแสงที่เรามองหาอัตราต่อรอง :
1. เราถือว่าความสัมพันธ์ระหว่างตัวแปรเป้าหมาย (ค่าทำนาย) และปัจจัยที่มีอิทธิพลต่อผลลัพธ์จะเป็นเส้นตรง ด้วยเหตุนี้จึงมีการใช้ ฟังก์ชันการถดถอยเชิงเส้น ชนิด เส้นแบ่งวัตถุ (ไคลเอนต์) ออกเป็นคลาส и หรือ (ลูกค้าที่สามารถชำระคืนเงินกู้ได้และผู้ที่ไม่สามารถชำระคืนเงินกู้ได้) ในกรณีของเรา สมการจะมีรูปแบบ .
2. เราใช้ ฟังก์ชันบันทึกผกผัน ชนิด เพื่อกำหนดความน่าจะเป็นของวัตถุที่อยู่ในคลาส .
3. เราถือว่าชุดการฝึกอบรมของเราเป็นการดำเนินการทั่วไป แผนการของเบอร์นูลลีนั่นคือสำหรับแต่ละวัตถุจะมีการสร้างตัวแปรสุ่มซึ่งมีความน่าจะเป็น (ของตัวเองสำหรับแต่ละวัตถุ) รับค่า 1 และความน่าจะเป็น - 0
4. เรารู้ว่าเราต้องเพิ่มอะไรให้สูงสุด ฟังก์ชันความน่าจะเป็นตัวอย่าง โดยคำนึงถึงปัจจัยที่ยอมรับเพื่อให้ตัวอย่างที่มีอยู่เป็นไปได้มากที่สุด กล่าวอีกนัยหนึ่ง เราจำเป็นต้องเลือกพารามิเตอร์ที่ตัวอย่างจะเป็นไปได้มากที่สุด ในกรณีของเรา พารามิเตอร์ที่เลือกคือความน่าจะเป็นของการชำระคืนเงินกู้ ซึ่งจะขึ้นอยู่กับค่าสัมประสิทธิ์ที่ไม่ทราบ . เราจึงต้องหาเวกเตอร์ของน้ำหนักแบบนั้น ซึ่งความน่าจะเป็นของกลุ่มตัวอย่างจะสูงสุด
5. เรารู้ว่าอะไรจะทำให้เกิดประโยชน์สูงสุด ฟังก์ชันความน่าจะเป็นตัวอย่าง สามารถใช้ วิธีความน่าจะเป็นสูงสุด. และเรารู้เคล็ดลับยุ่งยากทั้งหมดในการทำงานกับวิธีนี้
นี่คือลักษณะการเคลื่อนไหวหลายขั้นตอน :)
ตอนนี้โปรดจำไว้ว่าในตอนต้นของบทความเราต้องการได้รับฟังก์ชันการสูญเสียสองประเภท การสูญเสียทางลอจิสติกส์ ขึ้นอยู่กับวิธีการกำหนดคลาสอ็อบเจ็กต์ มันเกิดขึ้นว่าในปัญหาการจำแนกประเภทที่มีสองคลาส คลาสจะถูกแสดงเป็น и หรือ . เอาต์พุตจะมีฟังก์ชันการสูญเสียที่สอดคล้องกัน ทั้งนี้ขึ้นอยู่กับสัญกรณ์
กรณีที่ 1 การจำแนกประเภทของวัตถุเป็น и
ก่อนหน้านี้เมื่อพิจารณาความน่าจะเป็นของกลุ่มตัวอย่างซึ่งคำนวณความน่าจะเป็นของการชำระหนี้ของผู้กู้ตามปัจจัยและค่าสัมประสิทธิ์ที่กำหนด เราใช้สูตร:
แท้จริง คือความหมาย ฟังก์ชั่นตอบสนองลอจิสติกส์ สำหรับเวกเตอร์น้ำหนักที่กำหนด
ถ้าอย่างนั้น ไม่มีอะไรขัดขวางเราไม่ให้เขียนฟังก์ชันความน่าจะเป็นตัวอย่างดังนี้:
มันเกิดขึ้นว่าบางครั้งเป็นเรื่องยากสำหรับนักวิเคราะห์มือใหม่บางคนที่จะเข้าใจทันทีว่าฟังก์ชันนี้ทำงานอย่างไร ลองดูตัวอย่างสั้นๆ 4 ตัวอย่างที่จะอธิบายทุกอย่างให้ชัดเจน:
1. ถ้า (เช่น ตามตัวอย่างการฝึก วัตถุอยู่ในคลาส +1) และอัลกอริทึมของเรา กำหนดความน่าจะเป็นของการจัดประเภทวัตถุเป็นคลาส เท่ากับ 0.9 จากนั้นความน่าจะเป็นของกลุ่มตัวอย่างชิ้นนี้จะถูกคำนวณดังนี้
2. ถ้า และ จากนั้นการคำนวณจะเป็นดังนี้:
3. ถ้า และ จากนั้นการคำนวณจะเป็นดังนี้:
4. ถ้า และ จากนั้นการคำนวณจะเป็นดังนี้:
เห็นได้ชัดว่าฟังก์ชันความน่าจะเป็นจะถูกขยายให้ใหญ่สุดในกรณีที่ 1 และ 3 หรือในกรณีทั่วไป - ด้วยค่าที่เดาได้อย่างถูกต้องของความน่าจะเป็นในการกำหนดวัตถุให้กับคลาส .
เนื่องจากข้อเท็จจริงที่ว่าเมื่อพิจารณาความน่าจะเป็นในการกำหนดวัตถุให้กับชั้นเรียน เราแค่ไม่รู้สัมประสิทธิ์เท่านั้น แล้วเราจะค้นหาพวกเขา ตามที่กล่าวไว้ข้างต้น นี่คือปัญหาการหาค่าเหมาะที่สุด โดยอันดับแรกเราต้องค้นหาอนุพันธ์ของฟังก์ชันความน่าจะเป็นเทียบกับเวกเตอร์ของน้ำหนัก . อย่างไรก็ตาม ก่อนอื่น เราควรทำให้งานง่ายขึ้น: เราจะมองหาอนุพันธ์ของลอการิทึม ฟังก์ชันความน่าจะเป็น.
ทำไมหลังจากลอการิทึมใน ฟังก์ชั่นข้อผิดพลาดลอจิสติกส์,เราเปลี่ยนป้ายจาก บน . ทุกอย่างเป็นเรื่องง่าย เนื่องจากในปัญหาในการประเมินคุณภาพของแบบจำลอง เป็นเรื่องปกติที่จะลดค่าของฟังก์ชันให้เหลือน้อยที่สุด เราจึงคูณทางด้านขวาของนิพจน์ด้วย และด้วยเหตุนี้ แทนที่จะขยายใหญ่สุด ตอนนี้เราจึงย่อฟังก์ชันให้เหลือน้อยที่สุด
จริงๆ แล้ว ต่อหน้าต่อตาคุณแล้ว ฟังก์ชันการสูญเสียนั้นได้รับมาอย่างอุตสาหะ - การสูญเสียทางลอจิสติกส์ สำหรับชุดฝึกซ้อมที่มี XNUMX คลาส: и .
ทีนี้ หากต้องการหาสัมประสิทธิ์ เราแค่ต้องหาอนุพันธ์ ฟังก์ชั่นข้อผิดพลาดลอจิสติกส์ จากนั้นใช้วิธีการหาค่าเหมาะที่สุดเชิงตัวเลข เช่น การไล่ระดับลงมาหรือการไล่ระดับแบบสุ่ม ให้เลือกค่าสัมประสิทธิ์ที่เหมาะสมที่สุด . แต่เนื่องจากมีบทความจำนวนมากจึงเสนอให้ดำเนินการสร้างความแตกต่างด้วยตัวเองหรือบางทีนี่อาจเป็นหัวข้อสำหรับบทความถัดไปที่มีเลขคณิตมากมายโดยไม่มีตัวอย่างโดยละเอียด
กรณีที่ 2 การจำแนกประเภทของวัตถุเป็น и
แนวทางที่นี่จะเหมือนกับชั้นเรียน и แต่เป็นเส้นทางของตัวเองไปยังเอาต์พุตของฟังก์ชันการสูญเสีย การสูญเสียทางลอจิสติกส์,จะดูหรูหรามากขึ้น. มาเริ่มกันเลย. สำหรับฟังก์ชันความน่าจะเป็น เราจะใช้ตัวดำเนินการ "ถ้า...ถ้าอย่างนั้น...". นั่นก็คือถ้า วัตถุที่ th อยู่ในชั้นเรียน จากนั้นในการคำนวณความน่าจะเป็นของกลุ่มตัวอย่าง เราใช้ความน่าจะเป็น ถ้าวัตถุนั้นเป็นของคลาส แล้วเราก็ทดแทนความน่าจะเป็น . นี่คือลักษณะของฟังก์ชันความน่าจะเป็น:
ให้เราอธิบายด้วยนิ้วของเราว่ามันทำงานอย่างไร ลองพิจารณา 4 กรณี:
1. ถ้า и จากนั้นความน่าจะเป็นของการสุ่มตัวอย่างจะ “ไป”
2. ถ้า и จากนั้นความน่าจะเป็นของการสุ่มตัวอย่างจะ “ไป”
3. ถ้า и จากนั้นความน่าจะเป็นของการสุ่มตัวอย่างจะ “ไป”
4. ถ้า и จากนั้นความน่าจะเป็นของการสุ่มตัวอย่างจะ “ไป”
เห็นได้ชัดว่าในกรณีที่ 1 และ 3 เมื่ออัลกอริธึมกำหนดความน่าจะเป็นอย่างถูกต้อง ฟังก์ชันความน่าจะเป็น จะถูกขยายให้ใหญ่สุด นั่นคือนี่คือสิ่งที่เราต้องการได้รับ อย่างไรก็ตาม วิธีการนี้ค่อนข้างยุ่งยาก และต่อไปเราจะพิจารณารูปแบบที่กะทัดรัดกว่านี้ แต่ก่อนอื่น เรามาลอการิทึมฟังก์ชันความน่าจะเป็นด้วยการเปลี่ยนเครื่องหมาย เนื่องจากตอนนี้เราจะย่อให้เล็กสุด
เรามาทดแทนกัน การแสดงออก :
มาลดความซับซ้อนของพจน์ที่ถูกต้องภายใต้ลอการิทึมโดยใช้เทคนิคทางคณิตศาสตร์ง่ายๆ แล้วได้:
ตอนนี้ถึงเวลากำจัดโอเปอเรเตอร์แล้ว "ถ้า...ถ้าอย่างนั้น...". โปรดทราบว่าเมื่อมีวัตถุ อยู่ในชั้นเรียน จากนั้นในนิพจน์ใต้ลอการิทึม ในตัวส่วน ยกขึ้นสู่อำนาจ ถ้าวัตถุนั้นเป็นของคลาส จากนั้น $e$ จะถูกยกกำลัง . ดังนั้น สัญกรณ์สำหรับระดับจึงสามารถทำให้ง่ายขึ้นโดยการรวมทั้งสองกรณีเป็นหนึ่งเดียว: . แล้วก็ ฟังก์ชั่นข้อผิดพลาดลอจิสติกส์ จะอยู่ในรูปแบบ:
ตามกฎของลอการิทึมให้พลิกเศษส่วนแล้วใส่เครื่องหมาย "" (ลบ) สำหรับลอการิทึม เราได้:
นี่คือฟังก์ชันการสูญเสีย การสูญเสียลอจิสติกส์ซึ่งใช้ในชุดการฝึกกับวัตถุที่กำหนดให้กับชั้นเรียน: и .
เมื่อถึงจุดนี้ ฉันขอลาและสรุปบทความนี้
วัสดุเสริม
1. วรรณกรรม
1) การวิเคราะห์การถดถอยประยุกต์ / N. Draper, G. Smith - 2nd ed. – อ.: การเงินและสถิติ, 1986 (แปลจากภาษาอังกฤษ)
2) ทฤษฎีความน่าจะเป็นและสถิติทางคณิตศาสตร์ / V.E. Gmurman - ฉบับที่ 9 - ม.: มัธยมปลาย, 2003
3) ทฤษฎีความน่าจะเป็น / N.I. เชอร์โนวา - โนโวซีบีสค์: มหาวิทยาลัยแห่งรัฐโนโวซีบีร์สค์, 2007
4) การวิเคราะห์ธุรกิจ: จากข้อมูลสู่ความรู้ / Paklin N. B. , Oreshkov V. I. - 2nd ed — เซนต์ปีเตอร์สเบิร์ก: ปีเตอร์ 2013
5) วิทยาศาสตร์ข้อมูล วิทยาศาสตร์ข้อมูลตั้งแต่เริ่มต้น / Joel Gras - เซนต์ปีเตอร์สเบิร์ก: BHV ปีเตอร์สเบิร์ก, 2017
6) สถิติเชิงปฏิบัติสำหรับผู้เชี่ยวชาญด้าน Data Science / P. Bruce, E. Bruce - เซนต์ปีเตอร์สเบิร์ก: BHV ปีเตอร์สเบิร์ก, 2018
2. การบรรยายหลักสูตร (วิดีโอ)
1)
2)
3)
4)
5)
3. แหล่งข้อมูลอินเทอร์เน็ต
1)
2)
3)
4)
7)
ที่มา: will.com