天天看点

python机器学习监督学习-数据预处理相关解释及操作流程

作者:莫愁4303

数据预处理是机器学习中的重要步骤,它包括对原始数据进行清洗、转换和集成,以便更好地适应机器学习算法的要求。以下是一些常见的数据预处理技术:

  • 数据清洗:处理缺失值、异常值和重复值,确保数据的完整性和准确性。
  • 特征选择:选择对目标变量有显著影响的特征,以降低模型的复杂度和提高性能。
  • 特征缩放:对特征进行缩放,以确保不同特征之间的数值范围一致,常见的方法有标准化和归一化。
  • 特征转换:对特征进行转换,以改善其分布或提取更有意义的信息。常见的方法有多项式转换、对数转换和正态化。
  • 数据集成:将多个数据源的数据进行合并和整合,以便于建模和分析。
  • 数据降维:通过保留最重要的特征或将高维数据映射到低维空间,以减少模型的复杂性和计算成本。

这些数据预处理技术可以提高模型的准确性和稳定性,并加快模型的训练和预测速度。在实际应用中,根据具体的数据集和问题,选择适合的数据预处理方法非常重要。

第1步:导入库

这两个是我们每次都需要导入的库NumPy包含数学计算函数。Pandas用于导入和管理数据集。

import numpy as np
import pandas as pd           

第2步:导入数据集

数据集通常是.csv格式。CSV文件以文本形式保存表格数据。文件的每一行是一条数据记录我们使用Pandas的read_csv方法读取本地csv文件为一个数据帧。然后,从数据帧中制作官变量和因变量的矩阵和向量。

数据集下载地址:

//随后一列是label
dataset = pd.read_csv('Data.csv')//读取csv文件
X = dataset.iloc[ : , :-1].values//.iloc[行,列]
Y = dataset.iloc[ : , 3].values  // : 全部行 or 列;[a]第a行 or 列
                                 // [a,b,c]第 a,b,c 行 or 列           

第3步:处理丢失数据

我们得到的数据很少是完整的。数据可能因头各种原因丢失,为了不降低机器学习模型的性能,需要处理数据。我们可以用整列的平均信或中间值替换丢失的数据。我们用sklearn.pleprocessing库中的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])           

第4步:解析分类数据

分类数据指的是含有标签值而不是数字值的变量。取值范围通常是固定的。例如“Yes”和”No”不能用于模型的数学计算,所以需要解析成数字。为实现这一功能,我们从sklearn.preprocesing库导入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()
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)           

第5步:拆分数据集为训练集合和测试集合

把数据集拆分成两个:一个是用来训练模型的训练集合,另一个是用来验证模型的测试集合两者比例一般是80:20。我们导入sklearn.crossvalidation库中的train_test_split0万法。

#from sklearn.model_selection import 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)           

第6步:特征量化

大部分模型算法使用两点间的欧式距离表示但此特征在幅度、单位和范围姿态问题上变化很大。在距离计算中,高幅度的特征比低幅度特征权重更大。可用特征标准化或Z值归一化解决。导入sklearn.preprocessing库的StandardScalar类。

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

代码:

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

#Step 2: Importing dataset
dataset = pd.read_csv('../datasets/Data.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values
print("Step 2: Importing dataset")
print("X")
print(X)
print("Y")
print(Y)

#Step 3: Handling the missing data
# If you use the newest version of sklearn, use the lines of code commented out
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy="mean")
#from sklearn.preprocessing import Imputer
# axis=0表示按列进行
#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
from sklearn.compose import ColumnTransformer 
#labelencoder_X = LabelEncoder()
#X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
#Creating a dummy variable
#print(X)
ct = ColumnTransformer([("", OneHotEncoder(), [0])], remainder = 'passthrough')
X = ct.fit_transform(X)
#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)