机器学习算法:逻辑回归|python与r语言代码实现

逻辑回归

不要被它的名字弄糊涂了!它是一种分类而不是回归算法。它用于根据给定的一组自变量估计离散值(二进制值如0/1、是/否、真/假)。简单地说,它通过将数据拟合到 logit 函数来预测事件发生的概率。因此,它也被称为logit回归。由于它预测了概率,其输出值介于0和1之间(如所预料的)。

再一次,让我们通过一个简单的例子来理解这一点。

假设你的朋友给你一个难题来解决。只有两种结局情景——要么你解决,要么不解决。现在想象一下,为了理解你擅长哪些科目,你正在接受各种各样的谜题/测验。这项研究的结果是这样的——如果你得到一个基于三角学的十年级问题,你有70%的可能性解决它。另一方面,如果是第五级历史问题,得到答案的概率只有30%。这就是逻辑回归给你提供的东西。

看看数学,结果的对数赔率被建模为预测变量的线性组合。

odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence
ln(odds) = ln(p/(1-p))
logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk

以上,P是存在感兴趣特征的概率。它选择使观察样本值的可能性最大化的参数,而不是使平方误差之和最小(如普通回归)。

现在,你可能会问,为什么要记日志?为了简单起见,我们姑且认为这是复制阶跃函数的最好的数学方法之一。我可以更详细地说,但这将打破这篇文章的目的。

Python 代码

#Import Library
from sklearn.linear_model import LogisticRegression
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create logistic regression object
model = LogisticRegression()
# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)
#Equation coefficient and Intercept
print('Coefficient: \n', model.coef_)
print('Intercept: \n', model.intercept_)
#Predict Output
predicted= model.predict(x_test)

R 语言代码

x <- cbind(x_train,y_train)
# Train the model using the training sets and check score
logistic <- glm(y_train ~ ., data = x,family='binomial')
summary(logistic)
#Predict Output
predicted= predict(logistic,x_test)

此外,为了改进模型,可以尝试许多不同的步骤:

  • 包括交互项
  • 去除特征
  • 正则化技术
  • 使用非线性模型
THE END