机器学习——特征预处理

【说明】文章内容来自《机器学习入门——基于sklearn》,用于学习记录。若有争议联系删除。 

        特征预处理就是对数据进行集成、转换、规约等一系列处理,使之适合算法模型的过程。

        sklearn提供了preprocessing模块,用于归一化、标准化、鲁棒化、正则化等数据预处理。

preprocessing模块常用方法
方法名方法含义
preprocessing.MinMaxScaler归一化
preprocessing.StandardScaler标准化
preprocessing.RobustScaler鲁棒化
preprocessing.normalize正则化

1、归一化

        归一化又称区间缩放法,采用归一化将不同规格的数据转换到同一规格。归一化利用边界值信息将特征的取值区间缩放到某个特点的范围,如[0,1]等。

归一化计算公式:

X1 = (x-min)/(max-min)

x2 = x1(mx-mn)+mi

【参数说明】

  1. max:最大值
  2. min:最小值
  3. mx, mi:用于指定区间,默认mx为1,mi为0.

        归一化将原始数据通过线性变换缩放到[0,1]。由于异常值往往是最大值或最小值,所以归一化的鲁棒性较差。

sklearn提供了MinMaxScaler方法进行归一化,具体语法如下:

MinMaxScaler(feature_range = (0,1))#feature_range = (0,1)将范围设置为0~1。

1.1 归一化示例:

from sklearn.preprocessing import MinMaxScaler
def Normalization():Normalization = MinMaxScaler(feature_range = (0,1))data = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]print(data)#调用fit_transform#意思是找出data的均值和标准差,并应用在data上data_Normal = Normalization.fit_transform(data)print(data_Normal)return None
if __name__ == '__main__':Normalization()
#############直接调用
# from sklearn import preprocessing
# data1 = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]
# min_max_scaler = preprocessing.MinMaxScaler()
# data1_minmax = min_max_scaler.fit_transform(data1)
# print(data1_minmax)

2、标准化

        标准化用于解决归一化容易收到样本中最大值或者最小值等异常值的影响问题,将数据按比例缩放到特定区间。

标准差公式:

z-score标准化转换公式:

z=(x-\mu )/\delta

参数说明:

\mu:平均值

        标准化的前提是特征俯冲正态分布。进行标准化后,数据聚集在0附近,方差为1,有利于模型的训练。

sklearn提供了StandardScaler方法实现标准化,具体语法:

StandardScaler(copy, with_mean)

【参数说明】

copy:取值为True或False。在用归一化的值代替原来的值时设置为False。

with_mean:取值为True或False。在处理稀疏矩阵时设置为False。

标准化示例:

from sklearn.preprocessing import StandardScaler
def Standardization():std = StandardScaler()data = [[1.,-1.,3.],[2.,4.,2.],[4.,6.,-1.]]print(data)data_Standard = std.fit_transform(data)print(data_Standard)return None
if __name__ == '__main__':Standardization()

3、鲁棒化

        当数据包含许多异常值,使用平均值和方差缩放均不能取得较好效果,可以使用鲁棒性缩放方法处理。

        preprossing的RobustScaler使用中位数和四分位数进行数据转换,直接将异常值剔除,具体语法:

  1. RobustScaler(quantile_range,with_centerring,with_scaling)
  2. with_centering:布尔值,默认为True,表示在缩放之前将数据居中
  3. with_scaling:布尔值,默认为True,表示将数据缩放发哦四分位数范围
  4. quantile_range:元组,默认值为(25.0,75.0),即IQR(四分位间距),表示用于计算scale的分位数范围

鲁棒化示例:

from sklearn.preprocessing import RobustScaler
X = [[1.,-2., 2.],[-2., 1., 3.],[4., 1., -2.]]
transformer = RobustScaler().fit(X)
RobustScaler(quantile_range = (25.0, 75.0),with_centering = True, with_scaling = True)
print(transformer.transform(X))

4、正则化

        正则化是将每个样本缩放到单位范式,使数据分布在一个半径为1的圆或者球内。

        preprocessing模块提供了normalize方法实现正则化,语法:

 normalize(X,norm = 'l2')

【参数说明】

X:样本数据

l2: L2范数

示例:

from sklearn.preprocessing import normalize
X = [[1., -1., 2.],[2., 0., 0.],[0., 1., -1.]]
X_normalized = normalize(X,norm='l2')
print(X_normalized)

5、案例

【说明】需要自己创建一个dummy.xls文件。内容如下:

import pandas as pd
import numpy as np
from collections import Counter   #引入计数器
from sklearn import preprocessing 
from matplotlib import pyplot as plt
import seaborn as sns                      #seaborn绘图库
plt.rcParams['font.sans-serif'] = ['SimHei']#中文字体设置为黑体
plt.rcParams['axes.unicode_minus'] = False#解决保存图像时负号显示为方块的问题
sns.set(font = 'SimHei')                   #解决seaborn中文显示问题
data = pd.read_excel("e:/dummy.xls")        #在e盘根目录下创建dummy.xls文件
print(data)
#显示序列的前n 行(默认值)
print('data head:\n',data.head())
#查看数据的行列大小
print('data.shape:\n',data.shape)
#显示制定列的数据描述属性值
print('data.describe:\n',data.describe())
#进行列级别的判断,只要某一列有NaN或值为空,则为真
print(data.isnull().any())
#将列中为NaN或值为空的个数统计出来,并将缺失值最多的排在前面
total = data.isnull().sum().sort_values(ascending = False)
print('total:\n',total)#输出百分比
# .isnull()查找缺失值,sort_values(ascending = False)是否按指定列的数组进行排序
percent = (data.isnull().sum()/data.isnull().count()).sort_values(ascending = False)
#pd.concat()函数可以沿着指定的轴将多个dataframe或者series拼接到一起。axis = 左右拼接,
missing_data = pd.concat([total,percent],axis = 1, keys = ['Total','Percent'])
missing_data.head(20)#导入missingno并删除缺失值
# import missingno
# missingno.matrix(data)
data = data.dropna(thresh = data.shape[0] * 0.5, axis = 1)
#将至少有一半以上是非空的列筛选出来
#如果某一行都是NaN才删除,默认只保留没有空值的行
data1 = data.dropna(axis = 0,how = 'any')
print(data1)#统计重复记录数
data.duplicated().sum()
data.drop_duplicates()
data.columns
id_col = ['姓名']
cat_col = ['学历','学校']
cont_col = ['成绩','能力']
print(data[cat_col])
print(data[cont_col])#计算出现的频次
for i in cat_col:print(pd.Series(data1[i]).value_counts())plt.plot(data1[i])
dummies = pd.get_dummies(data1[cat_col])#转换为哑变量可以增加数据特征
print('哑变量:\n',dummies)from sklearn import preprocessing
#对连续型数据进行统计
data1[cont_col].describe()
#对连续型数据,将偏度大于0.75的数值用取对数的方法进行转换,使之符合正态分布
skewed_feats = data[cont_col].apply(lambda x: (x.dropna()).skew())
skewed_feats = skewed_feats[skewed_feats > 0.75]
skewed_feats = skewed_feats.index
data[skewed_feats] = np.log1p(data[skewed_feats])
print(skewed_feats)
#对连续数据进行标准化
scaled = preprocessing.scale(data[cont_col])
scaled = pd.DataFrame(scaled,columns = cont_col)
print(scaled)
m = dummies.join(scaled)
data_cleaned = data[id_col].join(m)
print('标准化:\n',data_cleaned)#变量之间的相关性
print('变量之间的相关性:\n',data_cleaned.corr())
#绘制热力图
def corr_heat(df):dfData = abs(df.corr())plt.subplots(figsize = (9,9))sns.heatmap(dfData, annot = True, vmax = 1, square = True, cmap = 'Blues')plt.show()
corr_heat(data_cleaned)

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

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

相关文章

STM32--中断使用(超详细!)

写在前面:前面的学习中,我们接触了STM32的第一个外设GPIO,这也是最常用的一个外设;而除了GPIO外,中断也是一个十分重要且常用的外设;只有掌握了中断,再处理程序时才能掌握好解决实际问题的逻辑思…

AI人工智能与云原生:创新科技的完美结合

人工智能(AI)是当今科技领域的热门话题,而云原生则是一种新兴的软件开发和部署模式。AI人工智能与云原生的结合,为现代技术创新提供了无限的可能性。本文将探讨AI与云原生的关系,并介绍其如何在实际应用中实现协同效应…

宏景eHR SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR app_check_in/get_org_tree.jsp接口处存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞…

Django、Echarts异步请求、动态更新

前端页面 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>echarts示例</title> <script src"jquery.min.js"></script><script type "text/javascript" src "echarts.m…

Rancher中使用promtail+loki+grafna收集k8s日志并展示

Rancher中使用promtail+loki+grafna收集k8s日志并展示 根据应用需求和日志数量级别选择对应的日志收集、过滤和展示方式,当日志量不太大,又想简单集中管理查看日志时,可使用promtail+loki+grafna的方式。本文找那个loki和grafana外置在了k8s集群之外。 1、添加Chart Repo …

Linux-----5、文件系统

# 文件系统 # 终端的基本操作 ㈠ 打开多个终端 ㈡ 快速清屏 新建标签&#xff1a;command T 新建窗口&#xff1a;command N 关闭标签&#xff1a;command Q 关闭窗口&#xff1a;command W 放大&#xff1a;command 缩小&#xff1a;command - 清屏&#xff…

智慧城市/一网统管建设:人员危险行为检测算法,为城市安全保驾护航

随着人们压力的不断增加&#xff0c;经常会看见在日常生活中由于小摩擦造成的大事故。如何在事故发生时进行及时告警&#xff0c;又如何在事故发生后进行证据搜索与事件溯源&#xff1f;旭帆科技智能视频监控人员危险行为/事件检测算法可以给出答案。 全程监控&#xff0c;有源…

【Linux】多线程编程

目录 1. 线程基础知识 2. 线程创建 3. 线程ID&#xff08;TID&#xff09; 4. 线程终止 5. 线程取消 6. 线程等待 7. 线程分离 8. 线程互斥 8.1 初始化互斥量 8.2 销毁互斥量 8.3 互斥量加锁和解锁 9. 可重入和线程安全 10. 线程同步之条件变量 10.1 初始化条件变…

Maven下载及安装自用版

Maven下载及安装自用版 可能是Maven用久了。感觉Maven用起来还算顺手&#xff0c;比Gradle要好上手一些。 一、下载 Maven 下载地址 注意下载版本和依赖要求&#xff0c;下载后&#xff0c;解压放在指定的位置;注意安装地址&#xff0c;放在自己规划好的开发环境专用文件夹里…

ubuntu创建apt-mirror本地仓库

首先创建apt-mirror的服务端&#xff0c;也就是存储所有apt-get下载的文件和依赖。大约需要300G&#xff0c;预留400G左右空间就可以开始了。 安装ubuntu省略&#xff0c;用的是ubuntu202204 ubuntu挂载硬盘&#xff08;不需要的可以跳过&#xff09;: #下载挂载工具 sudo apt…

C++类与对象(一)

目录 一&#xff0c;面向过程和面向对象初步认识 二&#xff0c;类的引入 三&#xff0c;类的定义 四&#xff0c;类的访问限定符及封装 五&#xff0c;类的实例化 六&#xff0c;类对象模型 七&#xff0c;this指针 一&#xff0c;面向过程和面向对象初步认识 c语言是面…

使用动画曲线编辑器打造炫酷的3D可视化ACE

前言 在制作3D可视化看板时&#xff0c;除了精细的模型结构外&#xff0c;炫酷的动画效果也是必不可少的。无论是复杂的还是简单的动画效果&#xff0c;要实现100%的自然平滑都是具有挑战性的工作。这涉及到物理引擎的计算和对动画效果的数学建模分析。一般来说&#xff0c;只…

HPM6750系列--第七篇 Visual Studio Code使用openocd调试查看外设信息

一、目的 在《HPM6750系列--第四篇 搭建Visual Studio Code开发调试环境》我们已经手把手指导大家如何在visual studio code中进行开发&#xff0c;包括编译调试等步骤以及相关配置文件。 但是在实际调试时发现找不到芯片寄存器实时显示的窗口&#xff0c;本篇主要讲解如何实现…

天翼云盘秒变硬盘分享

https://cloud.189.cn/web/share?codeAvUnqaj6NNza&#xff08;访问码&#xff1a;wf4r&#xff09;y 以下介绍为作者开发的单机版软件&#xff0c;可用于Windows环境中将天翼云盘挂载为本地硬盘&#xff0c;确实可以达到本地硬盘的使用感知&#xff0c;对于多终端数据副本一…

电子信息、物联网专业大学生如何提高动手能力

作为一名电子类或物联网类专业学生&#xff0c;仅仅掌握专业基础理论知识是不够的&#xff0c;还需要增加实际动手能力和实践经验。那么&#xff0c;动手实践能力真的那么重要吗&#xff1f;我们应该怎么提高动手能力呢&#xff1f;本文就谈谈这些问题。 所谓动手能力&#xf…

移植Modelsim仿真工程

背景 上班在公司用的PC1生成并完整的进行了仿真&#xff0c;打包成zip&#xff0c;经过微信传输并在家里的PC2上打开想要继续进行仿真&#xff0c;需要如何处理呢&#xff1f; 环境 软件路径公司PC1Quartus II Prime Pro 21.4C:\intelfpga_pro\21.4\quartus\bin64\qpro.exeMo…

python的Pandas库介绍

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;喜欢的话麻烦您点个&#x1f44d;和⭐&#xff01; &#x1f388;…

JAVA:深入探讨Map的多种遍历方式

1、简述 在现代编程中&#xff0c;Map&#xff08;映射&#xff09;是一种常见的数据结构&#xff0c;用于存储键-值对。在许多编程语言中&#xff0c;Map提供了灵活的数据组织方式&#xff0c;但为了充分发挥其功能&#xff0c;我们需要了解多种遍历方式。本文将深入探讨Map的…

网络基础——路由协议及ensp操作

目录 一、路由器及路由表 1.路由协议&#xff1a; 2.路由器转发原理&#xff1a; 3.路由表&#xff1a; 二、静态路由优缺点及特殊静态路由默认路由 1.静态路由的优缺点&#xff1a; 2.下一跳地址 3.默认路由 三、静态路由配置 四、补充备胎 平均负载 五、补充&…

Maven的安装配置流程

步骤一&#xff1a;下载Maven 打开Maven官方网站&#xff0c;进入"Download"页面。我这里有下好的&#xff0c;网盘链接在文末&#xff01;&#xff01; 在"Download"页面中找到最新版本的Maven&#xff0c;选择一个稳定的版本。通常&#xff0c;你会看到…