用Sklearn和Statsmodels来做linear_regression和Logistic_regression注意事项

devtools/2024/10/18 19:11:10/

用Sklearn和Statsmodels来做linear_regression和Logistic_regression注意事项,区别。主要在于 intercept 项,和 regularization。

一、Linear regression 的截距项

又叫 intercept, constant, bias

使用 statsmodels 进行线性回归时,通常需要手动添加常数项(即截距),因为 statsmodels 的 OLS 默认不包括截距。这可以通过使用 statsmodels.tools.add_constant 函数来实现。例如,如果你有一个因变量 y 和一个自变量 X,你可以这样添加常数项:

import statsmodels.api as sm# 假设 X 和 y 已经定义
X = sm.add_constant(X)  # 添加常数项
model = sm.OLS(y, X).fit()

这样,X 中就会包含一个值全为 1 的列,它代表了截距项。在 statsmodels 中,add_constant 方法是添加常数项的标准做法 。

而在 scikit-learn 中,当你使用 LinearRegression 类时,是否添加常数项(截距)是由类初始化时的 fit_intercept 参数决定的。如果 fit_intercept=True(默认值),则 scikit-learn 会自动为你的模型添加常数项

from sklearn.linear_model import LinearRegression# 创建线性回归模型实例,自动添加常数项
model = LinearRegression(fit_intercept=True)
model.fit(X, y)

在这种情况下,你不需要手动添加常数项,因为 scikit-learn 已经为你处理了 。

二、Logistic Regression 的截距项和L2 Regularization

在进行逻辑回归时,scikit-learn 和 statsmodels 这两个库有一些关键的区别,特别是在截距项和正则化方面。

截距项

• scikit-learn:默认情况下,scikit-learn 的 LogisticRegression 类会添加一个截距项。如果你想显式地控制是否添加截距项,可以通过设置 fit_intercept 参数为 True 或 False 来实现。
• statsmodels:
使用 smf.glm (广义线性模型)时,是默认自动加一个截距项的!Logistic regression 是 GLM 的特例,其中响应变量是二元的,并且遵循二项分布。链接函数通常是 logit 函数。

naive_model = smf.glm('default~student+balance+income', data=train_default, family=sm.families.Binomial()).fit()
print(naive_model.summary())

在这里插入图片描述

(别的:在 statsmodels 中,当你使用 Logit 函数时,默认情况下不会包括截距项。如果你需要包括截距项,需要在模型公式中显式地包含它,例如使用 “y ~ x1 + x2 + const” 这样的公式,其中 const 就是截距项。这是 AI 说的,我没用过。)

正则化

• scikit-learn:scikit-learn 的 LogisticRegression 类支持 L1 和 L2 正则化,这可以通过设置 penalty 参数为 ‘l1’ 或 ‘l2’ 来实现。L1 正则化可以导致稀疏解,而 L2 正则化则不会。正则化的强度可以通过 C 参数来控制,C 的值越小,正则化强度越大。
scikit-learn 的 LogisticRegression 类中,默认的正则化是 L2 正则化 。这意味着它会使用一个正则化项,即系数的平方和,来防止模型过拟合。L2 正则化有助于处理特征多重共线性问题,并能够使模型参数更加平滑。
默认情况下,LogisticRegression 的 penalty 参数设置为 ‘l2’,同时 solver 参数默认为 ‘lbfgs’,它是一种优化算法,用于找到损失函数的最小值。C 参数控制正则化的强度,其默认值是 1.0,较小的 C 值意味着更强的正则化(即更平滑的模型),而较大的 C 值则意味着更弱的正则化(允许模型更复杂)。fit_intercept 参数默认为 True,表示模型会包含截距项。
如果你希望使用 L1 正则化或者不使用正则化,可以通过调整 penalty 参数来实现。例如,设置 penalty=‘l1’ 可以应用 L1 正则化,而设置 penalty=‘none’ 则不使用正则化。不过需要注意的是,当使用 liblinear 求解器时,不支持不使用正则化的情况。
此外,LogisticRegression 还支持弹性网正则化(‘elasticnet’),它是 L1 和 L2 正则化的组合,通过 l1_ratio 参数来控制两者的比例。

• statsmodels:statsmodels 的逻辑回归实现默认情况下不包括正则化。如果你需要应用正则化,可能需要通过手动修改设计矩阵或使用其他方法来实现。

·

如果你需要更多的自动化和快速原型设计,scikit-learn 可能是更好的选择。而如果你需要更深入地了解模型的细节和定制,statsmodels 可能更适合你的需求。


http://www.ppmy.cn/devtools/121162.html

相关文章

Bigemap Pro首发(一款真正全面替代Arcgis的国产基础软件)

Bigemap Pro是一款功能强大的计算机数据要素辅助设计(Computer-Aided Data Elements Design CADED)软件,由成都比格图数据处理有限公司研发设计,主要应用在数据要素设计领域,为各行业提供安全可靠高效易用的数据要素设计类国产化基础软件。Bi…

使用微服务Spring Cloud集成Kafka实现异步通信

在微服务架构中,使用Spring Cloud集成Apache Kafka来实现异步通信是一种常见且高效的做法。Kafka作为一个分布式流处理平台,能够处理高吞吐量的数据,非常适合用于微服务之间的消息传递。 微服务之间的通信方式包括同步通信和异步通信。 1&a…

PyGWalker:让你的Pandas数据可视化更简单,快速创建数据可视化网站

1、PyGWalker应用: 在数据分析的过程中,数据的探索和可视化是至关重要的环节,如何高效地将分析结果展示给团队、客户,甚至是公众,是很多数据分析师和开发者面临的挑战,接下来介绍的两大工具组合——PyGWalker与Streamlit,可以帮助用户轻松解决这个问题,即使没有复杂的代…

Oracle架构之物理存储之审计文件

文章目录 1 审计文件(audit files)1.1 定义1.2 查看审计信息1.3 审计相关参数1.4 审计的类型1.4.1 语句审计1.4.2 权限审计1.4.3 对象审计1.4.4 细粒度的审计 1.5 与审计相关的数据字典视图 1 审计文件(audit files) 1.1 定义 审…

PHP爬虫:获取商品销量详情API的利器

在电子商务时代,商品的销量数据对于商家来说至关重要。它不仅能够帮助商家了解市场动态,还能够指导库存管理和营销策略。PHP作为一种流行的服务器端脚本语言,结合其强大的HTTP请求处理能力,可以有效地用于编写爬虫程序&#xff0c…

我博客网站又遭受CC攻击了,记录一下

2024.9.29凌晨4点攻击开始,攻击目标是我的图床tc.zeruns.tech和博客blog.zeruns.tech,图床用的cdn是多吉云融合CDN,流量被刷了20GB左右就触发峰值关闭CDN了,HTTPS请求次数被刷了1.1亿次,因为设置了QPS,实际…

C++11中智能指针以及标准模板库 My_string My_stack

My_string.h #ifndef MY_STRING_H #define MY_STRING_H#include <iostream> #include <cstring> #include <stdexcept>using namespace std;template<typename T> class My_string { private:T *ptr; // 指向字符数组的指针int size; /…

不只是前端,后端、产品和测试也需要了解的浏览器知识(一)

目录标题 一、我们为什么要了解浏览器&#xff1f;1. 对于前端开发者2. 对于后端开发者 二、浏览器发展概述1. 宏观发展2. 微观发展 三、浏览器核心部件1. 浏览器界面介绍2. 目前浏览器的使用的渲染引擎和解释器总结3. 浏览器的解释器 四、各家浏览器目前的市场占比五、整体总结…