自己写逻辑回归 logistic regression

首先推荐看 机器学习lecture note1 里面的逻辑回归的推导,和 逻辑回归介绍 的前两部分一起看

1. 理解什么是梯度上升法

求局部最大值
往梯度上升的方向走,+正的导数值,导数为2,+2,导数为1/2,+1/2,走过了导数为-1,+(-1)= -1,这样逼近最大值
但是,一下面的函数为例

f(x)=13x34x

需要注意的:
1. x0不能在 [2,+] 的区间,导数为正,会越跑越远
2. 自动调节步长alpha
3. 精度达到就停止迭代

def fun(x):
    return 1/3*x**3-4*x
x0=-4.3
alpha=0.45
sigma=1e-4
for iter in range(10):
    print("iter ",iter+1,"\tx0 %.6f"%x0,"\t alpha:",alpha)
    pl.scatter([x0],[fun(x0)])

    x1=x0+alpha*(x0**2-4)
    while x1>=2:
        alpha=alpha/2
        x1=x0+alpha*(x0**2-4)
    if abs(x1-x0)<sigma:
        break;
    x0=x1

print("final x0:",x0)
x=np.arange(-5,5,0.1)
y=fun(x)
pl.plot(x,y)   
pl.show()

这里写图片描述

2.理解逻辑回归的目的

我们要找到weight使得用sigmoid函数能拟合数据
用最大似然法推导,然后用最大似然法求weight
这里写图片描述

3. 代码实现

机器学习实战第五章的代码

import numpy as np
def stocGradAscent1(dataset,labels,num_iter=150):
    num_sample,num_feat=np.array(dataset).shape
    weights=np.ones(num_feat) 
    randIndex=[]
    for k in range(num_iter):
        for i in range(num_sample):
            alpha=4/(1+i+k)+0.0001
            rand_i=int(np.random.uniform(0,num_sample)) 
            while rand_i in randIndex:
                rand_i=int(np.random.uniform(0,num_sample))
            randIndex.append(rand_i)
            h=sigmoid(sum(dataset[rand_i]*weights))  # w1*x1+w2*x2+w3*x3
            error=labels[rand_i]-h 
            weights=weights+alpha*error*np.array(dataset[rand_i])
    return weights
def classify(vector, weights):
    vector=np.array(vector)
    weights=np.array(weights)
    prob=sigmoid(sum(vector*weights))
    if prob>0.5:
        return 1
    else:
        return 0
def loadTrainHorsetData():
    f1=open("horseColicTraining.txt")
    Dataset=[]
    Labels=[]
    for line in f1.readlines():
        currline=line.strip().split("\t")
        Dataset.append([float(i)for i in currline[:21]]) # 21个特征
        Labels.append(float(currline[-1]))
    return Dataset,Labels


def testHorse():
    trainDataset,trainLabels=loadTrainHorsetData()
    testDataset,testLabels=loadTestHorsetData()
    weight=stocGradAscent1(trainDataset,trainLabels,100)
    predic=classify(testDataset,weight)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Logistic回归是一种逻辑回归方法。它是一种特殊的回归方法,用于对于分类问题中的因变量建立预测模型。这种方法基于学习一个由输入变量到二元输出变量的条件概率来构建预测模型,用于对一个新的样本进行分类。它对于分类问题中的因变量建立预测模型非常有效。 ### 回答2: 逻辑回归是一种用于解决二分类问题的监督学习算法。它是一种基于概率统计的分类模型,可以用于预测分类结果。逻辑回归的输出结果是一个0到1之间的概率值,其含义是该样本属于某一类别的概率。 逻辑回归模型的基本假设是数据服从伯努利分布,也就是数据只有两种可能的取值,被称为正类和负类。对于给定的训练数据集,逻辑回归模型的目标是最大化似然函数,即最大化样本属于正类(或负类)的概率。利用最大似然估计方法,我们可以求解出逻辑回归模型的参数。在实际应用中,我们通常使用梯度下降等优化算法来求解模型参数。 逻辑回归模型有多种变体,如L1正则化逻辑回归、L2正则化逻辑回归、多项式逻辑回归等。其中,L1正则化逻辑回归可以实现特征选择,可以削减一些不重要的特征,从而简化模型,提高计算速度和模型的泛化能力。 在机器学习领域,逻辑回归是一个常用的模型。它广泛应用于各种领域,如网络广告点击率预测、信用风险评估、医疗诊断等。逻辑回归模型简单易实现,具有较高的解释性,是一个较为理想的分类算法。 ### 回答3: 逻辑回归Logistic Regression)是一种经典的分类算法,在机器学习和统计学领域中得到广泛的应用。它旨在从已有的数据中构建一个能够预测类别的模型,输出结果为概率值,可以用于二分类或多分类问题的解决。 逻辑回归的基本原理是利用一个特定的函数对输入特征进行线性组合,然后将结果输入到一个Sigmoid函数中进行映射,将结果值压缩到0到1的范围内,表示输入属于某一类别的概率。这个Sigmoid函数可以被看作是一个阀门,控制着数据流向最终输出。它将具有很强预测能力的线性组合函数输出转化为概率输出的过程,将出现在中间层的结果值映射到[0,1]范围内,以表达某个样本属于某个类别的概率。 在训练模型时,逻辑回归使用的是最大似然估计的方法来确定模型的参数。在分类训练数据时,需要对样本经过一系列的处理,例如特征提取、特征转换、数据归一化等步骤。训练数据可以通过梯度下降法、牛顿迭代法等优化方法来确定最佳参数。通过此训练过程,模型可以学习到输入特征与输出概率之间的映射关系。 逻辑回归的优点包括了功能简单、速度快、易于实现和修改等等。它是机器学习中最为基本的分类算法之一,在数据挖掘、信用评估、自然语言处理、广告推荐等领域都有广泛的应用。逻辑回归作为一个二分类算法,常被用于解决分类问题。然而,在实际业务中,如何选择不同的逻辑回归模型及参数,对算法的效果和优化有着重要的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值