#第27篇分享:数据无量纲化(python语言:sklearn 预处理及特征工程)(3)

article/2025/9/9 21:45:07

#数据挖掘五大流程:获取数据,数据预处理 (更改数据类型,有噪声,有缺失),特征工程 (归一化,标准化,正则化,降维),建模,测试模型并预测结果,上线验证模型效果;

1.为什么要进行数据预处理及特征工程:
数据预处理:
a.首先数据可能存在噪声或者缺失值或存在字符串类型特征不能直接输入模型;

b.数据的量纲不一致,有的特征数值很大,有的特征数值很小,对结果的影响不一致,数值很大也会拖慢计算时间(会影响一部分用距离预测的模型:例如:K近邻,K-Means,决策树不需要,决策树可以把任何数据处理好);
特征工程:
c.数据特征很多,但是很大一部分无有效信息或者信息量非常少,留下无用甚至成为干扰项;

数据预处理及特征工程之后,可以加快模型的求解速度,而且很多时候也可以提升模型预测的精度:

'''数据预处理优势:
加快求解速度:逻辑回归,支持向量机,神经网络;
提升模型精度:K近邻,K-Means
决策树不需要,决策树可以把任何数据处理好。使用的模块:
模块preprocessing:预处理模块
模块impute:填补缺失值专用;
模块feature_selection:包含特征选择的各种方法的实践方法的理论:
数据无量纲化:不同规格数据转换到统一规格;线性无量纲化:
中心化:(所有数据减去一个固定的值,让数据平移到某个位置;)归一化:(数据按最小值中心化后,再按极差缩放:x=(x-min(x))/(max(x)-min(x)))->preprocessing.MinMaxScaler标准化:(数据按均值中心化后,再按标准差缩放,数据服从分布均值0,方差1的正太分布 x=(x-x均值)/x标准差)数据处理过程先用标准化,不好用再试试归一化。缺失值填补:
1.pandas填补;
2.impute.Simplelmputer数据的编码:非数值型数值转换
preprocessing.LabelIEncoder
preprocessing.OrdinaIEncoder
preprocessing.OneHotEnocoder
preprocessing.Binarizer   根据阈值将特征转换为0/1
preprocessing.KBinsDiscretizer特征选择:feature_selection
特征提取:指的是从文字,图像,声音提取有用的信息;
特征选择:选择对结果有影响的特征;过滤法,嵌入法,包装法,降维算法;
特征创造:通过组合计算得到新的特征;
'''

2.数据无量纲化:数据预处理,提升算法的准确度:

a.无量纲化(nondimensionalize 或者dimensionless):是指通过一个合适的变量替代,就是通过计算,将数据转变为更适合模型计算的数值,经过实践发现无量纲化后确实会加快算法速度及提升准确度。
数据训练之前的数据需要人工处理一下,因为sklearn模型是不接受字符串类型的数据,我们需要把字符串等类型数据统一转换为模型可识别的数值类型,比如对三分类变量用[0,1,2]代替;

b.提升模型的准确度:仅仅把字符串转化为数字是不够的,我们需要对数据进一步处理,也就特征工程,包括:数据归一化、数据标准化、数据正则化、降维以及特征编码等等:
归一化处理:把特征变量转换为最小值为0,最大值为1;
标准化处理:把特征变量转换成均值为0,方差为1;
正则化处理:正则化是用于抑制过拟合方法的统称,通过动态调整模型参数的取值 来降低模型的复杂度,用损失函数计算最优解的一般会使用正则化,逻辑回归,线性回归等,L1,L2正则;
数据降维:把数据按照一定方式降低维度,方差过滤比较容易理解,直接删除低于我规定方差的特征;但是PCA降维,我们只能查看结果及控制降到多少维度,无法确认降维的过程;
特征编码:例如常用的one_hot独热编码,可以把分类特征转化为数值类型;

①.数据归一化:
归一到0-1之间的数值(与最大最小数据有关,所以对异常值敏感):
在这里插入图片描述

#1.归一化处理:异常点影响很大,因为使用最大最小值计算
#1.数据归一化实例:
from sklearn.preprocessing import MinMaxScaler
data = [[-1,2],[-0.5,6],[0,10],[1,18]]
import pandas as pd
print(pd.DataFrame(data))#a.实现数据的归一化:
scaler = MinMaxScaler()
result = scaler.fit_transform(data)
print(result)#b.实现数据归一化不在0-1之间:
scaler1 = MinMaxScaler(feature_range=[5,10]) #改变归一化的范围,了解即可
result1 = scaler1.fit_transform(data)
print(result1)
#c.实现数据归一化反向操作:
data1 = scaler1.inverse_transform(result1)
print(data1)

②.数据标准化:
标准化与归一化类似,都是缩小数据范围,标准化是把数据转换为均值为0,方差为1范围内的数据:
在这里插入图片描述

#2.数据标准化实例:
from sklearn.preprocessing import StandardScaler
data = [[-1,2],[-0.5,6],[0,10],[1,18]]#a.实现数据的标准化:
scaler = StandardScaler()
result = scaler.fit_transform(data)
print(result)
print(result.mean())
print(result.std())
print(scaler.var_ ) #查看方差属性
print(scaler.mean_ ) #查看均值属性#c.实现数据归一化反向操作:
data1 = scaler.inverse_transform(result)
print(data1)#可视化一下
import matplotlib.pyplot as plt
import pandas as pd
plt.figure(figsize=(10,5))
ax =plt.subplot(111)
result = pd.DataFrame(result)plt.scatter(result[0],result[1])
plt.show()

③.数据正则化:一边是作为算法里面的惩罚项,数据预处理一般用不到:正则化
逻辑回归中的正则化
将经验风险最小化函数改为结构风险最小化函数,或者说将损失函数加上正则化项,可以使模型变简单,从而避免过拟合。以线性回归为例,常用的正则化有L1正则和L2正则。

④.数据降维:
数据降维降的是特征数量,无用的特征减少无论从计算时间还是预测准确方面都是有好处的:过滤式简单粗暴,方差小的认为意义不大,直接卡掉;

PCA降维过程相对复杂,不是删除某一个特征,我们可以加入参数,选择保留百分之多少的特征:

'''
特征方程:
过滤式:方差过滤;相关性过滤:卡方,F检验,互信息;
Embedded嵌入法:可以实现过滤法与相关性方法过滤的功能;
包装法RFE:feature_selection.RFE;
'''
# a.方差过滤:VarianceThreshold:认为特征方差小的没有意义
#对于需要遍历的算法很有效;随机森林不需要遍历,降低计算成本。
data = [[1,2,1],[1,1,1],[1,2,3],[1,3,1]] #不填参数,方差阈值0,第一个1就被过滤了
from sklearn.feature_selection import VarianceThreshold
import pandas as pd
import numpy as np
data = pd.DataFrame(data)
selector = VarianceThreshold(np.median(data.var().values)) #np.median(data.var().values) 以中位数为阈值
x_var0 = selector.fit_transform(data)
print(x_var0,data,np.median(data.var()))#b.相关性过滤:卡方,F检验,互信息
#①.卡方过滤:针对离散型标签:超参数:k保留特征个数,学习曲线寻找
#根据p进行k值的选择,p<0.05或0.01 p>0.05或0.01
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.ensemble import RandomForestClassifier as RFCx_fschi = SelectKBest(chi2,k=300).fit_transform(x_fsvar,y)
x_fschi.shape()
chivalue,pvalues_chi=chi2(x_fsvar,y)
#根据p进行选择k
k = chivalue.shape[0]-(pvalues_chi>0.05).sum#②.F检验:方差齐性检验,可以做分类及回归,
from sklearn.feature_selection import f_classif
F,pvalues_f = f_classif(x_fsvar,y)
k = F.shape[0]-(pvalues_f>0.05).sum#③互信息法:捕捉每个特征与标签的任意关系的过滤方法;
# 返回每个特征与目标之间信息量的估计:0表示两个变量独立,1表示两个变量完全相关;
from sklearn.feature_selection import mutual_info_classif as MIC
result = MIC(x_fsvar,y)
k = result.shape[0] - sum(result<0)#c.Embedded嵌入法:可以实现过滤法与相关性方法过滤的功能
from sklearn.feature_selection import SelectFromModel   #元变换器,对于拟合后有coef_,feature_importances_属性的评估器使用
from sklearn.ensemble import RandomForestClassifier as RFCrfc_ = RFC(n_estimators=10,random_state=0)
x_embedded = SelectFromModel(rfc_,threshold=0.005).fit_transform(x,y) #threshold特征重要性的阈值
print(x_embedded.shape) #模型的维度会被降低,可以化学习曲线找寻最佳阈值#d.包装法:feature_selection.RFE;n_feature_to_select:想要选取的特征个数;
#step:表示每次迭代希望移除的特征个数,estimator实例化后的评估器;.support_:
#返回所有特征是否最后备选的布尔矩阵;.ranking_:返回特征按次数迭代中综合重要性排名;from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
rfc_ = RFC(n_estimators=10,random_state=0)
selector = RFE(rfc_,n_features_to_select=340,step=50).fit(x,y)print(selector.support_.sum())
print(selector.ranking_)
x_wrapper = selector.transform(x)cross_val_score(rfc_,x_wrapper,cv=5).mean()

数据降维:

#e.主成分分析PCA:降维,特征达到上百个用一下
from sklearn.decomposition import  PCA
'''
主成分分析进行特征降维
'''
pca = PCA(n_components=0.9)
data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)#f.SVD奇异值分解:
是个不错的方法,学习中

以上就完成了数据预处理及特征工程的简单介绍,先做个目录用吧,不断填充信息。

持续更新,,,


http://chatgpt.dhexx.cn/article/w3CBsvFJ.shtml

相关文章

均值归一化_数据无量纲化处理(归一化VS标准化)

常见的无量纲化处理方法主要有极值化、标准化、均值化和标准差化方法&#xff0c;而最常使用的是标准化方法。 标准化方法处理后的各指标均值都为0,标准差都为1,它只反映了各指标之间的相互影响,在无量纲化的同时也抹杀了各指标之间变异程度上的差异,因此,标准化方法并不适用于…

特征工程:特征预处理(无量纲化处理)

文章目录 一、解释二、归一化三、标准化★一、解释 特征预处理API sklearn.preprocessing为什么要做归一化/标准化? 无量纲化 特征的单位或者数量相差较大,这样某特征会‘绝对’最终结果,使得其他算法无法学习到其他特征。 二、归一化 将原始数据进行变换将数据映…

为什么梯度的负方向是梯度下降最快的方向

文章目录 梯度与导数的关系梯度下降算法梯度方向是上升方向一阶泰勒展开式与负梯度 梯度与导数的关系 梯度方向指向数值增长最快的方向&#xff0c;大小为变化率。通过这个性质也说明梯度是有方向和大小的矢量。通过梯度的定义我们发现&#xff0c;梯度的求解其实就是求函数偏…

数字图像处理 基于matlab、opencv计算图像的梯度方向和梯度幅值

一、图像的梯度 1、简述 图像可以被视为标量场(即二维函数)。 通过微分将标量场转换为矢量场。 梯度是一个向量,描述了在x或y方向上移动时,图像变化的速度。我们使用导数来回答这样的问题,图像梯度的大小告诉图像变化的速度,而梯度的方向告诉图像变化最…

梯度方向直方图Histogram of Oriented Gradients (HOG)

在学习HOG特征的时候&#xff0c;发现一片英文文章讲得浅显易懂。因此翻译在这里学习。(文中的图片均来自翻译原文) 原文链接&#xff1a;Histogram of Oriented Gradients 什么是特征描述子 特征描述子一张图片或者一个图片块的一种表示&#xff0c;通过提取有用信息并扔掉…

为什么梯度方向一定是函数增大的方向

全微分的定义 如果函数在区域D内各点处都可微分&#xff0c;那么称这个函数在D内可微分。 以上就是为了解释一下为啥 f ( x Δ x , y Δ y ) − f ( x , y ) f x ′ f(x\Delta x, y\Delta y)-f(x, y)f_{x}^{} f(xΔx,yΔy)−f(x,y)fx′​△x f y ′ f_{y}^{} fy′​△y …

为什么沿梯度方向,函数变化最快???

很多时候&#xff0c;我们时间有限&#xff0c;对一些知识只能不求甚解&#xff0c;但这这些不求甚解的知识又会很困扰我们&#xff0c;总想着原理是啥&#xff0c;为啥这样做。就比如我们学梯度下降时&#xff0c;都知道梯度下降是机器学习、深度学习的核心优化算法&#xff0…

机器学习算法篇:从为什么梯度方向是函数变化率最快方向详谈梯度下降算法

前言&#xff1a;若需获取本文全部的手书版原稿资料&#xff0c;扫码关注公众号&#xff0c;回复: 梯度下降法 即可获取。 原创不易&#xff0c;转载请告知并注明出处&#xff01;扫码关注公众号【机器学习与自然语言处理】&#xff0c;定期发布知识图谱&#xff0c;自然语言处…

⚡可行梯度方向法⚡(Feasible Gradient Direction Method ,FGDM)

⚡最近很烦⚡ 有一阵子没更新了&#xff0c;感觉整个暑假被忽悠了&#xff0c;六月份找Boss指明了一个Direction&#xff0c;然后整个暑假都在忙于补充Proposal相关的Knowledge&#xff0c;但是&#xff0c;被忽悠局局长Boss给忽悠了&#xff08;谁人能明白其中的难受&#xff…

梯度方向为何变化率最大

梯度(本质上是一个向量&#xff09;是机器学习里面的重要基础&#xff0c;借助梯度下降才能最小化损失函数&#xff0c;逐步更新网络参数&#xff0c;得到最佳的函数表示。梯度方向的变化率最大&#xff0c;沿着梯度的反方向&#xff0c;可以最大效率的降低损失函数。在对梯度的…

梯度下降算法过程及为什么负梯度方向是下降最快方向(附代码)

对于梯度下降算法我们熟知的一个例子就是下山问题&#xff0c;当我们位于山的某一点处&#xff0c;沿着当前位置寻找山坡最陡方向以一定步长进行移动&#xff0c;直到走到山脚。那么这个过程具体是怎么做到的&#xff1f;为什么说负梯度方向是下降最快方向呢&#xff1f; 首先…

微积分:如何理解方向导数与梯度?

文章目录 前言方向导数梯度方向导数公式的证明 前言 前文介绍了多元函数微分的实质&#xff0c;接下来介绍多元函数中的方向导数与梯度&#xff0c;以二元函数为例 方向导数 方向导数的实质&#xff1a;自变量沿着xoy平面上的某个方向变化时&#xff0c;f的变化率&#xff0…

Opencv中计算梯度、梯度幅值以及梯度方向的相关函数

在进行图像处理中&#xff0c;经常会计算图像的梯度、梯度幅值以及梯度等&#xff0c;对于不太了解opencv的&#xff0c;可能会自己写计算梯度、梯度幅值和梯度方向的函数&#xff0c;其实这些工作OpenCV都已经为我们做了。下面来看看Opencv中的相关函数&#xff1a; 1&#xf…

梯度方向,梯度下降法,牛顿法

梯度、等高线切线、方向导数 一、直观理解梯度方向与等高线的切线方向垂直 二、方向导数梯度是函数上升的方向&#xff0c;且在该方向上的方向导数最大 三、从泰勒级数展开来看四、牛顿法五、梯度下降与牛顿法的区别 一、直观理解 梯度方向与等高线的切线方向垂直 假设一函数为…

函数的梯度方向和切线方向_导数、方向导数与梯度

导数,方向导数,切线、梯度是从高中就开始接触的概念,然而对这几个概念的认识不清,困惑了我很长时间,下面我将以图文并茂的形式,对这几个概念做详细的解释。 1, 导数 定义:设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相…

梯度方向与等高线方向垂直的理解

项目github地址&#xff1a;bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star&#xff0c;留言&#xff0c;一起学习进步 1.前言 在讲解梯度下降算法时&#xff0c;经常可以看到下面这张图(图片来自Wiki百科): 这张图后面一般都会再接一句&#xff0c;梯度…

为什么梯度方向一定是函数增大的方向?

前言 今年是很幸运的一年&#xff0c;准备了大半年的研究生终于考上了&#xff01;但问题随着就来了&#xff0c;我选择的导师方向是深度学习有关的&#xff0c;我从前觉得这个东西十分的高大上&#xff0c;一直敬而远之&#xff0c;没想到今天自己也要参与进来成为它的从业者&…

为什么梯度是上升方向,梯度下降要取负?

讨论 这个问题是很容易忽略&#xff0c;也就一个负号的问题&#xff0c;大多是记下来&#xff0c;但是确实也一个搞不懂的问题。 方向导数 简单说明方向导数&#xff0c;毕竟梯度与方向导数是有关系的。   上图 l l l 对 x x x, y y y的偏导&#xff0c;分别在 x x x和 y y…

深入浅出理解HOG特征---梯度方向直方图

梯度方向直方图 原文路径&#xff1a;https://www.learnopencv.com/histogram-of-oriented-gradients/ 最近在搞车牌识别的时候&#xff0c;训练样本去识别车牌的时候用到HOG特征。国外一篇文章让我受益良多 什么是特征描述符&#xff1f; 特征描述符是指通过提取有用的信息并…

函数的梯度方向和切线方向_方向导数和梯度是什么?

原标题:方向导数和梯度是什么? 为什么梯度的方向是函数在该点的方向导数最大的方向,梯度的模是最大方向导数的值?大家在看复习全书时,有认真想过这个问题吗?小编在本文以二元函数为例详细讲解方向导数和梯度,并试图以尽可能通俗地语言回答上述问题。 1.梯度 首先看看二…