逻辑回归是一种用于二元分类的统计模型,其名称来源于其底层技术与线性回归的相似性。本文将探讨逻辑回归的基础知识,包括模型方程的构建、解决异常值问题的方法、单调函数的使用以及正则化的必要性,并提供代码示例。
基础知识理解
假设面临的问题是垃圾邮件识别,希望将非垃圾邮件(Ham)保留在收件箱中,而将垃圾邮件发送到垃圾邮件文件夹。如图1所示,有两种类型的邮件:垃圾邮件和非垃圾邮件。关注垃圾邮件的不同特征,例如不友好的域名、“贷款”、“金额”等词汇的出现次数以及拼写错误。虽然还有其他许多特征,但目前只关注这些。如果在x轴上绘制邮件中“贷款”一词出现的次数,在y轴上绘制拼写错误的次数,可以得到一个相当不错的图表,其中垃圾邮件和非垃圾邮件可以通过一条线分隔开来。这就是逻辑回归的基本思想,希望数据能够线性分离成两个类别。
构建模型方程
<p>如果数据(即所有邮件)是线性可分的,那么一条线可以将数据点(每封邮件)分成两个类别(垃圾邮件和非垃圾邮件)。对于人类来说,在2D图表中绘制这条线很容易,但对于计算机来说,必须遵循一系列指令。</p>
<p>因此,考虑将非垃圾邮件视为正类“+1”,垃圾邮件视为负类“-1”,有“n”个特征。</p>
<p>在2D中,线的方程是:w1x1 + w2x2 + w0 = 0</p>
<p>在3D中,平面的方程是:w1x1 + w2x2 + w3x3 + w0 = 0</p>
<p>在nD中,超平面的方程是:w1x1 + w2x2 + w3x3 + …… + wnxn + w0 = 0</p>
<p>如果将超平面通过原点,则w0变为0,方程变为:w1x1 + w2x2 + w3x3 + …… + wnxn = 0。现在任务是找到分隔数据点的超平面。</p>
解决异常值问题
单调函数的使用
正则化的必要性
<p>让了解逻辑回归的代码。使用逻辑回归,默认使用梯度下降。这里“lambda”是一个超参数。这里“lambda”是超参数C=1/lambda,随着C的增加,它将过拟合,随着C的减少,它将欠拟合。</p>
<p>from sklearn.datasets import load_iris<br>
from sklearn.linear_model import LogisticRegression<br>
#导入逻辑回归和iris数据集<br>
X, y = load_iris(return_X_y=True)<br>
clf = LogisticRegression(C=0.01).fit(X, y)<br>
#设置逻辑回归的超参数并训练模型<br>
clf.predict(X[:2, :])<br>
#预测数据点的类别<br>
clf.predict_proba(X[:2, :])<br>
#还可以预测类别的概率</p>
<p>使用随机梯度下降<br>
通过简单地更改损失参数,可以轻松地在不同的分类器之间切换。对于逻辑回归,将使用损失=”log”,对于SVM,将使用“Hinge”等。<br>
from sklearn.linear_model import SGDClassifier<br>
#导入SGDClassifier<br>
X = [[0., 0.], [1., 1.]]<br>
y = [0, 1]<br>
clf = SGDClassifier(loss="log")<br>
#设置参数损失=”log”用于逻辑回归<br>
clf.fit(X, y)<br>
#训练模型<br>
clf.predict([[2., 2.]])<br>
#预测数据点的类别</p>