第一章:数据预处理
导入标准库
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 做了修改
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可能也要缩放
数据预处理模板
注意:模板不是全部代码都需要,根据需求
""" 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
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()
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会尽力改正,给大家更优秀的博文。