ฉันกำลังพยายามตีความน้ำหนักของตัวแปรที่กำหนดโดยการปรับ SVM เชิงเส้นให้เหมาะสม
วิธีที่ดีในการทำความเข้าใจวิธีคำนวณน้ำหนักและวิธีตีความน้ำหนักในกรณีของ SVM เชิงเส้นคือการคำนวณด้วยมือในตัวอย่างง่ายๆ
ตัวอย่าง
พิจารณาชุดข้อมูลต่อไปนี้ซึ่งแยกได้เป็นเส้นตรง
import numpy as np
X = np.array([[3,4],[1,4],[2,3],[6,-1],[7,-1],[5,-3]] )
y = np.array([-1,-1, -1, 1, 1 , 1 ])
การแก้ปัญหา SVM โดยการตรวจสอบ
โดยการตรวจสอบเราจะเห็นว่าเส้นเขตแดนที่แยกจุดที่มี "ขอบ" ที่ใหญ่ที่สุดเป็นบรรทัด3 เนื่องจากน้ำหนักของ SVM เป็นสัดส่วนกับสมการของบรรทัดการตัดสินใจนี้ (ไฮเปอร์เพลนในมิติที่สูงกว่า) โดยใช้การเดาแรกของพารามิเตอร์จะเป็นx2=x1−3wTx+b=0
w=[1,−1] b=−3
ทฤษฎี SVM บอกเราว่า "width" ของอัตรากำไรขั้นต้นจะได้รับจากW} ใช้การคาดเดาดังกล่าวข้างต้นที่เราจะได้รับความกว้างของ{2} ซึ่งโดยการตรวจสอบไม่ถูกต้อง ความกว้างคือ2||w||222√=2–√42–√
จำได้ว่าการขยายขอบเขตด้วยตัวประกอบของไม่ได้เปลี่ยนเส้นแบ่งเขตดังนั้นเราสามารถสรุปสมการc
cx1−cx2−3c=0
w=[c,−c] b=−3c
เสียบกลับเข้าไปในสมการสำหรับความกว้างที่เราได้รับ
2||w||22–√cc=14=42–√=42–√
ดังนั้นพารามิเตอร์ (หรือสัมประสิทธิ์) อยู่ในความเป็นจริง
w=[14,−14] b=−34
(ฉันใช้ scikit เรียนรู้)
ดังนั้นฉันนี่คือรหัสเพื่อตรวจสอบการคำนวณด้วยตนเองของเรา
from sklearn.svm import SVC
clf = SVC(C = 1e5, kernel = 'linear')
clf.fit(X, y)
print('w = ',clf.coef_)
print('b = ',clf.intercept_)
print('Indices of support vectors = ', clf.support_)
print('Support vectors = ', clf.support_vectors_)
print('Number of support vectors for each class = ', clf.n_support_)
print('Coefficients of the support vector in the decision function = ', np.abs(clf.dual_coef_))
- w = [[0.25-0.25]] b = [-0.75]
- ดัชนีสนับสนุนเวกเตอร์ = [2 3]
- สนับสนุนเวกเตอร์ = [[2. 3. ] [6. -1.]]
- จำนวนเวกเตอร์สนับสนุนสำหรับแต่ละชั้น = [1 1]
- สัมประสิทธิ์ของเวกเตอร์สนับสนุนในฟังก์ชันการตัดสินใจ = [[0.0625 0.0625]
เครื่องหมายของน้ำหนักมีส่วนร่วมกับชั้นเรียนหรือไม่?
ไม่จริง ๆ แล้วสัญญาณของตุ้มน้ำหนักเกี่ยวข้องกับสมการของระนาบเขตแดน
แหล่ง
https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf