绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
机器学习一:数据预处理
2019-10-17 13:10:56

机器学习一:数据预处理

近一直在学习机器学习的知识,入门很难。之前跟着吴恩达老师的视频在学习,发现还是有很多的知识点难以理解。前不久,《机器学习A-Z》出了中文翻译,老师讲的非常浅显易懂,所以开始跟着学起来了。

为了能更系统的整理到学的知识进行一个整理,也作为一个自我监督,接下来就把较为系统的知识点都整理到博客上。相应的代码也会同步到github上。

下面所有的代码都是使用Python写的,数据预处理主要用到的是sklearn.preprocessing模块 [sklearn.apachecn.org/cn/0.19.0/m…]

目录

在机器学习一的这部分,我主要说一下数据的预处理。

1.导入标准库

numpy:包含很多机器学习需要用到的数学方法

matplotlib.pyplot:主要用于绘图

pandas:导入数据集以及对数据集进行一系列的处理

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

复制代码

2.导入数据集

iloc数组中参数:逗号左边表示行数,逗号右边表示列数,冒号表示选择所有行或者列

# Import the dataset

dataset = pd.read_csv('Data.csv')

X = dataset.iloc[:,:-1].values

y = dataset.iloc[:,3].values

复制代码

3.缺失数据

一般处理数据缺失的方法包括平均数填充、中位数填充,众数填充。在Imputer类中的strategy的可选参数中可以进行选择。Imputer这个类主要用于缺失数据的处理 参数axis:

axis = 0 取一列的平均值

axis = 1 取一行的平均值

参数strategy: strategy : string, optional (default="mean") The imputation strategy.

If "mean", then replace missing values using the mean along the axis.

If "median", then replace missing values using the median along the axis.

If "most_frequent", then replace missing using the most frequent value along the axis.

# Taking care of missing data

from sklearn.preprocessing import Imputer

imputer = Imputer(missing_values="NaN",strategy="mean",axis=0)

imputer.fit(X[:,1:3]) #代表1和2

X[:,1:3] = imputer.transform(X[:,1:3])

复制代码

4.分类数据

4.1. 标签编码

作用:将文本转换为数字

缺点:在开始的时候不同的国籍并没有数值的区分,将不同的国家转换为数值之后0,1,2之后,对于不同的类就有大小之分,所以对不同的类进行了排序。

解决方案:独热编码(虚拟编码)

4.2. 独热编码(虚拟编码)(dummy coding)

# Encoding categorical data

from sklearn.preprocessing import LabelEncoder,OneHotEncoder

labelencoder_X = LabelEncoder()

X[:, 0] = labelencoder_X.fit_transform(X[:,0])

onehotencoder = OneHotEncoder(categorical_features = [0])

X = onehotencoder.fit_transform(X).toarray()

labelencoder_y = LabelEncoder()

y = labelencoder_y.fit_transform(y)

# Encode labels with value between 0 and n_classes-1(将不同组的名称转换为数字)

复制代码

5.将数据集划分为训练集和测试集

test_size:0到1之间,默认值为0.25 一般情况下比较好的为0.2或者0.25

random_state:决定随机数生成的方式

# splitting dataset into Training set and Test set

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.特征缩放

为什么要对数据进行特征缩放?

欧氏距离(两个点之间线段的长度),在很多机器学习的算法中非常重要。

将不同数量级的数据缩放到同一个数量级,如果不进行特征缩放,年龄在工资的比较下影响就会变得非常小。

为了解决这个问题,我们需要将Age和Salary缩放到同一个数量级里面。

6.1. 标准化(Standardisation)

得到的新的数据平均值为0,并且方差为1 运用在支持向量机、逻辑回归、类神经网络

# Feature Scaling

from sklearn.preprocessing import StandardScaler

sc_X = StandardScaler()

X_train = sc_X.fit_transform(X_train)

X_test = sc_X.transform(X_test)

复制代码

6.2. 归一化(Normalisation)

将所有的值投射到0和1之间

import sklearn.preprocessing as sp

mms = sp.MinMaxScaler(feature_range=(0,1))

mms_samples2 = mms.fit_transform(raw_samples)

复制代码

7.数据预先处理模板

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

# Import the dataset

dataset = pd.read_csv('Data.csv')

X = dataset.iloc[:,:-1].values

y = dataset.iloc[:,3].values

# Taking care of missing data

from sklearn.preprocessing import Imputer

imputer = Imputer(missing_values="NaN",strategy="mean",axis=0)

imputer = Imputer()

test = imputer.fit(X[:,1:3])

X[:,1:3] = imputer.transform(X[:,1:3])

# Encoding categorical data

from sklearn.preprocessing import LabelEncoder,OneHotEncoder

labelencoder_X = LabelEncoder()

X[:, 0] = labelencoder_X.fit_transform(X[:,0])

onehotencoder = OneHotEncoder(categorical_features = [0])

X = onehotencoder.fit_transform(X).toarray()

labelencoder_y = LabelEncoder()

y = labelencoder_y.fit_transform(y)

# Splitting the dataset into the Training set and Test set

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)

# Feature Scaling

from sklearn.preprocessing import StandardScaler

sc_X = StandardScaler()

X_train = sc_X.fit_transform(X_train)

X_test = sc_X.transform(X_test)

复制代码

8.问题

8.1. fit、fit_transform、transform之间的区别?

fit():简单来说,就是求得训练集的均值、方差、大值、小值,也就是训练集X的属性,可以理解为一个训练过程;

Transform():在fit的基础上,进行标准化、降维、归一化等操作;

fit_transform():是fit和transform的组合,既包含训练又包含转换。

注意:

必须先用fit_transform(trainData),之后再用transform(testData);

如果直接使用transform(testData)会报错;

如果fit_transform(trainData)后,使用fit_transform(testData)而不是transform(testData),虽然也能归一化,但是两个结果是不在同一个“标准”下的,具有明显的差异。

8.2. 标准化和归一化的区别以及各自作用的场景?

www.jianshu.com/p/95a8f035c…参考文献:K码农-http://kmanong.top/kmn/qxw/form/home?top_cate=28

分享好友

分享这个小栈给你的朋友们,一起进步吧。

人工智能的世界
创建时间:2020-06-15 14:31:10
人工智能那点事儿
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 栈栈
    专家
戳我,来吐槽~