logistic回归

概念

  • logistics回归是一种二分类的算法,它利用sigmoid函数将样本数据映射在[0,1]空间
  • 假设我们的一个样本有n个属性x 1…x n,那就需要有n个参数构成的矩阵,将其构造成一个线性模型

  • 对每一个样本我们都可以使用这个参数矩阵去计算一个条件概率;

    P(y=1|x,w)=0.51
    P(y=1|x,w)=0.99
    同一个样本在不同的参数矩阵w下,对样本估计为1的概率不同,我们需要取得最大的概率

  • 扩展到整个样本,

    又因为样本之间是独立同分布的,就可以用每个样本的概率做累乘

  • 做完乘法之后将会得到一个关于w矩阵的概率函数,我们训练的目的就是要寻找一组w参数来使得我们正确判断y=1与y=0的概率达到最大

  • 关于累乘的求导,通常使用ln函数变成累加,方便计算
  • 这就回到了对函数求极值点的问题了,数据已经有了接下来就是要梯度法进行求解就行
  • 在梯度下降过程中使用矢量法进行替换求解

    公式推导

    连接函数


目标函数


构造好的函数


依据最大似然法生成的概率函数


梯度上升法求解过程

矢量化

在利用梯度求解过程中使用到矢量化的思想
矢量化

  • 在迭代的过程中设置w参数的初始值为 n x 1 的矩阵
  • 接下来往公式里套就行了

    代码实现

#ocding=UTF-8
###
#罗杰斯特回归
##
import numpy as np 

##读取文件数据
#
#
def loadDataSet():
    dataMat=[]
    labelMat=[]
    fr=open("testSet.txt")
    for line in fr.readlines():
        linerArr=line.strip().split()
        dataMat.append([1,float(linerArr[0]),float(linerArr[1])])
        labelMat.append(int(linerArr[2]))
    fr.close()
    return(dataMat,labelMat)

def sigmoid(x):
    return(1.0/(1+np.exp(-x)))

####梯度上升法####
def gradAscent(dataMatin,labelMatin):
    dataMatout=np.mat(dataMatin)
    labelMatout=np.mat(labelMatin).transpose()
    m,n=np.shape(dataMatout)
    alpha=0.001
    maxCycle=500
    ###初始参数的矩阵
    weights=np.ones((n,1))
    for k in range(maxCycle):
        ##这里已经把累加算了,得到m x 1矩阵
        h=sigmoid(dataMatout*weights)
        error=labelMatout-h
        #####把x矩阵转置构造 n x m 矩阵
        weights=weights+alpha*dataMatout.transpose()*error
    return weights

dataMat,labelMat=loadDataSet()
print(gradAscent(dataMat,labelMat))

参考

https://blog.csdn.net/lgb_love/article/details/80592147
https://blog.csdn.net/c406495762/article/details/77723333
最大似然法
矢量化