逻辑回归和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
原文地址:https://www.cnblogs.com/luban/p/9395494.html