逻辑回归这个算法的名称有一定的误导性。
虽然它的名称中有“回归”,当它在机器学习中不是回归算法,而是分类算法。
因为采用了与回归类似的思想来解决分类问题,所以它的名称才会是逻辑回归

逻辑回归的思想可以追溯到19世纪,由英国统计学家Francis Galton在研究豌豆遗传问题时首次提出。
然而,真正将逻辑回归应用于机器学习的是加拿大统计学家Hugh Everett,他在1970年代提出了广义线性模型(GLM),其中包括逻辑回归

逻辑回归广泛应用于各种分类问题,如垃圾邮件识别、疾病预测、市场细分等。

1. 算法概述

逻辑回归通过构建一个逻辑模型来预测分类结果。
它首先对特征进行线性回归,
\(y=w_0 x_0+w_1 x_1+w_2 x_2+w_3 x_3...+w_n x_n=w^Tx\)

然后通过一个sigmoid函数(\(y=\frac{1}{1+e^{-x}}\))将线性回归的结果转化为概率值,
sigmoid函数的输出范围是0到1

最后得到逻辑回归的公式:\(h_{w}(x)=\frac{1}{1+e^{-y}}=\frac{1}{1+e^{-w^Tx}}\)

2. 创建样本数据

这次用scikit-learn中的样本生成器make_moons来生成二分类用的样本数据。

from sklearn.datasets import make_moons

fig, ax = plt.subplots(1, 1)
X, y = make_moons(noise=0.05, n_samples=1000)
ax.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25) plt.show()


关于用make_moons生成样本数据的介绍,请参考:TODO

3. 模型训练

首先,分割训练集测试集

from sklearn.model_selection import train_test_split

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

这次按照8:2的比例来划分训练集和测试集。

然后用scikit-learn中的LogisticRegression模型来训练:

from sklearn.neighbors import LogisticRegression

# 定义逻辑回归模型
reg = LogisticRegression() # 训练模型
reg.fit(X_train, y_train) # 在测试集上进行预测
y_pred = reg.predict(X_test)

LogisticRegression的主要参数包括:

  1. penalty:广义线性模型的正则项,可选值包括L1正则项'l1'、L2正则项'l2'、复合正则'elasticnet'和无正则项None,默认值为'l2'。
  2. dual:是否为对偶问题。默认为False。
  3. tol:容忍度。默认值为0.0001。
  4. C:惩罚系数。默认值为1.0。
  5. fit_intercept:是否拟合截距。默认为True。
  6. intercept_scaling:截距的缩放因子。默认值为1。
  7. class_weight:样本权重,用于实现数据的不同分类重要性的惩罚。默认为None。
  8. random_state:随机种子。默认为None。
  9. solver:优化算法。默认为'warn',可选项有'lbfgs'、'sag'、'saga'、'newton-cg'、'sag-l2'、'saga-l2'、'lbfgs-l2'和'optimal'。
  10. max_iter:最大迭代次数。默认为100。
  11. multi_class:多类别分类器。默认为'warn',当n_classes>2时,默认为True,否则默认为False。
  12. n_jobs:线程数。默认为None,表示使用CPU的核数。

最后验证模型的训练效果:

# 比较测试集中有多少个分类预测正确
correct_pred = np.sum(y_pred == y_test) print("预测正确率:{}%".format(correct_pred/len(y_pred)*100)) # 运行结果
预测正确率:89.0%

准确率还可以,可以调节生成样本数据的make_moons方法的noise参数,
看看在不同混乱程度的样本数据下,逻辑回归的准确性是否健壮。

4. 总结

逻辑回归在很多领域都有广泛的应用,如自然语言处理、图像识别、医疗诊断、信用评分等。
它尤其适用于那些样本特征之间存在线性关系,且目标变量为二元的情况。

逻辑回归算法主要优势在于::

  1. 实现简单:易于理解和实现,可以在短时间内训练出模型。
  2. 计算效率高:在训练和预测时具有较高的计算效率,可以处理大规模的数据集。
  3. 可解释性强:可以给出概率输出,这使得它更容易解释和信任。

不过,逻辑回归也有其不足之处:

  1. 对数据质量和特征选择敏感:如果数据中存在噪音或者特征选择不当,可能会出现过拟合或者欠拟合的情况。
  2. 只能处理二分类问题:如果要处理多分类问题的话,需要把多分类问题转为多个二分类问题。
  3. 对异常值和缺失值敏感:处理不当可能会影响模型的性能。

