机器学习与数据挖掘机器学习和人工智能入门AI机器学习及python实现

深入支持向量机—Apple的学习笔记

2018-12-31  本文已影响0人  applecai

一,思考

1. 感知机距离公式如何推导的?

主要是先对导出w就是切线,然后按标准的就离公式d就可以推导出。

2. 拉格朗日不等式为什么梯度是平行的?

通过作图证明出来的。参考《拉格朗日乘子法如何理解.pdf》》

3. 作拉格朗日函数时后面什么情况下是+λ( ),什么时候是-λ( )?

都可以的,因为λ本来就是引入的参数,可正可负的。不影响最终结果。一般都为正。

4. KKT与拉格朗日不等式的关系?

KKT是泛化的拉格朗日不等式。一般带有一个不等式加一个等式的限制模型。

二,实验

from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt

##设置子图数量
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(7, 7))
ax0, ax1, ax2, ax3 = axes.flatten()

# 准备训练样本
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:
       核函数(这里简单介绍了sklearn中svm的四个核函数,还有precomputed及自定义的)

    LinearSVC:主要用于线性可分的情形。参数少,速度快,
    RBF:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数
    polynomial:多项式函数,degree 表示多项式的程度-----支持非线性分类
    Sigmoid:在生物学中常见的S型的函数,也称为S型生长曲线

    说明2:根据设置的参数不同,得出的分类结果及显示结果也会不同

'''
##设置子图的标题
titles = ['LinearSVC (linear kernel)',
          'SVC with polynomial (degree 3) kernel',
          'SVC with RBF kernel',  ##这个是默认的
          'SVC with Sigmoid kernel']
##生成随机试验数据(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__":
    ##选择核函数
    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

上一篇下一篇

猜你喜欢

热点阅读