如何查看网站ftp地址,无锡品牌学会网站建设,贵阳网站推广¥做下拉去118cr,网上如何建网站卖量具【说明】文章内容来自《机器学习入门——基于sklearn》#xff0c;用于学习记录。若有争议联系删除。 特征预处理就是对数据进行集成、转换、规约等一系列处理#xff0c;使之适合算法模型的过程。 sklearn提供了preprocessing模块#xff0c;用于归一化、标准化、鲁棒化、…【说明】文章内容来自《机器学习入门——基于sklearn》用于学习记录。若有争议联系删除。 特征预处理就是对数据进行集成、转换、规约等一系列处理使之适合算法模型的过程。 sklearn提供了preprocessing模块用于归一化、标准化、鲁棒化、正则化等数据预处理。
preprocessing模块常用方法 方法名方法含义preprocessing.MinMaxScaler归一化preprocessing.StandardScaler标准化preprocessing.RobustScaler鲁棒化preprocessing.normalize正则化
1、归一化 归一化又称区间缩放法采用归一化将不同规格的数据转换到同一规格。归一化利用边界值信息将特征的取值区间缩放到某个特点的范围如[0,1]等。
归一化计算公式 【参数说明】
max最大值min最小值mx, mi用于指定区间默认mx为1mi为0. 归一化将原始数据通过线性变换缩放到[0,1]。由于异常值往往是最大值或最小值所以归一化的鲁棒性较差。
sklearn提供了MinMaxScaler方法进行归一化具体语法如下
MinMaxScaler(feature_range (0,1))#feature_range (0,1)将范围设置为0~1。
1.1 归一化示例
from sklearn.preprocessing import MinMaxScaler
def Normalization():Normalization MinMaxScaler(feature_range (0,1))data [[90,2,10,40],[60,4,15,45],[75,3,13,46]]print(data)#调用fit_transform#意思是找出data的均值和标准差并应用在data上data_Normal Normalization.fit_transform(data)print(data_Normal)return None
if __name__ __main__:Normalization()
#############直接调用
# from sklearn import preprocessing
# data1 [[90,2,10,40],[60,4,15,45],[75,3,13,46]]
# min_max_scaler preprocessing.MinMaxScaler()
# data1_minmax min_max_scaler.fit_transform(data1)
# print(data1_minmax)
2、标准化 标准化用于解决归一化容易收到样本中最大值或者最小值等异常值的影响问题将数据按比例缩放到特定区间。
标准差公式 z-score标准化转换公式 参数说明
平均值 标准化的前提是特征俯冲正态分布。进行标准化后数据聚集在0附近方差为1有利于模型的训练。
sklearn提供了StandardScaler方法实现标准化具体语法
StandardScaler(copy, with_mean)
【参数说明】
copy取值为True或False。在用归一化的值代替原来的值时设置为False。
with_mean取值为True或False。在处理稀疏矩阵时设置为False。
标准化示例
from sklearn.preprocessing import StandardScaler
def Standardization():std StandardScaler()data [[1.,-1.,3.],[2.,4.,2.],[4.,6.,-1.]]print(data)data_Standard std.fit_transform(data)print(data_Standard)return None
if __name__ __main__:Standardization()
3、鲁棒化 当数据包含许多异常值使用平均值和方差缩放均不能取得较好效果可以使用鲁棒性缩放方法处理。 preprossing的RobustScaler使用中位数和四分位数进行数据转换直接将异常值剔除具体语法
RobustScaler(quantile_range,with_centerring,with_scaling)with_centering:布尔值默认为True表示在缩放之前将数据居中with_scaling:布尔值默认为True表示将数据缩放发哦四分位数范围quantile_range:元组默认值为25.0,75.0即IQR(四分位间距表示用于计算scale的分位数范围
鲁棒化示例
from sklearn.preprocessing import RobustScaler
X [[1.,-2., 2.],[-2., 1., 3.],[4., 1., -2.]]
transformer RobustScaler().fit(X)
RobustScaler(quantile_range (25.0, 75.0),with_centering True, with_scaling True)
print(transformer.transform(X))
4、正则化 正则化是将每个样本缩放到单位范式使数据分布在一个半径为1的圆或者球内。 preprocessing模块提供了normalize方法实现正则化语法 normalize(X,norm l2)
【参数说明】
X样本数据
l2: L2范数
示例
from sklearn.preprocessing import normalize
X [[1., -1., 2.],[2., 0., 0.],[0., 1., -1.]]
X_normalized normalize(X,norml2)
print(X_normalized)
5、案例
【说明】需要自己创建一个dummy.xls文件。内容如下 import pandas as pd
import numpy as np
from collections import Counter #引入计数器
from sklearn import preprocessing
from matplotlib import pyplot as plt
import seaborn as sns #seaborn绘图库
plt.rcParams[font.sans-serif] [SimHei]#中文字体设置为黑体
plt.rcParams[axes.unicode_minus] False#解决保存图像时负号显示为方块的问题
sns.set(font SimHei) #解决seaborn中文显示问题
data pd.read_excel(e:/dummy.xls) #在e盘根目录下创建dummy.xls文件
print(data)
#显示序列的前n 行默认值
print(data head:\n,data.head())
#查看数据的行列大小
print(data.shape:\n,data.shape)
#显示制定列的数据描述属性值
print(data.describe:\n,data.describe())
#进行列级别的判断只要某一列有NaN或值为空则为真
print(data.isnull().any())
#将列中为NaN或值为空的个数统计出来并将缺失值最多的排在前面
total data.isnull().sum().sort_values(ascending False)
print(total:\n,total)#输出百分比
# .isnull()查找缺失值sort_values(ascending False)是否按指定列的数组进行排序
percent (data.isnull().sum()/data.isnull().count()).sort_values(ascending False)
#pd.concat()函数可以沿着指定的轴将多个dataframe或者series拼接到一起。axis 左右拼接
missing_data pd.concat([total,percent],axis 1, keys [Total,Percent])
missing_data.head(20)#导入missingno并删除缺失值
# import missingno
# missingno.matrix(data)
data data.dropna(thresh data.shape[0] * 0.5, axis 1)
#将至少有一半以上是非空的列筛选出来
#如果某一行都是NaN才删除默认只保留没有空值的行
data1 data.dropna(axis 0,how any)
print(data1)#统计重复记录数
data.duplicated().sum()
data.drop_duplicates()
data.columns
id_col [姓名]
cat_col [学历,学校]
cont_col [成绩,能力]
print(data[cat_col])
print(data[cont_col])#计算出现的频次
for i in cat_col:print(pd.Series(data1[i]).value_counts())plt.plot(data1[i])
dummies pd.get_dummies(data1[cat_col])#转换为哑变量可以增加数据特征
print(哑变量:\n,dummies)from sklearn import preprocessing
#对连续型数据进行统计
data1[cont_col].describe()
#对连续型数据将偏度大于0.75的数值用取对数的方法进行转换使之符合正态分布
skewed_feats data[cont_col].apply(lambda x: (x.dropna()).skew())
skewed_feats skewed_feats[skewed_feats 0.75]
skewed_feats skewed_feats.index
data[skewed_feats] np.log1p(data[skewed_feats])
print(skewed_feats)
#对连续数据进行标准化
scaled preprocessing.scale(data[cont_col])
scaled pd.DataFrame(scaled,columns cont_col)
print(scaled)
m dummies.join(scaled)
data_cleaned data[id_col].join(m)
print(标准化\n,data_cleaned)#变量之间的相关性
print(变量之间的相关性:\n,data_cleaned.corr())
#绘制热力图
def corr_heat(df):dfData abs(df.corr())plt.subplots(figsize (9,9))sns.heatmap(dfData, annot True, vmax 1, square True, cmap Blues)plt.show()
corr_heat(data_cleaned)