机器学习算法中为什么要进行数据预处理。答案很简单,数据预处理能让机器学习算法学得更好、更快、更准。
举个通俗的比喻:数据预处理就像是机器学习模型的“备菜”环节。它不直接“炒菜”(训练模型),但它决定了食材(数据)的质量、状态和可用性。 没有它,再高级的算法也难为“脏数据”之炊。就像不做备菜(数据预处理),再好的厨师也很难用一堆混乱、状态不对的食材快速做出美味佳肴一样。
今天和伙伴们一起系统的学习下数据预处理的方法,同通俗易懂的方式加深理解,帮助大家更高效的开展算法研究与应用工作。
目录
一、是否进行数据预处理的效果对比
数据预处理的效果真的像上面说的那样吗?开始我们先用python给个简单的有无数据预处理的对比。
程序中使用MLP 神经网络对酒的数据集进行分类测试。数据预处理过程中用MinMaxScaler进行数据预处理。具体代码如下,有详细的注释。运行效果在代码的下面。
从运行效果看,未进行数据预处理模型得分0.29;数据预处理后的模型得分:1.00。效果对比是不是很显著啊。
#导人红酒数据集
from sklearn.datasets import load_wine
#导入MLP神经网络
from sklearn.neural_network import MLPClassifier
#导人数据集拆分工具
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
#建立训练集和测试集
wine = load_wine ()
X_train , X_test , y_train , y_test = train_test_split(wine . data , wine . target ,
random_state=62)
#打印数据形态
print(X_train.shape , X_test.shape)
#设定MLP神经网络的参数
mlp = MLPClassifier(hidden_layer_sizes=[10, 10] , max_iter=400 ,random_state=62 ) #设定MLP 的隐藏层为2个, 每层有10个节点,最大迭代数为400并且指定了random state 的数值为62
#没有进行数据预处理
#使用MLP拟合数据
mlp . fit (X_train , y_train)
#打印模型得分
print ('未进行数据预处理模型得分{:.2f}'.format(mlp.score(X_test , y_test)))
#使用MinMaxScaler进行数据预处理
scaler = MinMaxScaler()
scaler.fit (X_train )
X_train_pp = scaler.transform (X_train )
X_test_pp = scaler.transform (X_test)
#重新训练模型
mlp.fit(X_train_pp , y_train)
#打印模型分数
print('数据预处理后的模型得分:{:.2f}'.format(mlp.score(X_test_pp , y_test)))
二、常用数据预处理方法及对比
StandardScaler、MinMaxScaler、RobustScaler、Normalizer是四种常用预处理方法,他们都在sklearn库里面,使用的时候确保安装该库文件。下面我们用通俗的方法分别介绍下四种方法,并给出应用对比建议。
1.StandardScaler: