线性回归模型进行特征重要性分析

目的

        线性回归是很常用的模型;在局部可解释性上也经常用到。

数据归一化

        归一化通常是为了确保不同特征之间的数值范围差异不会对线性模型的训练产生过大的影响。在某些情况下,特征归一化可以提高模型的性能,但并不是所有情况下都需要进行归一化。

        归一化的必要性取决于你的数据和所使用的算法。对于某些线性模型,比如线性回归和支持向量机,数据归一化是一个常见的实践,因为它们对特征的尺度敏感。

        但对于其他算法,如决策树和随机森林,通常不需要进行归一化。

        在实际应用中,建议根据你的数据和所选用的模型来决定是否进行归一化。如果你的数据特征具有不同的尺度,并且你使用的是那些对特征尺度敏感的线性模型,那么进行归一化可能会有所帮助。否则,你可以尝试在没有归一化的情况下训练模型,然后根据模型性能来决定是否需要进行归一化。

 对新数据进行归一化处理
new_data_sample_scaled = scaler.transform(new_data_sample)# 使用模型进行预测
predicted_value = model.predict(new_data_sample_scaled)
这样就能确保在预测新数据时,特征的尺度与训练数据保持一致。

MinMaxScaler底层代码

class MinMaxScaler Found at: sklearn.preprocessing.dataclass MinMaxScaler(BaseEstimator, TransformerMixin):def __init__(self, feature_range=(0, 1), copy=True):self.feature_range = feature_rangeself.copy = copydef _reset(self):"""Reset internal data-dependent state of the scaler, if necessary.__init__ parameters are not touched."""# Checking one attribute is enough, becase they are all set together# in partial_fitif hasattr(self, 'scale_'):del self.scale_del self.min_del self.n_samples_seen_del self.data_min_del self.data_max_del self.data_range_def fit(self, X, y=None):"""Compute the minimum and maximum to be used for later scaling.Parameters----------X : array-like, shape [n_samples, n_features]The data used to compute the per-feature minimum and maximumused for later scaling along the features axis."""# Reset internal state before fittingself._reset()return self.partial_fit(X, y)def partial_fit(self, X, y=None):"""Online computation of min and max on X for later scaling.All of X is processed as a single batch. This is intended for caseswhen `fit` is not feasible due to very large number of `n_samples`or because X is read from a continuous stream.Parameters----------X : array-like, shape [n_samples, n_features]The data used to compute the mean and standard deviationused for later scaling along the features axis.y : Passthrough for ``Pipeline`` compatibility."""feature_range = self.feature_rangeif feature_range[0] >= feature_range[1]:raise ValueError("Minimum of desired feature range must be smaller"" than maximum. Got %s." % str(feature_range))if sparse.issparse(X):raise TypeError("MinMaxScaler does no support sparse input. ""You may consider to use MaxAbsScaler instead.")X = check_array(X, copy=self.copy, warn_on_dtype=True, estimator=self, dtype=FLOAT_DTYPES)data_min = np.min(X, axis=0)data_max = np.max(X, axis=0)# First passif not hasattr(self, 'n_samples_seen_'):self.n_samples_seen_ = X.shape[0]else:data_min = np.minimum(self.data_min_, data_min)data_max = np.maximum(self.data_max_, data_max)self.n_samples_seen_ += X.shape[0] # Next stepsdata_range = data_max - data_minself.scale_ = (feature_range[1] - feature_range[0]) / _handle_zeros_in_scale(data_range)self.min_ = feature_range[0] - data_min * self.scale_self.data_min_ = data_minself.data_max_ = data_maxself.data_range_ = data_rangereturn selfdef transform(self, X):"""Scaling features of X according to feature_range.Parameters----------X : array-like, shape [n_samples, n_features]Input data that will be transformed."""check_is_fitted(self, 'scale_')X = check_array(X, copy=self.copy, dtype=FLOAT_DTYPES)X *= self.scale_X += self.min_return Xdef inverse_transform(self, X):"""Undo the scaling of X according to feature_range.Parameters----------X : array-like, shape [n_samples, n_features]Input data that will be transformed. It cannot be sparse."""check_is_fitted(self, 'scale_')X = check_array(X, copy=self.copy, dtype=FLOAT_DTYPES)X -= self.min_X /= self.scale_return X


数据分箱

n_bins = [5]
kb = KBinsDiscretizer(n_bins=n_bins, encode = 'ordinal')
kb.fit(X[selected_features])
X_train=kb.transform(X_train[selected_features])
from sklearn.preprocessing import KBinsDiscretizer
import joblib# 创建 KBinsDiscretizer 实例并进行分箱
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
X_binned = est.fit_transform(X)# 保存 KBinsDiscretizer 参数到文件
joblib.dump(est, 'kbins_discretizer.pkl')# 加载 KBinsDiscretizer 参数
loaded_estimator = joblib.load('kbins_discretizer.pkl')# 使用加载的参数进行分箱
X_binned_loaded = loaded_estimator.transform(X)from sklearn.preprocessing import KBinsDiscretizerdef save_kbins_discretizer_params(estimator, filename):params = {'n_bins': estimator.n_bins,'encode': estimator.encode,'strategy': estimator.strategy,# 其他可能的参数}with open(filename, 'w') as f:for key, value in params.items():f.write(f"{key}: {value}\n")# 创建 KBinsDiscretizer 实例并进行分箱
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')# 保存 KBinsDiscretizer 参数到文本文件
save_kbins_discretizer_params(est, 'kbins_discretizer_params.txt')

 KBinsDiscretizer 的源代码


KBinsDiscretizer 的源代码参数包括:n_bins:指定要创建的箱的数量。
encode:指定编码的方法。可以是'onehot'、'onehot-dense'、'ordinal'中的一个。
strategy:指定分箱的策略。可以是'uniform'、'quantile'、'kmeans'中的一个。
dtype:指定输出数组的数据类型。
bin_edges_:一个属性,它包含每个特征的箱的边界。
以下是 KBinsDiscretizer 类的源代码参数的简要说明:n_bins:用于指定要创建的箱的数量。默认值为5。
encode:指定编码的方法。可选值包括:
'onehot':使用一热编码。
'onehot-dense':使用密集矩阵的一热编码。
'ordinal':使用整数标签编码。默认为 'onehot'。
strategy:指定分箱的策略。可选值包括:
'uniform':将箱的宽度保持相等。
'quantile':将箱的数量保持不变,但是每个箱内的样本数量大致相等。
'kmeans':将箱的数量保持不变,但是使用 k-means 聚类来确定箱的边界。默认为 'quantile'。
dtype:指定输出数组的数据类型。默认为 np.float64。
bin_edges_:一个属性,它包含每个特征的箱的边界。这是一个列表,其中每个元素都是一个数组,表示相应特征的箱的边界。
您可以在 sklearn/preprocessing/_discretization.py 中找到 KBinsDiscretizer 类的完整源代码,以查看详细的参数和实现细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/157178.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PG学习笔记(PostgreSQL)

PG学习笔记(PostgreSQL) 1、PG特点 项目极限值最大单个数据库大小不限最大最大数据单表大小32 TB单条记录最大1.6TB单字段最大允许1GB单表允许最大记录数不限单表最大字段数250~1600(取决于字段类型)单表最大索引数不限 2、PG安…

go-gin-api 本地部署调试问题总结

1.告警邮箱设置 保存后会自动将配置信息保存在fat_configs.toml 文件中; 可能出现问题:报错 550和 anth 问题,说明你的邮箱配置有问题(密码或者授权码); 2.生成数据表curd 执行结果报错 exec: “gormge…

Win10 系统中用户环境变量和系统环境变量是什么作用和区别?

环境: Win10专业版 问题描述: Win10 系统中用户环境变量和系统环境变量是什么作用和区别? 解答: 在Windows 10系统中,用户环境变量和系统环境变量是两个不同的环境变量,它们具有不同的作用和区别 1.用…

UE4中无法保存项目问题

系列文章目录 文章目录 系列文章目录前言一、解决方法 前言 取消:停止保存所有资产并返回编辑器。 重试:尝试再次保存资产。 继续:仅跳过保存该资产。 当我点击继续时,关闭项目,然后重新打开项目,发现之前…

geecg-uniapp 同源策略 数据请求 获取后台数据 进行页面渲染 ui库安装 冲突解决(3)

一,同源策略 (1)首先找到env 要是没有env 需要创建一个替换成后端接口 (2)因为他封装了 先找到 http 请求位置一级一级找 然后进行接口修改 (3)appUpdata 修改接口 运行即可 &#x…

idea中父工程Project创建

1.file-->new-->Project 2.选择maven包和JavaSDK 3.填写项目名,选择文件目录,项目包等 4.配置maven tip:约定>配置>编码 5.设置项目编码 6.注解生效激活,便于项目中使用注解 7.Java编译版本选择8 8.File Type 过滤&a…

【C++STL基础入门】list基本使用

文章目录 前言一、list简介1.1 list是什么1.2 list的头文件 二、list2.1 定义对象2.2 list构造函数2.3 list的属性函数 总结 前言 STL(Standard Template Library)是C标准库的一个重要组成部分,提供了一套丰富的数据结构和算法,可…

对CU50的修改(未使用)

目的是把CU50中的选择配置拿出来,再把最后BOM的结果拿出来。2023.10.13 一、CU50里面2个标准函数有修改: ----------LCUKOF01----函数----------------CALL FUNCTION CU01_DISPLAY_BOMEXPORTINGmasterdata rcuko-ukompRESULT …

LoRa技术未来发展前景:物联网和边缘计算的引领者

随着物联网和边缘计算的快速发展,低功耗广域网(LoRa)技术在连接远距离设备、实现长距离通信和满足低功耗需求方面崭露头角。本文将分析LoRa技术在未来的发展前景,尤其是在物联网和边缘计算领域的潜在影响。 LoRa技术的核心优势 1…

python:使用卷积神经网络(CNN)进行回归预测

作者:CSDN @ _养乐多_ 本文详细记录了从Excel或者csv中读取用于训练卷积神经网络(CNN)模型的数据,包括多个自变量和1个因变量数据,以供卷积神经网络模型的训练。随后,我们将测试数据集应用于该CNN模型,进行回归预测和分析。 该代码进一步修改可用于遥感影像回归模型. …

Android位置服务和应用权限

Github:https://github.com/MADMAX110/Odometer 一、使用位置服务 之前的Odometer应用是显示一个随机数,现在要使用Android的位置服务返回走过的距离。 修改getDiatance方法使其返回走过的距离,为此要用Android的位置服务。这些服务允许你得到用户的当…

milvus和相似度检索

流程 milvus的使用流程是 创建collection -> 创建partition -> 创建索引(如果需要检索) -> 插入数据 -> 检索 这里以Python为例, 使用的milvus版本为2.3.x 首先按照库, python3 -m pip install pymilvus Connect from pymilvus import connections c…

12.SpringBoot之RestTemplate的使用

SpringBoot之RestTemplate的使用 初识RestTemplate RestTemplate是Spring框架提供用于调用Rest接口的一个应用,它简化了与http服务通信方式。RestTemplate统一Restfull调用的标准,封装HTTP链接,只要需提供URL及返回值类型即可完成调用。相比…

工业互联网系列1 - 智能制造中有哪些数据在传输

工业互联网以网络为基础,需要传输的数据种类多种多样,这些数据对于实时监控、生产优化、设备维护和决策支持等方面都至关重要。 以下是一些常见智能制造业中需要传输的数据类型: 传感器数据:制造设备上安装的传感器(如…

原理:用UE5制作一个2D游戏

选中资产图片右键--Sprite Actions--Apply Paper2D Texture Settings 制作场景 把它丢到场景里,并把坐标归零 创建图块集tileset 打开新建的tile set,根据最小图块设置最小尺寸单元 选择需要的图块单元,add box 对新建的tile set右键创建til…

简单实现接口自动化测试(基于python+unittest)

简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Python自带的Unittest框架调用,期望各位可以通过本文对接口自动化测试有一个大致的了解。 引言 为什么要…

深度学习中的激活函数

给定一个线性变换可以把x的值映射到一条直线上,如下图 输出结果就是y1w1xb1 如果y1经过一个线性变换得到一个y2,那么x和y2的关系是什么? 答案,毫无疑问是一条直线,不管如何的线性变换,依旧是一个线性的问…

关于网络协议的若干问题(三)

1、当发送的报文出问题的时候,会发送一个 ICMP 的差错报文来报告错误,但是如果 ICMP 的差错报文也出问题了呢? 答:不会导致产生 ICMP 差错报文的有: ICMP 差错报文(ICMP 查询报文可能会产生 ICMP 差错报文…

UI自动化测试:Selenium+PO模式+Pytest+Allure整合

本人目前工作中未涉及到WebUI自动化测试,但为了提升自己的技术,多学习一点还是没有坏处的,废话不多说了,目前主流的webUI测试框架应该还是selenium,考虑到可维护性、拓展性、复用性等,我们采用PO模式去写我…

【ElasticSearch】更新es索引生命周期策略,策略何时对索引生效

大家好,我是好学的小师弟,今天和大家讨论下更新es索引生命周期策略后,策略何时对索引生效 结论: 若当前索引已应用策略A(旧),更新完策略A后,新的策略A会立即对原来的已经应用该策略的索引生效;若当前索引…