美文网首页
2020-05-28

2020-05-28

作者: 数据小黑升值记 | 来源:发表于2020-05-28 21:44 被阅读0次

首先,约束优化的话题很多,也有很多材料。即使是我们的子话题:凸优化,也是很庞大的。一个不错的起始点是 https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf。对于约束优化,你可以查看 http://www.mit.edu/~dimitrib/Constrained-Opt.pdf

特别是在 Python 中,CVXOPT 包拥有多种凸优化方法,其中之一就是我们的平方规划问题(cvxopt.solvers.qp)。

同样,也有 libsvm 的 Python 接口,或者 libsvm 包。我们选择不要用这些东西,因为 SVM 的最优化问题几乎就是 SVM 问题的全部了。

现在,为了使用 Python 来开始写 SVM,我们以这些导入来开始。

import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np
style.use('ggplot')

我们使用 Matplotlib 来绘图,NumPy 来处理数组。下面我们会拥有一些起始数据:

data_dict = {-1:np.array([[1,7],
                          [2,8],
                          [3,8],]),
             
             1:np.array([[5,1],
                         [6,-1],
                         [7,3],])}

现在我们打算开始构建我们的 SVM 类。如果你不熟悉面向对象编程,不要害怕。我们这里的例子是个非常基本的 OOP 形式。只要知道 OOP 创建带有对象,类中带有属性、函数(实际上是方法),以及我们使用self变量来代表对象本身。解释再多也没有意义,已经足以开始了。

class Support_Vector_Machine:
    def __init__(self, visualization=True):
        self.visualization = visualization
        self.colors = {1:'r',-1:'b'}
        if self.visualization:
            self.fig = plt.figure()
            self.ax = self.fig.add_subplot(1,1,1)

类的__init__方法是使用类创建对象时,执行的方法。其它方法只在调用时执行。对于每个方法,我们传入self作为第一个参数,主要是一种约定。下面,我们添加可视化参数。我们想看看 SVM,所以将其设为True。下面米可以看见一些变量,例如self.colorself.visualization。这样做能够让我们在类的其它方法中,引用self.color,最后,如果我们开启了可视化,我们打算绘制我们的图像。

下面,让我们继续并体感家更多方法:fitpredict

class Support_Vector_Machine:
    def __init__(self, visualization=True):
        self.visualization = visualization
        self.colors = {1:'r',-1:'b'}
        if self.visualization:
            self.fig = plt.figure()
            self.ax = self.fig.add_subplot(1,1,1)
    # train
    def fit(self, data):
        pass

    def predict(self,features):
        # sign( x.w+b )
        classification = np.sign(np.dot(np.array(features),self.w)+self.b)

        return classification

fit方法会用于训练我们的 SVM。这就是最优化的步骤。一旦我们完成了训练,predict方法会预测新特征集的值,一旦我们知道了wb,它就是sign(x·w+b)

目前为止的代码。

import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np
style.use('ggplot')

class Support_Vector_Machine:
    def __init__(self, visualization=True):
        self.visualization = visualization
        self.colors = {1:'r',-1:'b'}
        if self.visualization:
            self.fig = plt.figure()
            self.ax = self.fig.add_subplot(1,1,1)
    # train
    def fit(self, data):
        pass

    def predict(self,features):
        # sign( x.w+b )
        classification = np.sign(np.dot(np.array(features),self.w)+self.b)

        return classification
        
data_dict = {-1:np.array([[1,7],
                          [2,8],
                          [3,8],]),
             
             1:np.array([[5,1],
                         [6,-1],
                         [7,3],])}

相关文章

  • 女孩子一定要知道的事

    女孩子一定要知道 大大写作家 关注 1.282 · 字数 295 · 阅读 226 2020-05-28 22:5...

  • 2020-05-28

    2020-05-28 昨天听说要对各类研究数据给客户汇报,领导帮我梳理了一遍,可是自己还是没有底,今天早上再次和领...

  • 心平气和/心中的小天地

    2020-05-28 只要想做成,定下心,“一切都往那边走”。 就是可以做到的! 都是自己在做选择。 相信自己就是...

  • 马上六岁啦

    2020-05-28 昨天晚上我在整理衣服,枝宝跑过来贴着穿衣镜各种挤眉弄眼,完了忽然对我说:“妈妈,我真是个天才...

  • 【099】2020-05-28

    01 这个2020-05-28数字有天机?那为何钟爱? 今天看了这个数字,莫名心中充喜,好久没有这个名状啦,什么是...

  • 2020-11-01

    情景剧策划方案最新2020策划方案汇总 学习啦 思欣 2020-05-28 09:29:28 情景剧通常有一个封...

  • 论葡京的倒掉

    写于2020-05-28 听说,澳门葡京的支柱倒掉了,听说而已,我没有亲见。但我却读过支柱未倒时的新闻,被称为“爱...

  • 周记

    2020-05-28 不纠结于境遇,在不同的境遇里做好自己的事情,不忘初心。 不同角度看问题是不同的。而看问题不应...

  • 2020-05-29

    2020-05-28 成长日志第343天 家名:温暖有爱之家 家规:真诚待人不自欺,学会看见懂得感恩,正面如是的表...

  • 家有四宝!龙凤成长记之第18天

    2020-05-28 1. 儿子练了大提琴,又去上大提琴课,老师夸他震音进步了很多!早上跟爸爸出去吃早餐,晚上又跟...

网友评论

      本文标题:2020-05-28

      本文链接:https://www.haomeiwen.com/subject/ymuzahtx.html