• 逻辑回归(1)


    代码思路:

    1、读取数据

    read_scv  

    2、预测模型函数:①sigmoid函数②预测函数

     
    #sigmoid函数
    def sigmoid(z):
        return 1/(1+np.exp(-z))
    #计算预测模型的函数
    def model(X,theta):
        return sigmoid(np.dot(X,theta.T))

    3、目标函数(似然函数)

     
    #计算目标值的函数(对数似然)
    def cost(X,Y,theta):
        h=model(X,theta)
        left=np.multiply(-Y,np.log(h))
        right=np.multiply(1-Y,np.log(1-h))
        return np.sum(left-right)/(len(X))   

    4、计算梯度的函数:

     
    #计算梯度的函数
    def gradient(X,Y,theta):
        grad=np.zeros(theta.shape)
        error=(model(X,theta0)-Y).ravel()
        for j in range(len(theta.ravel())):
            term=np.multiply(error,X[:,j])
            grad[j]=np.sum(term) / len(X)
        return grad
     

    5、梯度下降的函数(更新梯度值):

     
    #对X,Y数据重新打乱(小批量梯度下降有用)
    import numpy.random
    def shuffleData(data):
        np.random.shufflr(data)
        cols=data.shape[1]
        X=data[:,0:cols-1]
        Y=data[:,cols-1:]
        return X,Y

    #
    比较三种不同梯度下降方法 STOP_ITER=0 STOP_COST=1 STOP_GRAD=2 def stopCriterion(type,value,threshold): #设定三种不同的停止策略 if type==STOP_ITER: return value>threshold elif type==STOP_COST: return abs(value[-1]-value[-2]<threshold) elif type==STOP_GRAD: return np.linalg.norm(value)<threshold import time def descent(X,Y,theta,batchSize,stopType,thresh,alpha): init_time=time.time() i=0 #迭代次数 k=0 #batch grad=np.zeros(theta,shape) #计算的梯度 costs=[cost(X,Y,theta)] #计算损失值 while True: grad=gradient(X[k:k+batchSize],Y[k:k+batchSize],theta) k+=batchSize #取batch数量个数据 if k>=n: k=0 X,Y=shuffleData(data)#重新洗牌 theta=theta-alpha*grad#参数更新 costs.append(cost(X,Y,theta))#计算新的损失 i+=1 if stopType==STOP_ITER: value=i elif stopType==STOP_COST: value=costs elif stopType==STOP_GRAD: value=grad if stopCriterion(stopType,value,thresh): break return theta,i-1,costs,grad,time.time()-init.time
     
    6、测试  
    #训练数据
    theta0=np.array([0.0,0.0,0.0])
    X_train.insert(0,'ones',1)
    X=X_train.as_matrix()
    Y=Y_train.as_matrix()
    print(cost(X,Y,theta0))
    print(gradient(X,Y,theta0))
     

    1、sigmoid函数:(也是预测函数)

    2、逻辑回归过程:(目标函数)

    (将目标函数转化成对数似然函数)

    3、求导过程:

  • 相关阅读:
    算法总结--排序(快排未写)
    关于我,至目前的总结与展望
    二 python之数据类型和字符编码
    三 python之文件处理
    一 python编程基础
    markdown语法
    规模-复杂世界的简单法则---熵
    块级元素display:inline-block 在IE6 IE7无效
    CSS3 文本超出后显示省略号...
    让nodejs在iis上运行
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/9068300.html
Copyright © 2020-2023  润新知