手记

【1%】100小时机器学习——数据预处理

数据预处理

前言:

  • What's This:我自己的学习笔记,如果你不想看GitHub,这里搬运的应该也很全面。

  • 为什么要学机器学习:很厉害,应用广,缺口大,解放人力,提升自己

  • 课程来源:YouTube上的大咖Siraj Raval就发起了一个挑战:#100DaysOfMLCode。

  • GitHUb地址:中文版本点这里   ——   Here For English Edition

  • 学习计划: 不强求每天都来,佛性随性,每天课程量不大,所以我把100天改成了100小时,所以只要坚持同等与两周工作量的时间里,就能完成本课程。学到就是收获。

  • 基础要求: Python的使用

Start

Day 1.jpg

Step 0:  环境

Mine——Windows10x64, Python2.7, Hyper(推荐,比原生的命令窗口好看一点。在人工智能飞速发展的当下,培养艺术审美能力是赢得未来的重要技能)

Step 1: 导入必要的库

NumPy——用于实现大量的数学计算
Pandas——用于操作数据集
So easy, 直接Python pip安装。
pip install Numpy
pip install Pandas
后边数据预处理还会用到 sklearn库
pip install sklearn
然后sklearn又依赖scipy
pip install scipy
还有一个必备的
pip install matplotlib
整理如下,可以直接复制粘贴进行安装相关依赖库

pip install Numpy Pandas scipy sklearn matplotlib

装这个可能要15分钟左右,可以去上个厕所,弹弹吉他,打会儿太极拳,或者找女朋友聊会儿天。下边的内容等装好了边看边动手做。

Step 2: 导入数据集

Data sets一般以.csv格式存储,内容为纯文本样式的表格,每行代表了一条数据record.这里使用 pandas的 read_csv 方法读取本地的csv文件作为数据帧, 然后从数据帧中制作自变量和因变量的矩阵(Matrix)和向量(Vector)。
Data sets右键另存为下载

import numpy as npimport pandas as pd
data = r'your/path/to/store/Data.csv'dataset = pd.read_csv(data)

看一眼dataset是啥样子

dataset
   Country   Age   Salary Purchased0   France  44.0  72000.0        No1    Spain  27.0  48000.0       Yes2  Germany  30.0  54000.0       No3    Spain  38.0  61000.0        No4  Germany  40.0      NaN       Yes5   France  35.0  58000.0       Yes6    Spain   NaN  52000.0        No7   France  48.0  79000.0       Yes8  Germany  50.0  83000.0        No9   France  37.0  67000.0       Yes

继续操作
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values
这里可以理解为类似Python序列的分片操作,得到自己想要的数据组合
看一下我们的X,Y:

>>> X
array([['France', 44.0, 72000.0],
       ['Spain', 27.0, 48000.0],
       ['Germany', 30.0, 54000.0],
       ['Spain', 38.0, 61000.0],
       ['Germany', 40.0, nan],
       ['France', 35.0, 58000.0],
       ['Spain', nan, 52000.0],
       ['France', 48.0, 79000.0],
       ['Germany', 50.0, 83000.0],
       ['France', 37.0, 67000.0]], dtype=object)>>> Y
array(['No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes'],
      dtype=object)

Step 3: 处理丢失的数据

对于数据的完整性来说,我国伟大的文学家苏轼早就有了“此事古难全”的重要论断。因此为了不影响机器学习模型的性能,我们用同类数据的均值或中间值来替代。此处用到sklearn.preprocessing库中的Impputer类来完成相关操作。

from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])

简单解释一下代码,导入就不用说了,
第一句是初始化了一个imputer类,传入的参数分别为missing_values,设置为NaN,替换策略strategy为mean,即用均值替代丢失值,axis设置为0。
第二句用新建的imputer类来fit一下X。
第三句完成缺失数据的替代。
Step2得到的X变成了如下内容:

>>> X
array([['France', 44.0, 72000.0],
       ['Spain', 27.0, 48000.0],
       ['Germany', 30.0, 54000.0],
       ['Spain', 38.0, 61000.0],
       ['Germany', 40.0, 63777.77777777778],
       ['France', 35.0, 58000.0],
       ['Spain', 38.77777777777778, 52000.0],
       ['France', 48.0, 79000.0],
       ['Germany', 50.0, 83000.0],
       ['France', 37.0, 67000.0]], dtype=object)

Step 4: 编码分类数据

分类数据(Categorical Data)指的是非数字类型的变量,通常以标签值的形式出现,例如本例中的‘Yes’和‘No’,对于模型的数学计算,需要把它们编码成数字。这里用到的是sklearn.preprocessing库中的LabelEncoder类。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])##Creating a dummy variableonehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)

经过转化,X和Y的变化如下:

>>> X
array([[0L, 44.0, 72000.0],
       [2L, 27.0, 48000.0],
       [1L, 30.0, 54000.0],
       [2L, 38.0, 61000.0],
       [1L, 40.0, 63777.77777777778],
       [0L, 35.0, 58000.0],
       [2L, 38.77777777777778, 52000.0],
       [0L, 48.0, 79000.0],
       [1L, 50.0, 83000.0],
       [0L, 37.0, 67000.0]], dtype=object)>>> X
array([[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.40000000e+01, 7.20000000e+04],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 2.70000000e+01, 4.80000000e+04],
       [0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 3.00000000e+01, 5.40000000e+04],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.80000000e+01, 6.10000000e+04],
       [0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 4.00000000e+01, 6.37777778e+04],
       [1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.50000000e+01, 5.80000000e+04],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.87777778e+01, 5.20000000e+04],
       [1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.80000000e+01, 7.90000000e+04],
       [0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 5.00000000e+01, 8.30000000e+04],
       [1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.70000000e+01, 6.70000000e+04]])>>> Y
array([0, 1, 0, 0, 1, 1, 0, 1, 0, 1], dtype=int64)

Step 5: 将数据集分为测试集和训练集

我们通常把数据集按照“二八原则”分为训练集(training set)和测试集(test set),前者用于训练模型,占80%;后者用于测试验证模型,占20%。这里用sklearn.crossvalidation库中的train_test_split()方法。

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

Step 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.fit_transform(X_test)

总结

To Be Honest, 第一天主要就是个入门和环境搭建的上手,用Python作为工具,简述了进行机器学习的前6个步骤,并用相应的库简单轻松的完成了操作,不要觉得无聊,继续下去,会有新收获!



作者:JustMe23
链接:https://www.jianshu.com/p/f1b3c6076deb


0人推荐
随时随地看视频
慕课网APP