机器学习100天(Day1)

机器学习100天(Day1)

前言

  17年硕士毕业,读研期间一直从事传统图像处理算法方向,工作后深感传统算法的局限性,从而有了学习深度学习的想法。说起惭愧,16年实习期间第一次听说深度学习,但是并没有太过在意。后来眼看深度学习的发展速度,想着手深度学习方面的学习,但是无从下手,最近听说国外网红程序员Avik Jain的机器学习100天项目,神奇之余又激起了我想学习下的欲望。希望通过写Blog的方式能够激励自己坚持下去,错误的地方也希望看到的朋友能够指出,希望能够共同进步。

说起作为一个程序员也是很惭愧,不熟悉linux系统,所以暂时打算从Windows下开始学习。

使用软件:

  • Anaconda(强大的开源的包、环境管理器,不需要再次配置numpy等库环境)

开始学习第一天

第一天的学习是数据的预处理,看上去很简单,只有23行代码,但是基础知识匮乏的我,查阅了一个多小时资料才了解个大概。

废话不多说,开始上第一天的学习内容:
机器学习100天(Day1)

1. 导入数据库

import numpy as np
import pandas as pd

首先,需要导入用到的两个库。

  • numpy库:用于存储和处理大型矩阵的数值计算扩展;
  • pandas库:解决数据分析任务的数据分析包;

两个库具体的东西就不多说了,网上有很多大神对其讲解都很详细。

2. 导入数据集

dataset = pd.read_csv('Data.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values

使用pandas库中的read_csv导入要处理的数据。

这里的X、Y分别为获取数据集的样本和类标。其中[ : , :-1]表示选取矩阵中第1行到倒数第二行的所有数据,[ : ,3]选取矩阵中第四行的所有数据。

在这里就要说一下有意思的事情,我的数据并没有放到文件所在的文件夹,所以输入的绝对路径,是这样写的:

dataset = pd.read_csv("E:/代码/学习/100-Days-Of-ML-Code-master/100-Days-Of-ML-Code-master/datasets/Data.csv")

但是一直提示报错,后来经过查阅资料发现,pd.read_csv不支持中文路径,可以通过打开数据后,在用pd.read_csv读取

f= open("E:/代码/学习/100-Days-Of-ML-Code-master/100-Days-Of-ML-Code-master/datasets/Data.csv")
dataset = pd.read_csv(f)

3. 处理丢失数据

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])

这里要用到sklearn库来对数据进行补齐。

具体的含义就不详说了,主要来说说丢失数据的方式

处理不完备数据集的方法主要有以下三大类:

  • 删除元组
  • 数据补齐
  • 不处理

我们一般使用数据补齐的方式对丢失数据进行处理,在这里使用的是均值替代法,用特征列的均值替换。

4. 解析分类数据

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)

这里用到了sklearn库中的类标编码功能。

LabelEncoder是用来对分类型特征值进行编码,即对不连续的数值或文本进行编码。

OneHotEncoder(独热编码)是将每一个分类特征变量的m个可能的取值转变成m个二值特征,对于每一条数据这m个值中仅有一个特征值为1,其他的都为0。独热编码用来解决类别型数据的离散值问题,将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。 有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。 Tree Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度。

5. 拆分数据集为测试集合和训练集合

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)

如标题,这个步骤是将数据集分为测试集和训练集,测试集和训练集的比为1:4。

6. 特征缩放

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

调用sklearn的StandardScaler进行去均值和方差归一化。

希望在今后的日子里能够彻底的积雪学习下去,望能够关注到的朋友们鞭策。

详细参考# 机器学习100天(Day1)