【scikit-learn基础】--『监督学习』之 逻辑回归分类
逻辑回归这个算法的名称有一定的误导性。
虽然它的名称中有“回归”,当它在机器学习中不是回归算法,而是分类算法。
因为采用了与回归类似的思想来解决分类问题,所以它的名称才会是逻辑回归。
逻辑回归的思想可以追溯到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的主要参数包括:
- penalty:广义线性模型的正则项,可选值包括L1正则项'
l1'、L2正则项'l2'、复合正则'elasticnet'和无正则项None,默认值为'l2'。 - dual:是否为对偶问题。默认为False。
- tol:容忍度。默认值为0.0001。
- C:惩罚系数。默认值为1.0。
- fit_intercept:是否拟合截距。默认为True。
- intercept_scaling:截距的缩放因子。默认值为1。
- class_weight:样本权重,用于实现数据的不同分类重要性的惩罚。默认为None。
- random_state:随机种子。默认为None。
- solver:优化算法。默认为'
warn',可选项有'lbfgs'、'sag'、'saga'、'newton-cg'、'sag-l2'、'saga-l2'、'lbfgs-l2'和'optimal'。 - max_iter:最大迭代次数。默认为100。
- multi_class:多类别分类器。默认为'warn',当n_classes>2时,默认为True,否则默认为False。
- 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. 总结
逻辑回归在很多领域都有广泛的应用,如自然语言处理、图像识别、医疗诊断、信用评分等。
它尤其适用于那些样本特征之间存在线性关系,且目标变量为二元的情况。
逻辑回归算法主要优势在于::
- 实现简单:易于理解和实现,可以在短时间内训练出模型。
- 计算效率高:在训练和预测时具有较高的计算效率,可以处理大规模的数据集。
- 可解释性强:可以给出概率输出,这使得它更容易解释和信任。
不过,逻辑回归也有其不足之处:
- 对数据质量和特征选择敏感:如果数据中存在噪音或者特征选择不当,可能会出现过拟合或者欠拟合的情况。
- 只能处理二分类问题:如果要处理多分类问题的话,需要把多分类问题转为多个二分类问题。
- 对异常值和缺失值敏感:处理不当可能会影响模型的性能。
【scikit-learn基础】--『监督学习』之 逻辑回归分类的更多相关文章
- Lineage逻辑回归分类算法
Lineage逻辑回归分类算法 线性回归和逻辑回归参考文章: http://blog.csdn.net/viewcode/article/details/8794401 http://www.cnbl ...
- 用Python开始机器学习(7:逻辑回归分类) --好!!
from : http://blog.csdn.net/lsldd/article/details/41551797 在本系列文章中提到过用Python开始机器学习(3:数据拟合与广义线性回归)中提到 ...
- 逻辑回归(分类问题)(Logistic Regression、罗杰斯特回归)
逻辑回归:问题只有两项,即{0, 1}.一般而言,回归问题是连续模型,不用在分类问题上,且噪声较大,但如果非要引入,那么采用逻辑回归模型. 对于一般训练集: 参数系统为: 逻辑回归模型为: ...
- Python基础『二』
目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...
- Python基础『一』
内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...
- DeepLearning之路(一)逻辑回归
逻辑回归 1. 总述 逻辑回归来源于回归分析,用来解决分类问题,即预测值变为较少数量的离散值. 2. 基本概念 回归分析(Regression Analysis):存在一堆观测资料,希望获得数据内 ...
- tensorFlow(三)逻辑回归
tensorFlow 基础见前博客 逻辑回归广泛应用在各类分类,回归任务中.本实验介绍逻辑回归在 TensorFlow 上的实现 理论知识回顾 逻辑回归的主要公式罗列如下: 激活函数(activati ...
- kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归
使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...
- 机器学习(1)- 概述&线性回归&逻辑回归&正则化
根据Andrew Ng在斯坦福的<机器学习>视频做笔记,已经通过李航<统计学习方法>获得的知识不赘述,仅列出提纲. 1 初识机器学习 1.1 监督学习(x,y) 分类(输出y是 ...
- 机器学习之使用Python完成逻辑回归
一.任务基础 我们将建立一个逻辑回归模型来预测一个学生是否被大学录取.假设你是一个大学系的管理员,你想根据两次考试的结果来决定每个申请人的录取机会.你有以前的申请人的历史数据,你可以用它作为逻辑回归的 ...
随机推荐
- MySQL的字段数量以及长度限制
一.InnoDB行格式 行格式 紧凑的存储特性 增强的可变长度列存储 大型索引键前缀支持 压缩支持 支持的表空间类型 REDUNDANT N N N N system, file-per-table, ...
- ClickHouse(15)ClickHouse合并树MergeTree家族表引擎之GraphiteMergeTree详细解析
GraphiteMergeTree该引擎用来对Graphite数据(图数据)进行瘦身及汇总.对于想使用ClickHouse来存储Graphite数据的开发者来说可能有用. 如果不需要对Graphite ...
- 如何配置.h头文件include“”相对路径
编译工程时,找的是当前main.c文件下的.h文件,如果当前路径下没有就会报错,当前路径用.\表示,上一级目录用..\表示. 如果你的main.h文件在main.c的上一级目录中Include 文件夹 ...
- 2023_10_10_MYSQL_DAY_02_课后题
2023_10_10_MYSQL_DAY_02_课后题 #06章1--7题 #1. 查询10号部门所有员工的员工姓名,员工工资,工资级别. SELECT e.ename 员工姓名,e.`sal` 员工 ...
- 【信创】 JED on 鲲鹏(ARM) 调优步骤与成果
项目背景 基于国家对信创项目的大力推进,为了自主可控的技术发展,基础组件将逐步由国产组件替代,因此从数据库入手,将弹性库JED部署在 国产华为鲲鹏机器上(基于ARM架构)进行调优,与Intel (X8 ...
- 使用PasteSpider把你的代码升级到服务器的Docker/Podman上,K8S太庞大,PasteSpider极易上手!
如果你的服务器的内存小于16GB,那么K8S就和你无缘了,但是你可以使用PasteSpider来实现发布你的项目到服务器上! PasteSpider是一个运维工具,使用NET编写的,部署于服务器的Do ...
- Lucky Array 题解
Lucky Array 题目大意 维护一个序列,支持以下操作: 区间加一个大于 \(0\) 的数. 区间查询有多少个数位上只包含 \(4\) 或 \(7\) 的数. 思路分析 看起来很不可做,但考虑到 ...
- CMD和AMD理解
#AMD <br>1.AMD就是Asynchronous Module Definition,中文名是异步模块定义的意思.<br>2.AMD解决两个问题:解决依赖.异步加载&l ...
- LVS负载均衡概念+三种模式
1.LVS负载均衡概念剖解: 1)LVS技术全称:Linux virtual Server ,Linux虚拟机服务器集群,1998由章文嵩博士设计.并且开源的,是中国最早的开源软件项目之一. 2) ...
- 在Finalshell中一直弹出弹窗要求输入密码的解决方案
在finalshell中即使输入正确了密码,仍然要求输入(密码错误), 对CentOS的防火墙也已经关闭,但是仍然提示 这个原因是因为自创的用户名在finalshell中不被认可,需要将用户名更改为r ...