机器学习——特征预处理

【说明】文章内容来自《机器学习入门——基于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外,中断也是一个十分重要且常用的外设;只有掌握了中断,再处理程序时才能掌握好解决实际问题的逻辑思…

H3CIE_IS专题

isis与ospf的区别 区域划分: 骨干区域: 网络类型: DR选举 封装: 扩展性:IS-IS的报文 IIH:IS-IS Hello报文,建立和维护邻接关系 LSP:链路状态报文,传递链路状态的详细信…

网络安全等级保护2.0 定级、评测、实施与运维-复习资料

文章目录 一、练习题-11、单选题2、判断题3、填空题/单选题4、多选题 二、练习题-21、单选题2、多选题3、判断题 三、简答题1、ARP地址欺骗的分类、原理是什么?可采取什么措施进行有效控制?2、三级信息系统中,网络安全中的设备安全有哪些检查…

场强定位三角定位技术介绍和算法演示

场强定位&三角定位技术介绍 场强定位和三角定位是无线通信领域中用于确定物体位置的两种重要技术。它们在很多应用场景中,如室内导航、智能家居、紧急救援和军事操作等,发挥着关键作用。 ### 场强定位(RSSI定位) 场强定位&…

HTML5结构规范

一,getBoundingClientRect; 用于获得页面中某个元素的左,上,右和下分别相对浏览器视窗的位置。 const elTop el.getBoundingClientRect().top;二, Web Worker 当在 HTML 页面中执行脚本时,页面是不可响应的…

使用python脚本部署k8s集群

1.环境规划: 节点IP地址操作系统配置脚本运行节点192.168.174.5centos7.92G2核server192.168.174.150centos7.92G2核client1192.168.174.151centos7.92G2核client2192.168.174.152centos7.92G2 2.运行准备: yum install -y python python-pip pip in…

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

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

微信小程序如何实现WXML和js文件之间的数据交互

在微信小程序中,WXML负责页面结构的描述,而js文件则负责页面的逻辑处理和数据交互。要实现WXML和js文件之间的数据交互,可以通过以下几种方法: JS传输数据到WXML 数据绑定:在WXML中使用{{}}语法将js文件中的数据绑定…

宏景eHR SQL注入漏洞复现

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

SQL事务管理

事务管理是针对数据库的一组操作。由一条或多条SQL语句组成,这些语句在逻辑上具有强烈的相关性,如果其中一条语句无法执行,那么所有的语句都不会执行。 1 事务管理 原子性 指一个事务必须被视为一个不可分割的最小单元。只有事务中所有的数…

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…

什么是PHP的SPL(标准PHP库)?

SPL&#xff08;Standard PHP Library&#xff09;是 PHP 中的标准库&#xff0c;提供了一组用于解决常见问题的接口和类。它包含了一系列的数据结构、算法、迭代器、文件处理、异常处理等组件&#xff0c;使得 PHP 开发者能够更方便地处理各种编程任务。 SPL 提供的主要组件包…

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

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

Pencile - exer

import java.util.HashMap; import java.util.Map;public class TableConverter {public static void main(String[] args) {// 示例输入数据String[] inputData {"line1 col1 A","line2 col3 B","line3 col1 C","line4 col2 D",};//…

云架构的思考4--云上灾备

目录 1 关键指标2 灾备方案3 云上灾备常见模式3.1 “地域”模式3.2 “应用”模式3.3 “数据”模式 4 总结 前几章讲了云上架构、开发等事项&#xff0c;其实灾备也算是架构中的一步&#xff0c;但是这里特意拎出来讲主要有2个原因&#xff0c;其一是因为灾备相对独立且复杂&…

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

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

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

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

函数节流(js的问题)

函数节流也用到了高阶函数的知识&#xff0c;因为比较重要&#xff0c;所以单开了一个标题。 javascript中的函数在大多数情况下都是由用户主动调用触发的&#xff0c;除非是函数本身的实现不合理。但是在一些少数情况下&#xff0c;函数可能被很频繁的调用&#xff0c;而造成大…

【Linux】多线程编程

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

Qt图像处理-亮度、对比度、灰度、锐化、负片的实现

本文演示Qt中图像的亮度、对比度、灰度、锐化、负片处理实现 一、概述 亮度和对比度原理 图像亮度通俗理解便是图像的明暗程度,数字图像 f(x,y) = i(x,y) r(x, y) ,如果灰度值在[0,255]之间,则 f 值越接近0亮度越低,f 值越接近255亮度越高。而且我们也要把亮度和对比…