logistic 回归(二)

学会了简单的logistic的回归后,一定会发现这个函数无法适用于大规模数据,因为数据量太大的时候,计算量的规模是几何式增长的。接下来我们讨论下如何优化logistic回归,现在我们来写个简单的优化函数:

def stocGradAscent0(dataMatrix, classLabels):
    m,n = shape(dataMatrix)
    alpha = 0.01
    weights = ones(n)   #initialize to all ones
    for i in range(m):
        h = sigmoid(sum(dataMatrix[i]*weights))
        error = classLabels[i] - h
        weights = weights + alpha * error * dataMatrix[i]
    return weights

当然这个函数依然非常简单,感觉是否没有什么变化,相对于前面的梯度优化,但是仔细观察发现这个随机梯度优化使用的是简单的单个值,而非矩阵,这样计算量就减少为原来的1/n,嘿嘿。当然天下没有免费的午餐,这种优化的后果当然是精度损失了。不过这种损失在数据量比较大的时候还是可以原谅的。

下面来一种精度和效率兼顾的方式,这种方法比前面的一种稍显复杂了一点。我们来看代码吧。

def stocGradAscent1(dataMatrix, classLabels, numIter=150):
    m,n = shape(dataMatrix)
    weights = ones(n)   #initialize to all ones
    for j in range(numIter):
        dataIndex = range(m)
        for i in range(m):
            alpha = 4/(1.0+j+i)+0.0001    #apha decreases with iteration, does not 
            randIndex = int(random.uniform(0,len(dataIndex)))#go to 0 because of the constant
            h = sigmoid(sum(dataMatrix[randIndex]*weights))
            error = classLabels[randIndex] - h
            weights = weights + alpha * error * dataMatrix[randIndex]
            del(dataIndex[randIndex])
    return weights

呵呵,这样我们的logistic回归的大多数方法就都实现了。当然还少了测试部分的代码:

def classifyVector(inX, weights):
    prob = sigmoid(sum(inX*weights))
    if prob > 0.5: return 1.0
    else: return 0.0

这样所有的代码就都有了,然后我们就可以使用这些东西来做点事情了。好了logistic回归我也刚刚理解了,至于高深的优化目标函数,这里就先不拿出来了,因为我也没看懂,O(∩_∩)O哈哈~



### 回答1: Logistic回归是一种分类算法,用于预测一个元变量的概率。它是一种广泛使用的机器学习算法,可以用Python编程语言实现。在Python中,可以使用scikit-learn库中的LogisticRegression类来实现Logistic回归。该类提供了许多参数和方法,可以用于训练和预测模型。在使用Logistic回归时,需要准备好训练数据和测试数据,并对数据进行预处理和特征工程。然后,可以使用LogisticRegression类来训练模型,并使用测试数据来评估模型的性能。最后,可以使用训练好的模型来预测新的数据。 ### 回答2: Logistic回归是一种基于逻辑斯蒂分布模型的分类算法。它主要用于解决分类问题,如判断一个人是否患有疾病、判断一封邮件是否是垃圾邮件等。在Python中,我们可以使用Scikit-learn库中的LogisticRegression模块进行分类问题的建模和预测。 首先,我们需要准备数据集。数据集是一个样本集合,每个样本都有多个特征和一个标签。在Logistic回归中,我们需要将标签转换为分类的0或1,通常采用label_binarize函数实现。 接下来,我们需要将数据集分为训练集和测试集,通常将数据集的80%作为训练集,20%作为测试集。在Scikit-learn库中,我们可以使用train_test_split函数随机划分数据集。 然后,我们可以使用LogisticRegression模块对训练集进行拟合。通过调用fit函数,模型会基于训练数据,通过最大似然估计得到模型参数,从而完成模型的训练。 最后,我们使用预测函数predict对测试集进行预测。预测函数将输入测试数据集,输出相应的预测标签。我们可以通过与真实标签进行比对,计算分类准确率以评估模型的性能。 在实际应用中,我们可以通过调整正则化强度、交叉验证等参数来优化模型的性能。此外,可以采用特征工程等方式提取更有代表性的特征,进一步提高模型的鲁棒性和准确率。 综上所述,Logistic回归是一种简单、快速、易于理解和实现的分类算法,可以应用于多种领域。Python的Scikit-learn库提供了易用的LogisticRegression模块,支持多种参数调整和评估方式,方便用户实现和优化模型。 ### 回答3: 在机器学习中,logistic回归是一种广泛使用的分类算法。它主要用于预测一个元变量的概率输出。 在Python中,我们可以使用sklearn库中的LogisticRegression类实现logistic回归。首先,我们需要导入数据并将其拆分为训练数据和测试数据。然后,我们可以使用训练数据训练模型,并使用测试数据来评估模型的性能。 在训练模型之前,我们需要对数据进行预处理。这通常包括填补缺失值、对数据进行标准化或归一化、删除异常值等。接下来,我们需要将数据分为特征和标签,其中特征是用于做出预测的输入变量,标签是要预测的元变量。 LogisticRegression类包含许多参数,用于调整模型的性能。例如,我们可以调整正则化强度、定义损失函数、定义优化器等。为了避免过拟合问题,我们可以设置正则化参数C为一个较小的值。 在训练完成后,我们可以使用训练好的模型对新的数据进行预测。我们可以通过调用'predict'函数来预测数据点的类别。同时我们还可以调用'predict_proba'函数来预测每个类别的概率输出。 需要注意的是,在使用LogisticRegression类实现元分类任务时,我们需要使用一个特殊的损失函数——对数损失函数。此外,我们还需要使用一个概率函数,即sigmoid函数,将原始的线性输出转换为[0, 1]之间的概率值。 综上所述,LogisticRegression是一个广泛应用于元分类任务的机器学习算法。在Python中,我们可以使用sklearn库中的LogisticRegression类来训练和评估模型,并使用预测函数对新数据进行预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值