【scikit-learn基础】--『监督学习』之 逻辑回归分类的更多相关文章

  1. Lineage逻辑回归分类算法

    Lineage逻辑回归分类算法 线性回归和逻辑回归参考文章: http://blog.csdn.net/viewcode/article/details/8794401 http://www.cnbl ...

  2. 用Python开始机器学习(7:逻辑回归分类) --好!!

    from : http://blog.csdn.net/lsldd/article/details/41551797 在本系列文章中提到过用Python开始机器学习(3:数据拟合与广义线性回归)中提到 ...

  3. 逻辑回归(分类问题)(Logistic Regression、罗杰斯特回归)

    逻辑回归:问题只有两项,即{0, 1}.一般而言,回归问题是连续模型,不用在分类问题上,且噪声较大,但如果非要引入,那么采用逻辑回归模型. 对于一般训练集: 参数系统为: 逻辑回归模型为:      ...

  4. Python基础『二』

    目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...

  5. Python基础『一』

    内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...

  6. DeepLearning之路(一)逻辑回归

    逻辑回归 1.  总述 逻辑回归来源于回归分析,用来解决分类问题,即预测值变为较少数量的离散值. 2.  基本概念 回归分析(Regression Analysis):存在一堆观测资料,希望获得数据内 ...

  7. tensorFlow(三)逻辑回归

    tensorFlow 基础见前博客 逻辑回归广泛应用在各类分类,回归任务中.本实验介绍逻辑回归在 TensorFlow 上的实现 理论知识回顾 逻辑回归的主要公式罗列如下: 激活函数(activati ...

  8. kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归

    使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...

  9. 机器学习(1)- 概述&线性回归&逻辑回归&正则化

    根据Andrew Ng在斯坦福的<机器学习>视频做笔记,已经通过李航<统计学习方法>获得的知识不赘述,仅列出提纲. 1 初识机器学习 1.1 监督学习(x,y) 分类(输出y是 ...

  10. 机器学习之使用Python完成逻辑回归

    一.任务基础 我们将建立一个逻辑回归模型来预测一个学生是否被大学录取.假设你是一个大学系的管理员,你想根据两次考试的结果来决定每个申请人的录取机会.你有以前的申请人的历史数据,你可以用它作为逻辑回归的 ...

随机推荐

  1. Teamcenter RAC 开发之《日期控件》

    背景 Teamcenter Rac 开发客制化表单过程中,发现一个问题,就是使用日期控件JXDatePicker展示无法实现"签出"禁用控件输入 解决办法 选择使用JDateCho ...

  2. 记一次 .NET某账本软件 非托管泄露分析

    一:背景 1. 讲故事 中秋国庆长假结束,哈哈,在老家拍了很多的短视频,有兴趣的可以上B站观看:https://space.bilibili.com/409524162 ,今天继续给大家分享各种奇奇怪 ...

  3. MySQL系列之主从复制进阶——延时从库、半同步、过滤复制、GTID复制

    目录 1. 延时从库 1.1介绍 1.2 为什么要有延时从 1.3 配置延时从库 1.4 延时从库应用 1.4.1 故障恢复思路 1.4.2 故障模拟及恢复 2. 半同步 *** 2.1 半同步复制工 ...

  4. 前端框架——Vue2

    文章目录 初识Vue 模板语法 数据绑定 el与data的两种写法 理解MVVM 数据代理 事件处理 计算属性 监视属性 绑定样式 条件渲染 列表渲染 收集表单数据 过滤器 内置指令 自定义指令 生命 ...

  5. Sell Pigs 题解

    Sell Pigs 双倍经验 题目大意 有 \(n\) 个顾客前来买猪,共有 \(m\) 个猪圈,每个顾客携带着某一些猪圈的钥匙,需要买一定数量的猪.在顾客买完后,我们可以将打开的猪圈中的猪随意移动, ...

  6. es6(1)

    1.var let const var---变量,重复定义不报错,没有块级作用域,不能限制修改 if(12>5){ var a=12; } alert(a); //弹出12 let---变量,重 ...

  7. 数据结构与算法 | 深搜(DFS)与广搜(BFS)

    深搜(DFS)与广搜(BFS) 在查找二叉树某个节点时,如果把二叉树所有节点理理解为解空间,待找到那个节点理解为满足特定条件的解,对此解答可以抽象描述为: 在解空间中搜索满足特定条件的解,这其实就是搜 ...

  8. 【scipy 基础】--积分和微分方程

    对于手工计算来说,积分计算是非常困难的,对于一些简单的函数,我们可以直接通过已知的积分公式来求解,但在更多的情况下,原函数并没有简单的表达式,因此确定积分的反函数变得非常困难. 另外,相对于微分运算来 ...

  9. GCD Inside: GCD 宏

    1 __OBJC__ __OBJC__宏的定义在 GCD 源码中找不到,它定义在 LLVM 的源码中: // initPreprocessor.cpp static void InitializeSt ...

  10. STL unordered类容器浅谈

    一个代码: #include<cstdio> #include<vector> #include<functional> #include<algorithm ...