数据标准化

数据标准化的意义

1.为什么要进行标准化?
一个目标变量(y)可以认为是由多个特征变量(x)影响和控制的,这些特征变量的量纲和数值的量级通常会不一样;而通过标准化处理,可以使得不同的特征变量具有相同的尺度(也就是说将特征的值控制在某个范围内),这样目标变量就可以由多个相同尺寸的特征变量进行控制,这样,在使用梯度下降法学习参数的时候,不同特征对参数的影响程度就一样了
简而言之:对数据标准化的目的是消除特征之间的差异性
2.标准化运用的条件
当原始数据不同维度上的特征的尺度(单位)不一致时,需要标准化步骤对数据进行预处理,反之则不需要进行数据标准化。
例如:
a 回归问题
b 机器学习算法
c 训练神经网络
d 聚类问题
e 分类问题
f 主成分分析(PCA)问题
引用1

数据标准化的具体实施

1.数据标准化和数据归一化的区别
数据归一化是数据标准化的一种典型做法,即将数据统一映射到[0,1]区间上.
数据的标准化是指将数据按照比例缩放,使之落入一个特定的区间.

min-max标准化(Min-max normalization)

min-max标准化方法是对原始数据进行线性变换。设minA和maxA分别为属性A的最小值和最大值,将A的一个原始值x通过min-max标准化映射成在区间[0,1]中的值x’,其公式为:
新数据=(原数据-最小值)/(最大值-最小值)

不足:当有新数据加入时需要重新进行数据归一化
优点:
1.在不涉及距离度量、协方差计算、数据不符合正态分布的时候,适合用Min-max normalization
有关协方差的知识
期望

2、即0-1标准化,又称最大值-最小值标准化,核心要义是将原始指标缩放到0~1之间的区间内,但不改变原始数据的分布
3、对于方差非常小的属性可以增强其稳定性;
4、维持稀疏矩阵中为0的条目。

# 归一化处理
X_train_norm = preprocessing.normalize(train_data, norm='l2', axis=1)  # 直接用标准化函数
normalizer = preprocessing.Normalizer()  # 也可以用标准化类,然后调用方法
X_train_norm2 = normalizer.fit_transform(train_data)# 0-1标准化
X_train_minmax = preprocessing.minmax_scale(train_data, feature_range=(0, 1), axis=0, copy=True)  # 直接用标准化函数
min_max_scaler = preprocessing.MinMaxScaler()  # 也可以用标准化类,然后调用方法
X_train_minmax2 = min_max_scaler.fit_transform(train_data)

z-score 标准化(zero-mean normalization)

这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用z-score标准化到x’。
z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。标准差标准化,归一化后的数据呈正态分布,即均值为零
公式为:新数据=(原数据-均值)/标准差

不足:假如原始数据没有呈高斯分布,标准化的数据分布效果并不好
在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,Z-score standardization表现更好。


# z-score标准化1
X_train_zs = preprocessing.scale(train_data, axis=0, with_mean=True, with_std=True, copy=True)  # 直接用标准化函数
zs_scaler = preprocessing.StandardScaler()  # 也可以用标准化类,然后调用方法
X_train_zs2 = zs_scaler.fit_transform(train_data)
# z-score标准化2
def z_score(x, axis):x = np.array(x).astype(float)xr = np.rollaxis(x, axis=axis)xr -= np.mean(x, axis=axis)xr /= np.std(x, axis=axis)# print(x)return x# z-score标准化3
data = (data - data.mean(axis = 0))/(data.std(axis = 0)) #简洁的语句实现了标准化变换,类似地可以实现任何想要的变换。

比重法

L2正则化:y = x/sqrt(Σx^2),即新数据=(原数据)/sqrt(平方和),被称为L2正则转换。
正则化则是通过范数规则来约束特征属性,通过正则化我们可以降低数据训练处来的模型的过拟合可能,和机器学习中所讲述的L1、L2正则的效果一样。在进行正则化操作的过程中,不会改变数据的分布情况,但是会改变数据特征之间的相关特性

二值化

对于定量数据(特征取值连续),根据给定的阈值将其进行转换,如果大于阈值赋值为1,否则赋值为0;对于定性数据(特征取值离散,也有可能是文本数据),根据给定规则将其进行转换,符合规则的赋值为1,否则赋值为0。

# 二值化
X_train_binary = preprocessing.binarize(train_data, threshold=0, copy=True)  # 按照阈值threshold将数据转换成成0-1,小于等于threshold为 0

特征转换

● 文本特征属性转换:机器学习的模型算法均要求输入的数据必须是数值型的,所以对于文本类型的特征属性,需要进行文本数据转换,也就是需要将文本数据转换为数值型数据。常用方式如下: 词袋法(BOW/TF)、TF-IDF(Term frequency-inverse document frequency)、HashTF、Word2Vec(主要用于单词的相似性考量)。

from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
# 将字符串转化为数字,用pd.Categorical
# pd.Categorical(data)
# iris_data['Species'] = iris_data["Species"].map({0:"setosa",1:"versicolor",2:"virginica"})
X, y = iris_data.iloc[:, :-1], iris_data.iloc[:, -1]
train_data, test_data, train_target, test_target = train_test_split(X, y, test_size=0.25, stratify=y)

●缺省值填充:缺省值是数据中最常见的一个问题,处理缺省值有很多方式,主要包括以下四个 步骤进行缺省值处理: 确定缺省值范围->去除不需要的字段->填充缺省值内容->重新获取数据。

from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
# 数据清洗
# 重复值处理
print('存在' if any(train_data.duplicated()) else '不存在', '重复观测值')
train_data.drop_duplicates()
# 缺失值处理
print('存在' if any(train_data.isnull()) else '不存在', '缺失值')
train_data.dropna()  # 直接删除记录
train_data.fillna(method='ffill')  # 前向填充
train_data.fillna(method='bfill')  # 后向填充
train_data.fillna(value=2)  # 值填充
train_data.fillna(value={'sepal length (cm)':train_data['sepal length (cm)'].mean()})  # 统计值填充
# 缺失值插补
x = [[np.nan, '1', '3'], [np.nan, '3', '5']]
imputer = preprocessing.Imputer(missing_values='NaN', strategy='mean', axis=1)
y = imputer.fit_transform(x)

●哑编码(OneHotEncoder):也称哑变量处理,对于定性的数据(也就是分类的数据),可以采用N位的状态寄存器来对N个状态进行编码,每个状态都有一个独立的寄存器位,并且在任意状态下只有一位有效;是一种常用的将特征数字化的方式。比如有一个特征属性:[‘male’,‘female’],那么male使用向量[1,0]表示,female使用[0,1]

●二值化

●标准化(归一化)

from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
# 标准差监测
xmean = data1.mean()
xstd = data1.std()
print('存在' if any(data1>xmean+2*xstd) else '不存在', '上限异常值')
print('存在' if any(data1<xmean-2*xstd) else '不存在', '下限异常值')
# 箱线图监测
q1 = data1.quantile(0.25)
q3 = data1.quantile(0.75)
up = q3+1.5*(q3-q1)
dw = q1-1.5*(q3-q1)
print('存在' if any(data1> up) else '不存在', '上限异常值')
print('存在' if any(data1< dw) else '不存在', '下限异常值')
data1[data1>up] = data1[data1<up].max()
data1[data1<dw] = data1[data1>dw].min()

数据标准化代码引用
引用

数学建模笔记一数据标准化相关推荐

  1. Python小白的数学建模课-23.数据拟合全集

    拟合是用一个连续函数(曲线)靠近给定的离散数据,使其与给定的数据相吻合. 数据拟合的算法相对比较简单,但调用不同工具和方法时的函数定义和参数设置有所差异,往往使小白感到困惑. 本文基于 Scipy 工 ...

  2. Python小白的数学建模课-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 1. ...

  3. Python的数学建模课-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 1. ...

  4. 数学建模笔记——插值拟合模型(二)

    今天是8月21日,距离上次写文章好像将近一个月了--这段时间经历了建模校内选拔赛,考试周,以及与网络小说的斗智斗勇--好吧,其实也没干什么,除了考试就是荒废-- 我最近有在思考一个问题,就是我所关注的 ...

  5. 2021年MathorCup高校数学建模挑战赛—大数据竞赛A题二手车估价问题解题思路

    MathorCup高校数学建模挑战赛-大数据竞赛 A题 二手车估价问题 原题再现:   随着我国的机动车数量不断增长,人均保有量也随之增加,机动车以"二手车"形式在流通环节,包括二 ...

  6. 数学建模笔记之一起读论文2019年C题——机场的出租车问题

    数学建模笔记之一起读论文--机场的出租车问题 2021-8-28 全国大学生数学建模竞赛 2019年C题 B站链接--国赛C题真题解析 1 赛题阅读与分析 原题再现: 问题C 机场的出租车问题 大多数 ...

  7. 2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛(baseline)

    教育部<高等学校人工智能创新行动计划>教技[2018]3号,鼓励对计算机专业类的智能科学与技术.数据科学与大数据技术等专业进行调整和整合,鼓励各个领域与大数据进行深度融合,通过大数据技术促 ...

  8. MathorCup高校数学建模挑战赛——大数据竞赛 赛道A 移动通信基站流量预测baseline

    文章目录 前言 一.简单分析 二.具体程序 1.引入库 2.读入数据 3.数据处理 4.模型训练和预测 5.结果文件输出 总结 前言 本文给出2020年MathorCup高校数学建模挑战赛--大数据竞 ...

  9. 第三届2022MathorCup高校数学建模挑战赛大数据论文加代码(附详解)

    基于系统决策树分类的移动用户体验影响因素研究 摘要 本题主要是一个研究预测模型,以中国移动通信集团北京公司为背景,让客户根据 自身在网络覆盖与信号强度方面的体验和语音通话过程中的整体体验来进行语音通话 ...

最新文章

  1. maven打包记录1
  2. Selenium提取数据之标签对象提取文本内容和属性值
  3. xmarin.android导航栏,android – 如何在xamarin表单中更改导航页面后退按钮
  4. Hashmap,Set,Map,List,ArrayList的区别
  5. pfSense book之 Open***站点到站点连接示例(共享密钥)
  6. vue中Router的封装以及使用
  7. linux 网络测试脚本,linux检查网络状态脚本
  8. 在ubuntu纯字符gdb界面下来开发调试嵌入式ARM
  9. MySQL内核月报 2014.09-MySQL· 捉虫动态·auto_increment
  10. Oracle 10G2 for CentOS 5.2 安装截图详解
  11. request获取各种路径
  12. mysql delete in死锁_delete where in导致的死锁问题
  13. 寒武纪笔试——嵌入式
  14. Java打印101-150之间所有的质数
  15. html中微博发布怎么做,js实现微博发布小功能
  16. HTML5期末大作业:订餐系统网站设计——绿色的网上订餐系统(23个页面) 网页作品 订餐系统网页设计作业模板 学生网页制作源代码下载
  17. 学习iOS 黑魔法 笔记
  18. 计算机怎样禁用中等加密算法,教你win10系统BitLocker加密功能禁用硬件加密
  19. .Net工程师面试笔试宝典
  20. Diary(三)——日志列表显示以及分页查询的实现(上)

热门文章

  1. ctfshow---vip限免题目1~10关
  2. 微信小程序报错页面未定义
  3. Neutrino追问®AMA第10期|Hydro联合创始人:分叉的目的是给生态提供更好的去中心化交易
  4. linux shell编程实例总结
  5. Vue.js 2.0 渐进开发应用实践
  6. 终于换掉了驾驶证上的丑照!超简单附教程,赶紧收藏!
  7. 卡尔曼滤波的5个公式及每个参数的含义
  8. Hadoop内hive之间,hive与DB、ES等之间数据交互的问题与解决方案
  9. Cleartext HTTP traffic to ... not permitted
  10. Win11网络不稳定怎么办?Win11连接wifi频繁掉线的解决方法