全国服务热线:

15861139266

自编函数实现,苏州PLC培训,苏州上位机培训,苏州机器视觉培训,苏州工业机器人培训,苏州电工培训
发布时间:2023-05-09 09:21:24 点击次数:390

自编函数实现

1.将数据集分割为特征属性与类别


from numpy import *

import matplotlib.pyplot as plt


#输出特征值矩阵、目标变量

def loadDataSet():

    dataMat = []

    labelMat = []

    fr = open('testSet.txt')

    for line in fr.readlines():

        lineArr = line.strip().split()  #移除空格并分割

        dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])  #X0设置为1,X1和X2从文件中获得

        labelMat.append(int(lineArr[2]))

    return dataMat, labelMat   #dataMat 100行3列,labelMat 1行列表

2.sigmoid函数(支持向量的运算)


def sigmoid(inX):

    return 1.0/(1+exp(-inX))

3.梯度上升算法得到最优的权系数


def gradAscent(dataMatIn, classLabels):

    dataMatrix = mat(dataMatIn)    #转化为NumPy矩阵类型,100行3列

    labelMat = mat(classLabels).transpose()   #转化为NumPy矩阵类型并转置,100行1列

    m, n = shape(dataMatrix)  #获得行数、列数

    alpha = 0.001  #设置步长

    maxCycles = 500   #迭代步数

    weights = ones((n, 1))  #权系数初始化,3行1列

    for k in range(maxCycles):

        h = sigmoid(dataMatrix*weights)     #矩阵乘法

        error = (labelMat - h)        #向量的减法

        weights = weights + alpha*dataMatrix.transpose()*error  

    return weights

4.画分割线与散点图


def plotBestFit(wei):

    weights = wei.getA()  #将NumPy矩阵转化为NumPy数组,不然下面根据索引提取会越界

    # weights = array(wei)  #该方式也可以转换

    dataMat, labelMat = loadDataSet()

    dataArr = array(dataMat)

    n = shape(dataArr)[0]

    xcord1 = []

    ycord1 = []

    xcord2 = []

    ycord2 = []

    for i in range(n):

        #提取属于1类的数据

        if int(labelMat[i]) == 1:

            xcord1.append(dataArr[i, 1])

            ycord1.append(dataArr[i, 2])

        #提取属于0类的数据

        else:

            xcord2.append(dataArr[i, 1])

            ycord2.append(dataArr[i, 2])

    fig = plt.figure()

    ax = fig.add_subplot(111)

    ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')

    ax.scatter(xcord2, ycord2, s=30, c='green')

    x = arange(-3.0, 3.0, 0.1)  #设置分类线的范围

    y = (-weights[0]-weights[1]*x)/weights[2]   #此处x是X1,y是X2, 0=W0*X0+W1*X1+W2*X2  X0=1

    ax.plot(x, y)

    plt.xlabel('X1')






1.png

立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607082@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1

技术支持: 易动力网络