一赤屋,思考
1. 感知機距離公式如何推導(dǎo)的?
主要是先對導(dǎo)出w就是切線,然后按標準的就離公式d就可以推導(dǎo)出。
2. 拉格朗日不等式為什么梯度是平行的疟丙?
通過作圖證明出來的悔醋。參考《拉格朗日乘子法如何理解.pdf》》
3. 作拉格朗日函數(shù)時后面什么情況下是+λ( )论寨,什么時候是-λ( )花吟?
都可以的,因為λ本來就是引入的參數(shù)们颜,可正可負的吕朵。不影響最終結(jié)果。一般都為正窥突。
4. KKT與拉格朗日不等式的關(guān)系努溃?
KKT是泛化的拉格朗日不等式。一般帶有一個不等式加一個等式的限制模型阻问。
二梧税,實驗
from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt
##設(shè)置子圖數(shù)量
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(7, 7))
ax0, ax1, ax2, ax3 = axes.flatten()
# 準備訓(xùn)練樣本
x = [[1, 8], [3, 20], [1, 15], [3, 35], [5, 35], [4, 40], [7, 80], [6, 49]]
y = [1, 1, -1, -1, 1, -1, -1, 1]
'''
說明1:
核函數(shù)(這里簡單介紹了sklearn中svm的四個核函數(shù),還有precomputed及自定義的)
LinearSVC:主要用于線性可分的情形称近。參數(shù)少第队,速度快,
RBF:主要用于線性不可分的情形刨秆。參數(shù)多凳谦,分類結(jié)果非常依賴于參數(shù)
polynomial:多項式函數(shù),degree 表示多項式的程度-----支持非線性分類
Sigmoid:在生物學(xué)中常見的S型的函數(shù),也稱為S型生長曲線
說明2:根據(jù)設(shè)置的參數(shù)不同衡未,得出的分類結(jié)果及顯示結(jié)果也會不同
'''
##設(shè)置子圖的標題
titles = ['LinearSVC (linear kernel)',
'SVC with polynomial (degree 3) kernel',
'SVC with RBF kernel', ##這個是默認的
'SVC with Sigmoid kernel']
##生成隨機試驗數(shù)據(jù)(15行2列)
rdm_arr = np.random.randint(1, 15, size=(15, 2))
def drawPoint(ax, clf, tn):
##繪制樣本點
for i in x:
ax.set_title(titles[tn])
res = clf.predict(np.array(i).reshape(1, -1))
if res > 0:
ax.scatter(i[0], i[1], c='r', marker='*')
else:
ax.scatter(i[0], i[1], c='g', marker='*')
##繪制實驗點
for i in rdm_arr:
res = clf.predict(np.array(i).reshape(1, -1))
if res > 0:
ax.scatter(i[0], i[1], c='r', marker='.')
else:
ax.scatter(i[0], i[1], c='g', marker='.')
if __name__ == "__main__":
##選擇核函數(shù)
for n in range(0, 4):
if n == 0:
clf = svm.SVC(kernel='linear').fit(x, y)
drawPoint(ax0, clf, 0)
elif n == 1:
clf = svm.SVC(kernel='poly', degree=3).fit(x, y)
drawPoint(ax1, clf, 1)
elif n == 2:
clf = svm.SVC(kernel='rbf').fit(x, y)
drawPoint(ax2, clf, 2)
else:
clf = svm.SVC(kernel='sigmoid').fit(x, y)
drawPoint(ax3, clf, 3)
plt.show()
三尸执,參考
https://www.cnblogs.com/ooon/p/5721119.html
https://www.cnblogs.com/liaohuiqiang/p/7805954.html