• 逻辑回归和sigmoid函数分类


    逻辑回归和sigmoid函数分类:容易欠拟合,分类精度不高,计算代价小,易于理解和实现

    sigmoid函数与阶跃函数的区别在于:阶跃函数从0到1的跳跃在sigmoid函数中是一个逐渐的变化,而不是突变。

    logistic 回归分类器:在每个特征上乘以一个回归系数,然后将所有的结果值相加,将这个总和代入到sigmoid函数中,得到一个在0-1之间的数值,大于0.5分为1类,小于0.5分为0类。所以,逻辑回归也可以被看作是一种概率估计。

    关键在于求最佳回归系数。

    1、基于最优化方法的最佳回归系数确定

    1)梯度上升算法:沿着该函数的梯度方向搜寻,该算法在到达每个点后都会重新估计移动的方向,循环迭代直到满足停止条件。

          梯度下降算法:求解函数最小值。

    #逻辑回归梯度上升优化算法
    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])])
            labelMat.append(int(lineArr[2]))
        return dataMat,labelMat
    
    def sigmoid(inX):
        return 1.0/(1+exp(-inX))
    
    def gradAscent(dataMatIn,classLabels):
        dataMatrix = mat(dataMatIn)
        labelMat = mat(classLabels).transpose()
        m,n = shape(dataMatrix)
        alpha = 0.001
        maxCycles = 500
        weights =ones((n,1))
        for k in range(maxCycles):
            h = sigmoid(dataMatrix * weights)
            error = (labelMat -h)
               weights = weights +alpha  * dataMatrix.transpose() *error
        return weights

    alpha是向目标移动的步长,maxCycles是迭代次数。

    2、分析数据:画出决策边界

    def plotBestFit(weights):
        import matplotlib.pyplot as plt
        dataMat,labelMat = loadDataSet()
        dataArr = array(dataMat)    
        n = shape(dataArr)[0]
        xcord1 = [];ycord1 = []
        xcord2 = [];ycord2 = []
        for i in range(n):
            if int(labelMat[i])==1:
                xcord1.append(dataArr[i,1]);ycord1.append(dataArr[i,2])
            else:
                xcord2.append(dataArr[i,1]);ycord1.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 = arange(-weights[0] -weights[1]*x)/weights[2]    
        ax.plot(x,y)
        plt.xlabel('X1'); plt.ylabel('X2');
        plt.show
  • 相关阅读:
    获取ip地址,
    手机div侧滑删除
    swiper左右选项卡滑动
    table-cell使用
    返回和刷新
    电脑浏览器计算高度和宽度
    css 空格
    时间js
    Nodejs仿Apache的部分功能
    Nodejs中的JavaScript
  • 原文地址:https://www.cnblogs.com/luban/p/9395494.html
Copyright © 2020-2023  润新知