掘金 人工智能 04月27日 12:43
机器学习入门(三)逻辑回归
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了监督学习中的逻辑回归,一种用于解决分类问题的机器学习方法。文章首先指出了线性回归在处理分类问题时的局限性,例如易受异常值影响,导致分类错误。随后,引入了逻辑回归的概念,该模型通过Sigmoid函数将输出限制在0到1之间,从而更好地适应分类任务。文章详细解释了逻辑回归的工作原理,包括决策边界和代价函数,并通过实例演示了逻辑回归在实际问题中的应用,例如根据考试成绩预测是否及格,展示了线性边界和非线性边界的应用,以及如何通过代码实现和可视化结果。

🧐 线性回归的局限性:线性回归模型在处理分类问题时,容易受到异常值的影响,导致预测值超出[0,1]范围,从而影响分类的准确性,无法很好地区分不同类别的数据。

💡 逻辑回归的原理:逻辑回归通过Sigmoid函数将线性回归的输出映射到0和1之间,解决了线性回归的缺陷。它将回归函数的输出作为Sigmoid函数的输入,确保输出值始终在0到1的范围内,更适用于分类任务。

🤔 决策边界与代价函数:为了提高分类准确率,需要找到合适的决策边界,例如线性边界或非线性边界。文章介绍了如何选择决策边界函数,以及如何通过代价函数找到最佳的参数,从而使模型的拟合误差最小化。

📊 实例分析:文章通过考试成绩预测是否及格的案例,演示了逻辑回归的应用。通过调整决策边界,展示了线性边界和非线性边界在不同数据集上的表现,并提供了代码示例和可视化结果,帮助读者理解逻辑回归的实际应用。

在上一篇文章 机器学习入门(二)线性回归 中我们介绍了线性回归,这一篇文章将介绍监督学习中的逻辑回归。

线性回归面对分类问题的缺陷

在生活中除了预测房价这种回归问题,还有像判断一封电子邮件是否是垃圾邮件;区别一个肿瘤是恶性的还是良性的的分类问题。这里以判断肿瘤的种类为例,看一下线性回归如何处理该问题。

如上图所示,横轴代表肿瘤的大小,纵轴表示 0.0 表示是良性肿瘤;1.0表示是恶性肿瘤。如果我们使用线性回归,可以让 y < 0.5 时,预测 y = 0;让 y >= 0.5 时,预测 y = 1。对于上图所示的数据,这样的一个线性模型似乎能很好地完成分类任务。

但是如果此时增加一个非常大的恶性肿瘤的数据,这里获取的直线如下。可以看到,在被新数据影响后,本因被判断为恶性肿瘤的点,此时在该条直线中的 y < 0.5,导致分类出现了问题。

从中可以看出线性回归模型,并不适合解决这样分类的问题。

逻辑回归

上面介绍的线性回归模型的缺陷,其原因主要是预测的值可以超越[0,1]的范围。因此我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在0和1之间。

常用的逻辑回归函数是 sigmond 函数,其函数公式为 σ(x)=11+ex\sigma(x) = \frac{1}{1 + e^{-x}},图形为:

需要注意,逻辑回归不是单独使用 sigmond 函数,而是回归函数 + sigmond 函数。在逻辑回归中,会把回归函数的输出(y)作为 sigmond 函数的输入(x)。由于 sigmond 函数:

这样就避免了回归函数预测的值可以超越[0,1]的范围的问题。逻辑回归的效果如下所示:

而且对于数据呈现如下图这样的分布情况,我们只需要找到对应的二次回归曲线,就可以来适应该图形的椭圆边界。

注意:逻辑回归(Logistic Regression)虽然名称中包含“回归”二字,但它实际上是一种分类方法,主要用于二分类问题。

决策边界和代价函数

从上面的示例中,我们知道如果想要提高分类算法的准确率,就必须找到合适的决策边界,比如选择线性边界 y=ax+b 还是非线性边界 ax^2 + by^2 = c;以及决策边界对应的参数 a、b、c的值。

对于决策边界函数的选取,一般先使用线性边界,当数据复杂且线性边界表现不佳时,再通过可视化、降维等方法来找到需要的决策边界。

选择好决策边界函数后,就需要找出最适合的参数,让数据的拟合误差最小。在线性回归中,我们是使用代价函数来实现。逻辑回归中,也是一样的,区别是使用的代价函数是不一样的,具体可以看 逻辑回归算法详解

示例

这里以根据两场考试成绩来预测第三场考试是否及格为例:

假设决策边界是一条直线:

# 训练数据from sklearn.linear_model import LogisticRegression# 定义数据x = data.drop(['Pass'], axis = 1)y = data.loc[:, 'Pass']# 训练LR = LogisticRegression()LR.fit(x, y)# x1 表示考试一;x2表示考试2# 他们的边界关系满足 a * x1 + b * x2 + c = 0x1 = data.loc[:, 'Exam1']x2 = data.loc[:, 'Exam2']c = LR.intercept_a, b = LR.coef_[0][0],  LR.coef_[0][1]x2_new = -(c + a * x1) / bfig3 = plt.figure()plt.plot(x1, x2_new)passed = plt.scatter(data.loc[:, 'Exam1'][mask], data.loc[:, 'Exam2'][mask])failed = plt.scatter(data.loc[:, 'Exam1'][~mask], data.loc[:, 'Exam2'][~mask])plt.title('Exam1-Exam2')plt.xlabel('Exam1')plt.ylabel('Exam2')plt.legend((passed, failed), ('passed', 'failed'))plt.show()

效果如下所示:

假设决策边界满足 a0 + a1 * x1 + a2 * x2 + a3 * x1 ^ 2 + a4 * x2 ^ 2 + a5 * x1 * x2 = 0

# 创建新的数据x1_2 = x1 * x1x2_2 = x2 * x2x1_x2 = x1 * x2x_new_data = {'x1':x1, 'x2':x2, 'x1_2': x1_2, 'x2_2': x2_2, 'x1_x2': x1_x2}x_new_data = pd.DataFrame(x_new_data)# 再次训练模型LR2 = LogisticRegression()LR2.fit(x_new_data, y)# 此时的边界函数满足 a0 + a1 * x1 + a2 * x2 + a3 * x1 ^ 2 + a4 * x2 ^ 2 + a5 * x1 * x2 = 0a0 = LR2.intercept_a1, a2, a3, a4, a5 = LR2.coef_[0][0], LR2.coef_[0][1], LR2.coef_[0][2], LR2.coef_[0][3], LR2.coef_[0][4]x1_sort_data = x1.sort_values()a = a4b = a5 * x1_sort_data + a2c = a0 + a1 * x1_sort_data + a3 * x1_sort_data * x1_sort_datax2_new_boundary = (-b + np.sqrt(b * b - 4 * a * c)) / (2 * a)fig4 = plt.figure()passed = plt.scatter(data.loc[:, 'Exam1'][mask], data.loc[:, 'Exam2'][mask])failed = plt.scatter(data.loc[:, 'Exam1'][~mask], data.loc[:, 'Exam2'][~mask])plt.title('Exam1-Exam2')plt.xlabel('Exam1')plt.ylabel('Exam2')plt.legend((passed, failed), ('passed', 'failed'))plt.plot(x1_sort_data, x2_new_boundary)plt.show()

效果如下所示:

参考

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

逻辑回归 分类问题 机器学习 决策边界
相关文章