avatar

机器学习a-z 第一章 数据预处理

第一章:数据预处理

导入标准库

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
  • numpy 包含了很多数学方法,数学工具的库
  • matplotlib.pyplot 绘图库,为了在python里面绘制漂亮的图像
  • pandas 方便导入数据集,对数据集做必要的操作

导入数据集

导入数据集要设置工作路径,包含Data.csv之后

dataset = pd.read_csv('Data.csv')

注意:包含所有自变量的矩阵和包含因变量的向量

这是一般所需要的

X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,3].values

iloc.取数据集中的某一些行,某一些列

,分割,逗号的左边代表的行数,逗号的右边代表列数,:代表所有,-1代表除去最后一列

缺失数据的处理方法

有的时候数据是缺失的,处理的方式

可以发现,缺失了一个年龄和缺失了一个薪水,用nan表示缺失数据

最常见的处理方法就是使用平均值代替

注意:0.2版本的sklearn中Imputer 做了修改

# 导入预处理数据库
# 0.20版本后imputer在sklearn.impute中
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer = imputer.fit(X[:,1:3])
X[:,1:3] = imputer.transform(X[:,1:3])

分类数据

from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

操作之后

名字和是否购买,字符串数字化了

注意:名字0 1 2 有权重,更新为无权重的,用OneHotEncoder编码

enc = OneHotEncoder()
enc.fit(X[:,0].reshape(-1,1))
enc.categories_
result = enc.transform(X[:,0].reshape(-1,1)).toarray()
X = np.column_stack((result,X[:,1:]))
  • 0 - 1 0 0
  • 1 - 0 1 0
  • 2 - 0 0 1

这种是无权重的

处理y,因为y是因变量,python可以自动识别为分类数据,所以不需要onehotcoder这个类
labelencoder_y = LabelEncoder()
继承类
y = labelencoder_y.fit_transform(y)

总结:分类数据

from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

enc = OneHotEncoder()
enc.fit(X[:,0].reshape(-1,1))
enc.categories_
result = enc.transform(X[:,0].reshape(-1,1)).toarray()
X = np.column_stack((result,X[:,1:]))

数据分为训练集和测试集

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)

分类后数据

我们设置了test_size = 0.2 总共有十个数据所以,2:8

特征缩放

什么是特征缩放:特征缩放定义 特征缩放是用来标准化数据特征的范围

为什么特征缩放:训练模型的过程中,经常会用到欧氏距离,如果两组数据不在一个维度,另一个特征基本上可以忽略不计。或者不用欧式距离,但收敛速度会很快。

# 特征缩放  将不同数量级的数据缩放到同一个数量级
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

为啥y不用特征缩放,0 1 代表的是类别,分类

回归问题,y可能也要缩放

数据预处理模板

注意:模板不是全部代码都需要,根据需求

# -*- coding: utf-8 -*-
"""
Created on Sat Mar 28 11:57:41 2020

@author: vccyb
"""

# 导入标准库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd


# 导入数据集
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,3].values


# 导入预处理数据库
# 0.20版本后imputer在sklearn.impute中
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer = imputer.fit(X[:,1:3])
X[:,1:3] = imputer.transform(X[:,1:3])


# 分类 将数据中的字符串无权重编码等
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

enc = OneHotEncoder()
enc.fit(X[:,0].reshape(-1,1))
enc.categories_
result = enc.transform(X[:,0].reshape(-1,1)).toarray()
X = np.column_stack((result,X[:,1:]))

# 将数据分为训练集和测试集
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)

# 特征缩放 将不同数量级的数据缩放到同一个数量级
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

更新

由于后期学习太多的库跟新后,无法使用模板代码,精力十分浪费

所以这里又重新回到anoconda5.0.0版本,避免浪费精力在其他事情上,专注基本的原理

#数据预处理模板

# 导入库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

#导入数据
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,3].values


#处理缺失数据的模板代码,用平均值代替
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])


#处理分类数据的模板代码,虚拟编码
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()
# Encoding the Dependent Variable
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

#训练集和测试集划分模板代码
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)

#特诊缩放模板代码
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

Others

人无完人,何况是小白Chen我呢,文章难免会出现一些错误,若是读者们发现错误,可以评论或者联系我,Chen会尽力改正,给大家更优秀的博文。

文章作者: Chen
文章链接: https://vccyb.gitee.io/myblog/2020/03/28/ML/ML-1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 东川
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论