zoukankan      html  css  js  c++  java
  • python_MachineLearning_感知机PLA

    感知机:线性二类分类器(linear binary classifier)
     

    感知机(perceptron)是二类分类的线性模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误差分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。

     
     
    import numpy as np
    import matplotlib.pyplot as plt
    
    datafile = open('data.txt')
    
    xx = []
    yy = []
    
    #read data from file
    line = datafile.readline()
    while line:
        p = line.split()
        print(p)
        xx.append((1, float(p[0]), float(p[1])))
        yy.append(int(p[2]))
        line = datafile.readline()
    
    print(xx)
    print(yy)
    xx_arr = np.array(xx)  #numpy的array,相当于向量,可用于运算
    yy_arr = np.array(yy)
    
    w = np.array([1, 0, 0])
    delta = 1
    
    for i in range(100):
        false = -1
        for j in range(len(xx_arr)):
            if int(yy_arr[j]) != np.sign(np.dot(w, xx_arr[j])): #numpy.dot求两向量内积
                false = j
                break
        if false == -1:
            break
        w = w + delta * yy_arr[false] * xx_arr[false] #更新w向量
    
    #使用matplotlib.pyplot绘制函数
    line_x1 = np.linspace(0,5,50) #生成[0,5]之间均匀分布的50个x1
    line_x2 = [(-w[1]*x-w[0])/w[2] for x in line_x1] #每个x1对应的x2
    plt.plot(line_x1,line_x2)
    
    #使用matplotlib.pyplot绘制点
    for i in range(len(xx_arr)):
        if yy_arr[i] == 1:
            plt.plot(float(xx_arr[i][1]), float(xx_arr[i][2]),'go')
        else:
            plt.plot(float(xx_arr[i][1]), float(xx_arr[i][2]), 'ro')
    
    plt.show()
  • 相关阅读:
    学习进度四
    每日进度二
    每日进度一
    学习进度三
    学习进度二
    安全性战术
    Linux 常用命令
    python测试框架之pytest
    Python 列表生成式和字典生成式
    使用Python在Windows 10上显示通知信息
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/9843777.html
Copyright © 2011-2022 走看看