机器学习算法:逻辑回归|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