Python中机器学习的数据预处理
添加时间:2020-10-20 16:15:19
来源:
预处理是指在将数据馈送到算法之前应用于我们的数据的转换。
•数据预处理是一种用于将原始数据转换为干净数据集的技术。换句话说,无论何时从不同来源收集数据,数据都以原始格式收集,这对于分析是不可行的。
数据预处理的需求
•为了从机器学习项目中的应用模型中获得更好的结果,数据的格式必须正确。某些指定的机器学习模型需要使用指定格式的信息,例如,随机森林算法不支持空值,因此要执行随机森林算法,必须从原始原始数据集中管理空值。
•另一个方面是,数据集的格式应确保在一个数据集中执行多个机器学习和深度学习算法,并从中选择最好的算法。
本文包含3种用于机器学习的不同数据预处理技术。
每种技术都使用Pima印度糖尿病数据集。
这是一个二进制分类问题,其中所有属性都是数字并且具有不同的比例。
这是可以从预处理中受益的数据集的一个很好的例子。
您可以在UCI机器学习存储库网页上找到此数据集。
请注意,该程序可能无法在Geeksforgeeks IDE上运行,但可以在您本地的python解释器上轻松运行,前提是您已安装了所需的库。
1.
重新缩放数据•当我们的数据由具有不同比例的属性组成时,许多机器学习算法都可以从将属性重新缩放为所有具有相同比例的数据中受益。
•这对于在机器学习算法(例如梯度下降)的核心中使用的优化算法很有用。
•对于加权输入(例如回归和神经网络)的算法以及使用距离度量(例如K最近邻)的算法也很有用。
•我们可以使用MinMaxScaler类使用scikit-learn重新缩放您的数据。
filter_none
编辑
play_arrow
亮度_4
# Python code to Rescale data (between 0 and 1)
import pandas
import scipy
import numpy
from sklearn.preprocessing import MinMaxScaler
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
# separate array into input and output components
X = array[:,0:8]
Y = array[:,8]
scaler = MinMaxScaler(feature_range=(0, 1))
rescaledX = scaler.fit_transform(X)
# summarize transformed data
numpy.set_printoptions(precision=3)
print(rescaledX[0:5,:])
重新缩放后,请注意所有值都在0到1之间。
输出量
[[0.353 0.744 0.59 0.354 0.0 0.501 0.234 0.483]
[0.059 0.427 0.541 0.293 0.0 0.396 0.117 0.167]
[0.471 0.92 0.525 0. 0.0 0.347 0.254 0.183]
[0.059 0.447 0.541 0.232 0.111 0.419 0.038 0.0]
[0.0 0.688 0.328 0.354 0.199 0.642 0.944 0.2]]
2.二进制化数据(二进制)
•我们可以使用二进制阈值转换数据。所有高于阈值的值都标记为1,所有等于或低于阈值的值都标记为0。
•这称为对数据进行二进制化或对数据进行阈值处理。当您有可能要做出明晰的值的概率时,此功能很有用。当进行要素工程并且您想添加表示有意义的新要素时,该功能也很有用。
•我们可以使用带有Binarizer类的scikit-learn在Python中创建新的二进制属性。
filter_none
编辑
play_arrow
亮度_4
# Python code for binarization
from sklearn.preprocessing import Binarizer
import pandas
import numpy
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
# separate array into input and output components
X = array[:,0:8]
Y = array[:,8]
binarizer = Binarizer(threshold=0.0).fit(X)
binaryX = binarizer.transform(X)
# summarize transformed data
numpy.set_printoptions(precision=3)
print(binaryX[0:5,:])
我们可以看到所有等于或小于0的值都标记为0,所有大于0的值都标记为1。
输出量
[[1. 1. 1. 1. 1. 0. 1. 1. 1.]
[1. 1. 1. 1. 0. 1. 1. 1.]
[1. 1. 1. 0. 0. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1.]
[0. 1. 1. 1. 1. 1. 1. 1. 1.]]
3.标准化数据
•标准化是一种有用的技术,可将具有高斯分布,均值和标准差不同的属性转换为平均值为0和标准差为1的标准高斯分布。
•我们可以使用scikit-learn对数据进行标准化该StandardScaler类。
filter_none
编辑
play_arrow
亮度_4
# Python code to Standardize data (0 mean, 1 stdev)
from sklearn.preprocessing import StandardScaler
import pandas
import numpy
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
# separate array into input and output components
X = array[:,0:8]
Y = array[:,8]
scaler = StandardScaler().fit(X)
rescaledX = scaler.transform(X)
# summarize transformed data
numpy.set_printoptions(precision=3)
print(rescaledX[0:5,:])
现在,每个属性的值的平均值为0,标准差为1。
输出量
[[0.64 0.848 0.15 0.907 -0.693 0.204 0.468 1.426]
[-0.845 -1.123 -0.161 0.531 -0.693 -0.684 -0.365 -0.191]
[1.234 1.944 -0.264 -1.288 -0.693 -1.103 0.604 -0.106]
[-0.845 -0.998 -0.161 0.155 0.123 -0.494 -0.921 -1.042]
[-1.142 0.504 -1.505 0.907 0.766 1.41 5.485 -0.02]]
/ CONTACT US
地 址:四川省成都市航空路丰德国际广场
邮政编码:610000
电 话:18215660330
传 真:18215660330
手机:18215660330
邮 箱:179001057@qq.com
投诉邮 箱:179001057@qq.com