大数据,机器学习,人工智能每日一事Python大讲堂

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

2018-09-27  本文已影响19人  QuantumCC

数据预处理

前言:

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

Step 2: 导入数据集

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

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

看一眼dataset是啥样子

dataset
   Country   Age   Salary Purchased
0   France  44.0  72000.0        No
1    Spain  27.0  48000.0       Yes
2  Germany  30.0  54000.0       No
3    Spain  38.0  61000.0        No
4  Germany  40.0      NaN       Yes
5   France  35.0  58000.0       Yes
6    Spain   NaN  52000.0        No
7   France  48.0  79000.0       Yes
8  Germany  50.0  83000.0        No
9   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 variable
onehotencoder = 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个步骤,并用相应的库简单轻松的完成了操作,不要觉得无聊,继续下去,会有新收获!

上一篇下一篇

猜你喜欢

热点阅读