数据分析之数据准备(1-3)

2023-11-01

承接数据分析之数据探索
https://blog.csdn.net/qq_45626019/article/details/108074152

import pandas as pd
import numpy as np
housing=pd.read_csv(r"D:\sublime\机器学习\dataset\housing.csv")
#按照收入类别进行分层抽样
housing["income_cat"]=np.ceil(housing["median_income"]/1.5)
housing["income_cat"].where(housing["income_cat"]<5,5.0,inplace=True)

from sklearn.model_selection import StratifiedShuffleSplit
ss=StratifiedShuffleSplit(n_splits=1,test_size=0.2,random_state=42)
for train_index,test_index in ss.split(housing,housing["income_cat"]):
	strat_train_set=housing.iloc[train_index]
	strat_test_set=housing.iloc[test_index]

#回到干净数据集,划分目标和特征属性(标签-对应数据)

housing=strat_train_set.drop("median_house_value",axis=1)
housing_label=strat_train_set['median_house_value'].copy()

在第一部分我们已经注意到有部分缺失数据,为适应机器学习算法,我们需要对缺失数据进行删除。
①放弃相应缺失数据

housing.dropna(subset=['total_bedrooms'])

②放弃属性

housing.drop('total_bedrooms',axis=1)

③对缺失值进行填充(0,均值等)
1、普通方法

mean=housing['total_bedrooms'].mean()
housing['total_bedrooms'].fillna(mean)

2、利用scikit-learn

from sklearn.impute import SimpleImputer
imputer=SimpleImputer(strategy='median')
#中位数只能在数值属性上计算,因此需要构建一个没有文本的数据副本
housing_num=housing.drop('ocean_proximity',axis=1)
#使用fit()方法将imputer实例适配到训练集
imputer.fit(housing_num)
#imputer仅仅只是计算了每个属性的中位数值,并将结果存储到其实例变量的statistics_中.
print(imputer.statistics_)
print(housing_num.median().values)
'''
[-118.51     34.26     29.     2119.5     433.     1164.      408.
    3.5409    3.    ]
'''
X=imputer.transform(housing)
housing_tr=pd.DataFrame(X,columns=housing_num.columns)

#处理文本和分类属性
①这里要用到scikit-learn 中的LabelEncoder函数,将文本标签转化为数字
补充:机器学习算法会误以为两个相近的数字比两个相距很远的数字更为相似。

from sklearn.preprocessing import LabelEncoder
encoder=LabelEncoder()
housing_cat=housing['ocean_proximity']
housing_cat_encoded=encoder.fit_transform(housing_cat)
print(housing_cat_encoded)
print(encoder.classes_)
'''
[0 0 4 ... 1 0 3]
['<1H OCEAN' 'INLAND' 'ISLAND' 'NEAR BAY' 'NEAR OCEAN']
'''

②为解决①中编码所出现的问题,scikit-learn提供一个OneHotEncoder(独热)编码器。

from sklearn.preprocessing import OneHotEncoder
encoder=OneHotEncoder()
housing_cat_1hot=encoder.fit_transform(housing_cat_encoded.reshape(-1,1))#我们不知道housing_cat_encoded的shape属性是多少,但是想让housing_cat_encoded变成只有一列,行数不知道多少.
print(housing_cat_1hot.toarray())
#补充:housing_cat_1hot返回的是稀疏矩阵
'''
[[1. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1.]
 ...
 [0. 1. 0. 0. 0.]
 [1. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0.]]
'''

③使用LabelBinarizer类可以一次性完成两个转换(从文本转化为整数类别,再从整数类别转化为独热向量)

from sklearn.preprocessing import LabelBinarizer
encoder=LabelBinarizer()
housing_cat_1hot=encoder.fit_transform(housing_cat)
print(housing_cat_1hot)
'''
[[1 0 0 0 0]
 [1 0 0 0 0]
 [0 0 0 0 1]
 ...
 [0 1 0 0 0]
 [1 0 0 0 0]
 [0 0 0 1 0]]
'''

特征缩放
适应于各特征属性的值相差太大,如在本例中房间的总数是 10512,而收入中位数是0-15.
好处:提升模型的收敛速度,提升模型的精度(归一化很有必要,他可以让各个特征对结果做出的贡献相同。)
①最小最大缩放(移动数据,使所有特征都刚好位于 0 和 1 之间。)

  • 处理方法:将特征缩放到给定的最小值和最大值之间,也可以将每个特征的最大绝对值转换至单位大小。这种方法是对原始数据的线性变换,将数据归一到[0,1]中间;
  • 转换函数:x = (x-min) / (max-min);
  • 适用性:适用于分布范围较稳定的数据,当新数据的加入导致max/min变化,则需重新定义;
  • Outlier 的影响:因为outlier会影响最大值或最小值,因此对outlier非常敏感。

