数据预处理是机器学习中的重要步骤,它包括对原始数据进行清洗、转换和集成,以便更好地适应机器学习算法的要求。以下是一些常见的数据预处理技术:
- 数据清洗:处理缺失值、异常值和重复值,确保数据的完整性和准确性。
- 特征选择:选择对目标变量有显著影响的特征,以降低模型的复杂度和提高性能。
- 特征缩放:对特征进行缩放,以确保不同特征之间的数值范围一致,常见的方法有标准化和归一化。
- 特征转换:对特征进行转换,以改善其分布或提取更有意义的信息。常见的方法有多项式转换、对数转换和正态化。
- 数据集成:将多个数据源的数据进行合并和整合,以便于建模和分析。
- 数据降维:通过保留最重要的特征或将高维数据映射到低维空间,以减少模型的复杂性和计算成本。
这些数据预处理技术可以提高模型的准确性和稳定性,并加快模型的训练和预测速度。在实际应用中,根据具体的数据集和问题,选择适合的数据预处理方法非常重要。
第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)