• 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()
  • 相关阅读:
    附021.Traefik-ingress部署及使用
    附020.Nginx-ingress部署及使用
    附019.Rancher搭建及使用
    附018.K3S-ETCD高可用部署
    053.Kubernetes集群管理-Helm部署及使用
    052.Kubernetes集群管理-故障排错指南
    051.Kubernetes集群管理-日志管理
    049.Kubernetes集群管理-集群监控Metrics
    048.Kubernetes集群管理-资源限制实践
    047.Kubernetes集群管理-资源及配额管理
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/9843777.html
Copyright © 2020-2023  润新知