《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)

100-Days-Of-ML-Code
中文版《机器学习100天》
GitHub :https://github.com/MLEveryday/100-Days-Of-ML-Code

导入第三方库可参考 https://jingyan.baidu.com/article/48b37f8dc107441a6564887e.html

自行生成了所用到的数据——Data.csv(注意数据之间需要以逗号分隔)
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)
补加:后来在百度上搜索了下,发现了GitHub上下载单个文件的方法,可参考https://blog.csdn.net/smallcaff/article/details/79623174(悲催的我当时一个逗号一个逗号地改的……)

数据预处理主要包括六个部分:
1、导入库

import numpy as np
import pandas as pd

2、导入数据集
使用Pandas的read_csv方法读取本地csv文件为一个数据帧(DataFrame),然后从数据帧中制作自变量和因变量的矩阵和向量。

dataset = pd.read_csv('D:\PycharmProjects\DataSet\Data4.csv')   #读取csv文件
X = dataset.iloc[ : , :-1].values   #.iloc[行,列],前面的:表示提取所有行,后面的为切片,提取到倒数第二列
Y = dataset.iloc[ : , 3].values     # : 全部行 or 列;[a]第a行 or 列

结果如下:(缺失的数据用nan表示)
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)
3、处理丢失数据
用整列的平均值替换丢失的数据
用sklearn.preprocessing库中的Imputer类来完成

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

结果如下:
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)
4、解析分类数据
分类数据指的是含有标签值而不是数字值的变量
用sklearn.preprocessing库中的LabelEncoder类来完成
简单来说,LabelEncoder是对不连续的数字或文本进行编号;OneHotEncoder用于将表示分类的数据扩维。

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])	#将索引为0的属性转化为 onehot类型
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)

结果如下:
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)
5、拆分数据集为训练集合和测试集合
将数据按照80:20的比列拆分为训练集合和测试集合

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)

结果如下:
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)
6、特征量化
将数据进行标准化或归一化
标准化数据通过减去均值然后除以方差(或标准差),这种数据标准化方法经过处理后数据符合标准正态分布,即均值为0,标准差为1,转化函数为:
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)

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

结果如下:
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)
总结:
One-Hot编码,又称为一位有效编码,主要是采用位状态寄存器来对个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
对于OneHot编码的学习可参考https://blog.csdn.net/google19890102/article/details/44039761

完整代码如下:

#Day 1: Data Prepocessing

#Step 1: Importing the libraries 导入库
import numpy as np
import pandas as pd

#Step 2: Importing dataset 导入数据集
dataset = pd.read_csv('D:\PycharmProjects\DataSet\Data4.csv')   #读取csv文件
X = dataset.iloc[ : , :-1].values   #.iloc[行,列],前面的:表示提取所有行,后面的为切片,提取到倒数第二列
Y = dataset.iloc[ : , 3].values     # : 全部行 or 列;[a]第a行 or 列
print("Step 2: Importing dataset")
print("X")
print(X)
print("Y")
print(Y)

#Step 3: Handling the missing data  #处理丢失数据
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])
print("---------------------")
print("Step 3: Handling the missing data")
print("step2")
print("X")
print(X)

#Step 4: Encoding categorical data  解析分类数据
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)
print("---------------------")
print("Step 4: Encoding categorical data")
print("X")
print(X)
print("Y")
print(Y)

#Step 5: Splitting the datasets into training sets and Test sets    拆分数据集为训练集合和测试集合
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)
print("---------------------")
print("Step 5: Splitting the datasets into training sets and Test sets")
print("X_train")
print(X_train)
print("X_test")
print(X_test)
print("Y_train")
print(Y_train)
print("Y_test")
print(Y_test)

#Step 6: 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)
print("---------------------")
print("Step 6: Feature Scaling")
print("X_train")
print(X_train)
print("X_test")
print(X_test)

数据预处理流程:
《机器学习100天》学习笔记——Day 1_Data_Preprocessing(数据预处理)