链接:
https://github.com/Avik-Jain/100-Days-Of-ML-Code
代码均可正常运行,如有问题评论留言,可以一起学习进步。
如信息图所示,我们将数据预处理分解为 6 个基本步骤。
数据集如下所示
//data.csv
Country,Age,Salary,Purchased
France,44,72000,No
Spain,27,48000,Yes
Germany,30,54000,No
Spain,38,61000,No
Germany,40,,Yes
France,35,58000,Yes
Spain,,52000,No
France,48,79000,Yes
Germany,50,83000,No
France,37,67000,Yes
import numpy as np
import pandas as pd
numpy 数据运算 pandas导入和管理数据集
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values
数据集通常是 .csv 格式 。csv文件在空白文本中存储着表格数据。文件的每一行是一个数据记录。使用 pandas中的 read_csv 方法读取本地的一个csv文件作为一个数据框,然后我们将数据框分成独立和非独立变量的矩阵和向量。
我们得到的数据相当的大,由于各种原因数据可能会丢失,我们需要处理他以至他不会降低机器学校模型的表现。我们使用数据整个列的平均数或者中位数来代替丢失的数据。我们使用 sklearn.preprocessing 的 SimpleImputer 类来完成这个任务。
from sklearn.impute import SimpleImputer as Imputer
imputer = Imputer(missing_values = np.nan, strategy = "mean")
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])
分类的数据是包含标签值而不是数值的变量,标签值可能性的数量经常被限制在一个固定的数据集中,在本数据集示例值是 “yes” and “no”, 这个标签值不能在模型的数学等式中使用,所以我们需要将那些变量编码成数字。我们导入 来自 sklearn.preprocessing库的 LabelEncoder 类来实现这一点。
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()
ct = ColumnTransformer([("Country", OneHotEncoder(), [0])], remainder = 'passthrough')
X = ct.fit_transform(X)
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)
我们将数据集拆分两部分,一个用于训练模型被称为训练集,另一个用于测试训练模型的表现,称为测试集。分割通常是8/2.我们导入 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)
按特征完成标准化或者 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)