python机器学习之数据的预处理(五种方式数据处理案例详解) | 您所在的位置:网站首页 › 数据预处理定义 › python机器学习之数据的预处理(五种方式数据处理案例详解) |
数据的预处理
数据下载地址——>点这里下载 到入文件时可以直接复制地址然后用r" "包裹起来。 例如:data = pd.read_cav(r"C:\work\data.csv") 或者也可以以直接将\换成//也可以导入。 1.归一化在sklearn当中,我们使用preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler有一个重要参数,feature_range,控制我们希望把数据压缩到的范围,默认是[0,1]。 导入库和数据 from sklearn.preprocessing import MinMaxScaler data = [[-1,2],[-0.5,6],[0,10],[1,18]] import pandas as pd pd.DataFrame(data)
使用numpy处理数据归一化 import numpy as np X= np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]]) #归一化 X_nor= (X - X.min(axis=0)) /(X.max(axis=0) - X.min(axis=0)) X_nor
当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布),而这个过程,就叫做数据标准化(Standardization,又称Z-score normalization) 进行数据标准化 scaler = StandardScaler()#实例化 scaler.fit(data) #fit,本质是生成均值和方差 scaler.mean_#查看均值的属性 scaler.var_#查看方差的属性 x_std = scaler.transform(data)#通过接口导出结果 x_std
一步实现标准化 scaler = StandardScaler()#实例化 scaler.fit_transform(data)#一步达成结果
大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏感。在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中StandardScaler往往是最好的选择。 MinMaxScaler在不涉及距离度量、梯度、协方差计算以及数据需要被压缩到特定区间时使用广泛,比如数字图像处理中量化像素强度时,都会使用MinMaxScaler将数据压缩于[0,1]区间之中。 建议先试试看StandardScaler,效果不好换MinMaxScaler。 机器学习和数据挖掘中所使用的数据,永远不可能是完美的。很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因此,数据预处理中非常重要的一项就是处理缺失值。 导入数据 import pandas as pd data = pd.read_csv("../数据/Narrativedata.csv",index_col=0) #将第0列作为索引index_col=0 data.head()#查看数据前五行
填补age列 将数据装成二维 Age = data.loc[:,"Age"].values.reshape(-1,1)#sklearn种特征矩阵必须是二维 Age.shape#查看维度 Age[:20]#查看前二十行
得到结果 imp_mean =imp_mean.fit_transform(Age)#使用ift_trankform一步完成调取结果 imp_median = imp_median.fit_transform(Age) imp_0 = imp_0.fit_transform(Age)查看填充好的数据: imp_mean[1:20,:]#查看用均值填充的前二十行 imp_0[1:20,:]#查看用0填充的前二十行 imp_median[1:20,:]#查看用中位数填充的前二十行
导入数据: import pandas as pd data1 = pd.read_csv("../数据/Narrativedata.csv",index_col=0) data1.head()填补: data1.loc[:,"Age"] = data1.loc[:,"Age"].fillna(data1.loc[:,"Age"].median()) #.fillna 在DataFrame里面直接进行填补删除: data1.dropna(axis=0,inplace=True) #.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列 #参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False在机器学习中,大多数算法,譬如逻辑回归,支持向量机SVM,k近邻算法等都只能够处理数值型数据,不能处理文字,在sklearn当中,除了专用来处理文字的算法,其他算法在fit的时候全部要求输入数组或矩阵,也不能够导入文字型数据(其实手写决策树和普斯贝叶斯可以处理文字,但sklearn中规定必须导入数值型)。然而在现实中,许多标签和特征在数据收集完毕的时候,都不是以数字来表现的。比如说,学历的取值可以是[“小学”,“初中”,“高中”,“大学”],付费方式可能包含[“支付宝”,“现金”,“微信”]等等。在这种情况下,为了让数据适应算法和库,我们必须将数据进行编码,即是说,将文字型数据转换为数值型。 标签专用,能够将分类转换为分类数值导入库 from sklearn.preprocessing import LabelEncoder导入数据 import pandas as pd data2 = pd.read_csv("../数据/Narrativedata.csv",index_col=0) data2.head()
也可以一步到位: le.fit_transform(y) #也可以直接一步到位逆转为原数据 le.inverse_transform(label)#逆转
导入库 from sklearn.preprocessing import OrdinalEncoder获取数据 data3 = data.copy()#复制一份数据 data3.head()
类别OrdinalEncoder可以用来处理有序变量,但对于名义变量,我们只有使用哑变量的方式来处理,才能够尽量 向算法传达最准确的信息: 导入库和数据提取 from sklearn.preprocessing import OneHotEncoder x = data.iloc[:,1:-1]实例化后转换数据,数组展示 OneHotEncoder(categories="auto").fit_transform(x).toarray()#装换成数组,可以显示结果
合并数据 newdata = pd.concat([data,pd.DataFrame(result)],axis=1)#合并数据 newdata.head()
根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量。大于阈值的值映射为1,而小于或等于阈值的值映射为0。默认阈值为0时,特征中所有的正值都映射到1。二值化是对文本计数数据的常见操作,分析人员可以决定仅考虑某种现象的存在与否。它还可以用作考虑布尔随机变量的估计器的预处理步骤(例如,使用贝叶斯设置中的伯努利分布建模)。 将年龄二值化 获取数据 data4 = data.copy()导入库 from sklearn.preprocessing import Binarizer将年龄为30以下的化为0,30以上的化为1 x = data4.iloc[:,0].values.reshape(-1,1) #类为特征专用,所以不能使用一维数组 transformer = Binarizer(threshold=30).fit_transform(x)#将30以上的化为1,30以下的化为0 transformer
preprocessing.KBinsDiscretizer这是将连续型变量划分为分类变量的类,能够将连续型变量排序后按顺序分箱后编码。总共包含三个重要参数: 采用ordinal方式编码 est = KBinsDiscretizer(n_bins=3,encode="ordinal",strategy="uniform") est.fit_transform(x)查看转换后分的箱 set(est.fit_transform(x).ravel()) #查看转换后分的箱:变成了一列种的三箱 #ravel()降维函数采用onehot方式编码分箱 est = KBinsDiscretizer(n_bins=3,encode = "onehot",strategy="uniform") est.fit_transform(x).toarray() #查看转换后分的箱,变成了哑变量 |
CopyRight 2018-2019 实验室设备网 版权所有 |