参数包括:min, max, copy

  • min:默认为0,指定区间的下限;
  • max:默认为1,指定区间的上限;
  • copy : 布尔值,默认为True,可选参数,表示拷贝一份数据以避免在原数据上进行操作,若设置为 False 执行插入行规范化并避免复制。

属性包括:min_, scale_, data_min_, data_max_

  • min_:每个功能调整为最小;
  • scale_:每个特征数据的相对缩放;
  • data_min_:每个特征在数据中出现的最小值;
  • data_max_:每个特征在数据中心出现的最大值。
from sklearn.preprocessing import MinMaxScaler
cope_with=MinMaxScaler(feature_range=(0, 1))  #调节归一化后的范围
housing_guiyi = cope_with.fit_transform(housing_num)
print(housing_guiyi)
'''
[[0.24501992 0.50478215 0.7254902  ... 0.06292009 0.15201859 0.25      ]
 [0.24103586 0.47927736 0.25490196 ... 0.02072442 0.40837368 1.        ]
 [0.71215139 0.02444208 0.58823529 ... 0.08588499 0.1629081  0.25      ]
 ...
 [0.79183267 0.16471838 0.15686275 ... 0.14245706 0.19119736 0.5       ]
 [0.6314741  0.1360255  0.58823529 ... 0.0660941  0.24569316 0.5       ]
 [0.18924303 0.55579171 1.         ... 0.11893204 0.21207294 0.5       ]]
 '''

②标准化(确保每个特征的平均值为 0、方差为 1,使所有特征都位于同一量级。)
补充:使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。

  • 处理方法:标准化数据减去均值,然后除以标准差,经过处理后数据符合标准正态分布,即均值为0,标准差为1;
  • 转化函数:x = (x-mean) / std;
  • 适用性:适用于本身服从正态分布的数据;
  • Outlier 的影响:基本可用于有outlier的情况,但在计算方差和均值时outliers仍然会影响计算。

参数包括:with_mean, with_std, copy

  • with_mean:布尔型,默认为 True,表示在缩放前将数据居中,当尝试在稀疏矩阵上时,这不起作用(并且会引发异常),因为将它们居中需要构建一个密集矩阵,在常见的用例中,该矩阵可能太大而无法容纳在内存中;
  • with_std:布尔型,默认为True,表示将数据换算成单位方差(或等效的单位标准差);
  • copy : 布尔值,默认为True,可选参数,表示拷贝一份数据以避免在原数据上进行操作,若设置为 False 执行插入行规范化并避免复制。

属性包括:mean_, scale_, var_, n_samples_seen_

  • mean_:训练集中每个特征的平均值,当_mean=False时,为None;
  • scale_:每个特征数据的相对缩放;
  • var_:训练集中每个特征的方差,用于计算比例,当_ std =False时,为None;
  • n_samples_seen_:每个特征处理的样本数。如没有丢失的样本,n_samples_seen_是一个整数,否则是一个数组,并将被重置或递增。
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
housing_standard = scaler.fit_transform(housing_num)
print(housing_standard)
'''
[[-1.15604281  0.77194962  0.74333089 ... -0.42069842 -0.61493744
  -0.95445595]
 [-1.17602483  0.6596948  -1.1653172  ... -1.02222705  1.33645936
   1.89030518]
 [ 1.18684903 -1.34218285  0.18664186 ... -0.0933178  -0.5320456
  -0.95445595]
 ...
 [ 1.58648943 -0.72478134 -1.56295222 ...  0.71315642 -0.3167053
  -0.00620224]
 [ 0.78221312 -0.85106801  0.18664186 ... -0.37545069  0.09812139
  -0.00620224]
 [-1.43579109  0.99645926  1.85670895 ...  0.3777909  -0.15779865
  -0.00620224]]
  '''

③正则化(它对每个数据点进行缩放,使得特征向量的欧式长度等于 1 。)

  • 1-范数:向量各分量绝对值之和
  • 2-范数:向量长度
  • 最大范数:向量各分量绝对值的最大值
  • p-范数的计算公式:||X||p=(|x1|p+|x2|p+…+|xn|p)1/p
  • 其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准
  • 常见用于文本分类和聚类、logistic回归中也会使用,有效防止过拟合
from sklearn.preprocessing import Normalizer
norm=Normalizer(copy=True,norm='l2')
housing_norm = norm.fit_transform(housing_tr)
print(housing_norm)
'''
[[-0.06794195  0.02078559  0.02118134 ...  0.18895989  0.00150733
   0.00111481]
 [-0.15798975  0.04800722  0.01814038 ...  0.14641878  0.00832047
   0.00647871]
 [-0.05170744  0.01445779  0.01367688 ...  0.20382968  0.00126273
   0.00088238]
 ...
 [-0.02149188  0.00629431  0.00166174 ...  0.14124817  0.00060419
   0.00055391]
 [-0.04830828  0.01384447  0.01269008 ...  0.14573127  0.00166301
   0.00122807]
 [-0.03522815  0.01086621  0.01496009 ...  0.18383655  0.00102851
   0.00086308]]
'''

④稳健标准化 RobustScaler(使用具有鲁棒性的统计量缩放带有异常值(离群值)的数据)

  • 处理方法:该缩放器删除中位数,并根据百分位数范围(默认值为IQR:四分位间距)缩放数据;
  • IQR:是第1个四分位数(25%)和第3个四分位数(75%)之间的范围;
  • 适用性:适用于包含许多异常值的数据;
  • Outlier 的影响:RobustScaler 利用IQR进行缩放来弱化 outlier 的影响。

参数包括:with_centering, with_scaling, quantile_range, copy

  • with_centering:布尔值,默认为 True,表示在缩放之前将数据居中。若使用稀疏矩阵时,这将导致转换引发异常,因为将它们居中需要建立一个密集的矩阵,在通常的使用情况下,该矩阵可能太大而无法容纳在内存中;
  • with_scaling : 布尔值,默认为True,表示将数据缩放到四分位数范围;
  • quantile_range : 元组,默认值为(25.0, 75.0)即 IQR,表示用于计算 scale_的分位数范围;
  • copy : 布尔值,默认为True,可选参数,表示拷贝一份数据以避免在原数据上进行操作,若设置为 False 执行插入行规范化并避免复制。

属性包括:center_, scale_

  • center_ :训练集中每个属性的中位数;
  • scale_ :训练集中每个属性的四分位间距。
from sklearn.preprocessing import RobustScaler
scaler=RobustScaler()
housing_standard = scaler.fit_transform(housing_num)
print(housing_standard)
'''
[[-0.89182058  0.8015873   0.47368421 ... -0.21362229 -0.3842127
  -0.5       ]
 [-0.90237467  0.73809524 -0.78947368 ... -0.91331269  1.32272581
   1.        ]
 [ 0.34564644 -0.39417989  0.10526316 ...  0.16718266 -0.31170501
  -0.5       ]
 ...
 [ 0.55672823 -0.04497354 -1.05263158 ...  1.10526316 -0.12334114
   0.        ]
 [ 0.13192612 -0.11640212  0.10526316 ... -0.16099071  0.23951876
   0.        ]
 [-1.03957784  0.92857143  1.21052632 ...  0.71517028  0.01565872
   0.        ]]
'''

补充:

  • 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,StandardScaler或者均值归一化表现更好(避免不同量纲对方差、协方差计算的影响);
  • 在不涉及距离度量、协方差、数据不符合正态分布、异常值较少的时候,可使用MinMaxScaler。(eg:图像处理中,将RGB图像转换为灰度图像后将其值限定在 [0, 255] 的范围);
  • 在带有的离群值较多的数据时,推荐使用RobustScaler。
    在这里插入图片描述

参考链接:

  • https://www.wandouip.com/t5i410748/
  • https://blog.csdn.net/m0_47478595/article/details/106402843?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据分析之数据准备(1-3) 的相关文章

随机推荐

  • python爬取51job简历查看信息

    python 爬虫 51job简历 存储历史 效果展示 脚本实现 linux 定时任务 查看定时任务是否添加成功 查看定时任务日志 运行常见问题 1 No module named requests 解决方法 2 No module nam
  • kafka的简单实例

    关于kafka的安装 我主要是在windows下部署的 大家可以看这一篇 https blog csdn net woshixiazaizhe article details 80610432 然后后台启动这个kafka 进入到kafka的
  • 朝圣Java(问题集锦)之:The Apache Tomcat installation at this directory is version 8.5.32. A Tomcat 8.0 inst...

    最近开始学Java了 有C 底子 但是学起来Java还是很吃力 感觉别人架好了各种包 自己只要调用就行了 结果还有各种bug出现 掩面中 启动Tomcat的时候 报错The Apache Tomcat installation at thi
  • Dubbo通信模型

    Dubbo和通信结合 通信实现 服务的发布过程使用通信功能 Protocol export 时会为每个服务创建一个Server 服务的引用过程使用通信功能 Protocol refer 时会创建一个Client 整个类结构及调用关系如下 从
  • (HAL库学习4)STM32CubeMX HAL FreeRTOS 任务创建与删除(也会教直接用代码实现方式)

    这次教的是使用STM32CubeMX使用FreeRTOS来进行任务的创建与任务的删除 其实还有FreeRTOS还有一些需要注意的地方 但是任务的创建与删除就是最重要的了 其他的会在后面讲到 首先说说对FreeRTOS的看法吧 这是公认的大面
  • gitbook 入门教程之 gitbook 简介

    gitBook 是一个基于node js的命令行工具 使用 github git 和 markdown asciiDoc 构建精美的电子书 gitbook 支持输出静态网页和电子书等多种格式 其中默认输出静态网页格式 gitbook 不仅支
  • 除了安苏哪个服务器稳定,同样是魔兽世界玩家,为什么安苏服务器那么不受玩家待见?...

    原标题 同样是魔兽世界玩家 为什么安苏服务器那么不受玩家待见 在魔兽世界中只要一提到安苏服务器 相信很多玩家想到的第一个标签就是贵族服务器 然而同样作为魔兽世界国服服务器中的一员 为什么安苏服务器就那么不受玩家的待见呢 其实原因就很多 今天
  • HTTP 协议详解

    目录 前言 1 HTTP 介绍 2 URL介绍 1 了解 URL 和 URI 2 URL 格式 3 URL encode 3 HTTP 协议格式 1 请求报文格式 2 响应报文格式 3 协议格式总结 4 HTTP 请求 Request 1
  • 红宝书--第一章总结分享

    红宝书 第一章总结分享 作为一名前端开发者 我想很有必要认真阅读业界大佬的著作 这不仅能拓展认知 更能发现曾经的遗漏点和误区 为了激励自己能坚持阅读完 特在此分享自己的品读总结 菜鸟也会变成老鸟 为了我的全栈梦 前端是少不了的 1 Java
  • 如何在Windows 11上安装pycocotools(实操记录)

    参考 https blog csdn net m0 45971439 article details 118332681 https blog csdn net en Wency article details 124767742 目录 一
  • 轻松拿结果-第一部分-第二章 管理者要做“定海神针”

    第二章 管理者要做 定海神针 管理者的三张面孔 做一个严厉的爸爸 在整个团队的管理过程中坚持执行制度 提高团队的人效 做一个温暖的妈妈 让所有员工感受到团队带来的安全感 让大家有所依靠 做一个优秀的教练 有方法 成系统 精细化 过程化的对员
  • 分拆TableSplit 让多个mapper同时读取

    分拆TableSplit 让多个mapper同时读取 默认情况下 一个region是一个tableSplit 对应一个mapper进行读取 但单mapper读取速度较慢 因此想着把默认一个table split分拆成多个split 这样ha
  • AttributeError:‘CartPoleEnv‘ object has no attribute ‘seed‘解决方案

    前言 在尝试运行gym的classic control模块中的Cart Pole的相关代码时 想用随机种子重置一下环境 结果不停的报AttributeError CartPoleEnv object has no attribute see
  • PyQt5-QTablewidght设置表头外框线

    1 设置表头外框线 自带的效果 修改 经过一番探索后 添加一行代码 self logo encode table horizontalHeader setStyleSheet color rgb 0 83 128 border 1px so
  • WIN10系统下VS2019编译CloudCompare2.12.4

    目录 一 源码下载 二 源码编译 1 CCCoreLib 2 Cmake编译 3 设置相关选项 三 报错处理 四 使用插件 本文由CSDN点云侠原创 原文链接 爬虫网站自重 一 源码下载 1 CloudCompare源码 https git
  • oracle rdbms 占内存_Oracle-块损坏故障:ORA-01578

    ORA 01578 错误 ORACLE data block corrupted file s block s 块损坏故障现象 ORA 01578 一般情况下 ORA 01578 错误是由硬件问题引起的 如果ORA 01578 错误始终返回
  • 金山文档服务器暂不可用,常见问题

    GPU相对于CPU有哪些优势 GPU比CPU拥有更多的逻辑运算单元 ALU 支持并行计算 可以多线程大规模并行计算 GPU加速型云服务器是否可以支持配置升级和降级 GPU加速型云服务器支持对直通型GPU云服务器实例进行升级配置 支持套餐有G
  • mysql切换数据库命令_MySQL数据库的基础使用命令大全

    show databases 显示所有已经存在的数据库 create database test 创建名字为test的数据库 drop database test 删除名字为test的数据库 use test 使用名字为test的数据库 s
  • some()和every()的区别

    for in for of forEach some 方法用于检测数组中的是否存在元素满足指定条件 存在返回true 否则返回false 即 只要有一个元素满足条件即为true some 不会对空数组进行检测 some 不会改变原始数组 如
  • 数据分析之数据准备(1-3)

    承接数据分析之数据探索 https blog csdn net qq 45626019 article details 108074152 import pandas as pd import numpy as np housing pd