100天的ML day01 数据预处理

Table of Contents

 

步骤

第1步:导入需要的库

第2步:导入数据集

第3步:处理丢失数据

第4步:解析分类数据

第5步:拆分数据集为测试集合训练集合。

第6步:特征缩放

相关知识点链接

难受

总结


步骤

第1步:导入需要的库

这两个是我们每次都需要导入的库,NumPy包含数学计算函数,Pandas用于导入和管理数据集。

import numpy as np
import pandas as pd

第2步:导入数据集

数据集通常是.csv格式。CSV文件以文本形式保存表格数据。文件的每一行是一条数据记录。我们使用Pandas的read_csv方法读取本次csv文件为一个数据帧。然后,从数据帧中制作自变量和因变量的矩阵和向量。

dataset = pd.read_csv('Data.csv')   //读取csv文件
X = dataset.iloc[ : , :-1].values      //.iloc[行,列] -1这里表示倒数第二列
Y = dataset.iloc[ : , 3].values        //:全部行或列;[a]第一行或列;[a,b,c]第a,b,c行或列。

第3步:处理丢失数据

我们得到的数据很少是完整的。数据可能因为各种原因丢失,为了不降低机器学习模型的性能,需要处理数据。我们可以用整列的平均值或中间值替换丢失的数据。我们用sklearn.preprocessing库中的Imputer类完成这项任务。

from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = "NaN", strategy = "mean" , axis = 0)
imputer = imputer.fit(X[ : , 1:3]) #用数据拟合fit X的1 2列
X[ : , 1:3] = imputer.transform(X[ : , 1:3]) #计算缺失数据

第4步:解析分类数据

分类数据指的是含有标签值而不是数字值的变量。取值范围通常是固定的。例如“Yes”和“No”不能用于模型的数学计算,所以需要解析成数字。为实现这一功能,我们从sklearn.preprocesing库导入LabelEncoder类。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# 利用LabelEncoder() 将转换成连续的数值型变量。即是对不连续的数字或者文本进行编号
labellencoder_X = LabelEncoder() #Encode labels with value between 0 and n_classes-1.
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])  #Fit label encoder and return encoded labels
#   print(X[:,0])   [0 2 1 2 1 0 2 0 1 0]
#创建虚拟变量
onehotencoder = OneHotEncoder(categorical_features = [0]) #categotical_features是需要独热编码的列索引
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y) #print(Y) [0 1 0 0 1 1 0 1 0 1]

第5步:拆分数据集为测试集合训练集合。

把数据集拆分成两个:一个是用来训练模型的训练集合,另一个是用来验证模型的测试集合。两者比例一般是80:20。我们导入sklearn.model_selection库中的train_test_split()方法。

from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X, Y , test_size = 0.2, random_state = 0)

第6步:特征缩放

大部分模型算法使用两点间的欧氏距离表示,但此特征在幅度、单位和范围姿态问题上变化很大。在距离计算中,高幅度的特征比低幅度特征权重更大。可用特征标准化或Z值归一化解决。导入sklearn.preprocessing库的StandardScalar类。

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

 

 

 

 

 

相关知识点链接

  • sklearn preprocessing中imputer的说明

https://scikit-learn.org/stable/modules/impute.html#impute

  • onehotencoder介绍

https://blog.csdn.net/accumulate_zhang/article/details/78510571

http://www.cnblogs.com/king-lps/p/7846414.html

https://www.cnblogs.com/zhoukui/p/9159909.html

  • LabelEncoder介绍

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

 

难受

第5步时报错:

No module named 'sklearn.model_selection'
  • anaconda自带的sklearn库版本低,需要更新sklearn库https://blog.csdn.net/jinlong_xu/article/details/72862047 
  • conda list不现实列表,而且输入更新命令又报 PackageNotFoundError
  • https://blog.csdn.net/yaochen2507/article/details/79540195 可以解决conda list之后不显示列表的问题,但是conda update scikit-learn依然报错PackageNotInstalledError: Package is not installed in prefix.
  • 然后就去训练了,然而两天过去了,我换了个电脑,重新下载了anaconda,sklearn自带的版本都1.9够用的。之前那个电脑等拆机的螺丝刀和清灰的东西到了把灰扫扫再试。

总结

  • 导入相关库--->导入数据集--->处理缺失的数据--->将离散的标签值转化为数字标签--->拆分数据集为测试和训练用--->特征缩放
  • from xxx import xxx--->pd.read_csv(xxx.csv)   iloc --->sklearn.preprocessing库中的imputer类--->sklearn.preprocessing库中的LabelEncoder类和OneHotEncoder类--->sklearn.model_selection类中的train_test_split()方法--->sklearn.preprocessing库的StandardScalar类。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值