统计学习方法-感知机-python

作者: songcmic | 来源:发表于2017-10-23 19:48 被阅读90次

    阅读原文
    感知机是二分类的线性分类器,对应于输入空间中将实例划分为正负两类的分离超平面,基于分类的损失函数,利用梯度下降法对损失函数进行最小化,求得感知及模型。

    感知机算法

    算法描述:

    梯度下降

    将损失函数梯度下降过程定义为函数

    以下代码命名为perceptron.py

    import numpy as np
    #X是一个列表,形式如[[x1,y1],[x2,y2],...],Y是一个类别的集合,也是一个列表如[1,1,-1,-1,...],对应于X中的每一个实例,lrate是学习率
    def gradient(X, Y, lrate):
        w = np.matrix([0,0])
        b = 0
        length = len(X)
        while True :
            for i in range(length + 1):
                if i == length:
                    return w, b
                elif (Y[i]*(w * np.matrix(X[i]).T + b) <= 0):
                    w = w + lrate * Y[i] * np.matrix(X[i])
                    b = b + lrate * Y[i]
                    break
    

    实例训练

    训练数据集:X = {(3,3),(4,3),(1,1)}, Y = {1,1,-1}

    规定学习率为1

    以下代码命名为test.py

    import perceptron
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    #导入数据
    X = [[3,3],[4,3],[1,1]]
    Y = Y = [1,1,-1]
    lrate = 1
    
    #使用梯度下降求解划分平面参数w,b
    w, b = perceptron.gradient(X, Y, lrate)
    print(w, b)
    #绘制划分超平面
    linex = np.linspace(0,5,5)
    liney = -(w[0,0]/w[0,1])*linex - (1/w[0,1])*b 
    plt.plot(linex, liney, color = 'r')
    #绘制数据点
    X = np.array(X)
    Y = np.array(Y)
    for i in range(0,len(X)):
        if Y[i] == 1:
            #正例用圆点表示
            plt.scatter(X[i][0],X[i][1],marker="o",alpha=0.8,s=50)
        else:
            #负例用×表示
            plt.scatter(X[i][0],X[i][1],marker="x",alpha=0.8,s=50)
    #显示图片
    plt.show()
    

    在pyCharm下运行结果如下:

    [[1 1]] -3
    

    阅读原文

    相关文章

      网友评论

        本文标题:统计学习方法-感知机-python

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