邏輯回歸和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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM