1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 机器学习数据集读取和预处理

机器学习数据集读取和预处理

时间:2022-07-13 12:50:19

相关推荐

机器学习数据集读取和预处理

本文以干豆数据集为例,数据集下载位置如下:干豆数据集

import pandas as pdimport sklearnimport numpy as np

数据读取与预处理

dry = pd.read_csv("Dry_Bean.csv")

在info返回的信息中的non-null也能看出数据集不存在缺失值。

dry.info()

<class 'pandas.core.frame.DataFrame'>RangeIndex: 13611 entries, 0 to 13610Data columns (total 17 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 Area 13611 non-null int64 1 Perimeter 13611 non-null float642 MajorAxisLength 13611 non-null float643 MinorAxisLength 13611 non-null float644 AspectRation13611 non-null float645 Eccentricity13611 non-null float646 ConvexArea 13611 non-null int64 7 EquivDiameter 13611 non-null float648 Extent 13611 non-null float649 Solidity 13611 non-null float6410 roundness 13611 non-null float6411 Compactness13611 non-null float6412 ShapeFactor113611 non-null float6413 ShapeFactor213611 non-null float6414 ShapeFactor313611 non-null float6415 ShapeFactor413611 non-null float6416 Class 13611 non-null object dtypes: float64(14), int64(2), object(1)memory usage: 1.8+ MB

dry.head()

dry["Class"].unique()

array(['SEKER', 'BARBUNYA', 'BOMBAY', 'CALI', 'HOROZ', 'SIRA', 'DERMASON'],dtype=object)

dry["Class"].nunique()

7

dry.columns

Index(['Area', 'Perimeter', 'MajorAxisLength', 'MinorAxisLength','AspectRation', 'Eccentricity', 'ConvexArea', 'EquivDiameter', 'Extent','Solidity', 'roundness', 'Compactness', 'ShapeFactor1', 'ShapeFactor2','ShapeFactor3', 'ShapeFactor4', 'Class'],dtype='object')

dry.index

RangeIndex(start=0, stop=13611, step=1)

重复值检查

dry.duplicated().sum()

68

数据缺失值检验

dry.isnull().sum()

Area0Perimeter0MajorAxisLength 0MinorAxisLength 0AspectRation 0Eccentricity 0ConvexArea 0EquivDiameter0Extent 0Solidity 0roundness0Compactness 0ShapeFactor1 0ShapeFactor2 0ShapeFactor3 0ShapeFactor4 0Class 0dtype: int64

我们也可以通过定义如下函数来输出更加完整的每一列缺失值的数值和占比

def missing (df):"""计算每一列的缺失值及占比"""missing_number = df.isnull().sum().sort_values(ascending=False) # 每一列的缺失值求和后降序排序missing_percent = (df.isnull().sum()/df.isnull().count()).sort_values(ascending=False)# 每一列缺失值占比missing_values = pd.concat([missing_number, missing_percent], axis=1, keys=['Missing_Number', 'Missing_Percent'])# 合并为一个DataFramereturn missing_values

missing(dry)

dry.describe()

dry.groupby("Class").mean()

查看标签字段的取值分布情况

import seaborn as snsimport matplotlib.pyplot as plt

dry["Class"].value_counts()

DERMASON 3546SIRA 2636SEKER 2027HOROZ 1928CALI 1630BARBUNYA 1322BOMBAY 522Name: Class, dtype: int64

sns.displot(dry['Class'])

数据标准化与归一化

当然,除了离散变量的重编码外,有的时候我们也需要对连续变量进行转化,以提升模型表现或模型训练效率。在之前的内容中我们曾介绍了关于连续变量标准化和归一化的相关内容,对连续变量而言,标准化可以消除量纲影响并且加快梯度下降的迭代效率,而归一化则能够对每条数据进行进行范数单位化处理,我们可以通过下面的内容进行标准化和归一化相关内容回顾。

标准化与归一化

从功能上划分,sklearn中的归一化其实是分为标准化(Standardization)和归一化(Normalization)两类。其中,此前所介绍的Z-Score标准化和0-1标准化,都属于Standardization的范畴,而在sklearn中,Normalization则特指针对单个样本(一行数据)利用其范数进行放缩的过程。不过二者都属于数据预处理范畴,都在sklearn中的Preprocessing data模块下。

需要注意的是,此前我们介绍数据归一化时有讨论过标准化和归一化名称上的区别,在大多数场景下其实我们并不会对其进行特意的区分,但sklearn中标准化和归一化则各指代一类数据处理方法,此处需要注意。

标准化 Standardization

sklearn的标准化过程,即包括Z-Score标准化,也包括0-1标准化,并且即可以通过实用函数来进行标准化处理,同时也可以利用评估器来执行标准化过程。接下来我们分不同功能以的不同实现形式来进行讨论:

Z-Score标准化的评估器实现方法

实用函数进行标准化处理,尽管从代码实现角度来看清晰易懂,但却不适用于许多实际的机器学习建模场景。其一是因为在进行数据集的训练集和测试集切分后,我们首先要在训练集进行标准化、然后统计训练集上统计均值和方差再对测试集进行标准化处理,因此其实还需要一个统计训练集相关统计量的过程;其二则是因为相比实用函数,sklearn中的评估器其实会有一个非常便捷的串联的功能,sklearn中提供了Pipeline工具能够对多个评估器进行串联进而组成一个机器学习流,从而简化模型在重复调用时候所需代码量,因此通过评估器的方法进行数据标准化,其实是一种更加通用的选择。

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

scaler.fit()

将特征和标签分开:

#.提取特征数据、标签数据cols = [i for i in dry.columns if i not in ['Class']] #获取种特征名称,不包含标签print(cols)

['Area', 'Perimeter', 'MajorAxisLength', 'MinorAxisLength', 'AspectRation', 'Eccentricity', 'ConvexArea', 'EquivDiameter', 'Extent', 'Solidity', 'roundness', 'Compactness', 'ShapeFactor1', 'ShapeFactor2', 'ShapeFactor3', 'ShapeFactor4']

data = dry[cols]data.head()

target = dry["Class"]target.head()

0 SEKER1 SEKER2 SEKER3 SEKER4 SEKERName: Class, dtype: object

data_Standard = scaler.fit_transform(data)data_Standard

array([[-0.84074853, -1.1433189 , -1.30659814, ..., 2.4021726 ,1.92572347, 0.83837102],[-0.82918764, -1.01392388, -1.39591111, ..., 3.10089364,2.68970162, 0.77113831],[-0.80715717, -1.07882906, -1.25235661, ..., 2.23509111,1.84135576, 0.91675506],...,[-0.37203825, -0.44783294, -0.45047814, ..., 0.28920501,0.33632829, 0.39025106],[-0.37176543, -0.42702856, -0.42897404, ..., 0.22837456,0.2489734 , 0.03644007],[-0.37135619, -0.38755718, -0.2917356 , ..., -0.12777538,-0.27648141, 0.71371941]])

from sklearn.preprocessing import Normalizer

normlize = Normalizer()data_normlize.fit_transform(data)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。