【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
    装这个可能要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个步骤,并用相应的库简单轻松的完成了操作,不要觉得无聊,继续下去,会有新收获!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值