新乡哪有网站建设公司,哪些网站做的最有特色,一天能免费看3次的app,做网站怎么认证微博文章目录 数据处理步骤观察数据数据无量纲化缺失值处理处理分类型特征处理连续型特征 数据处理步骤
数据无量纲化缺失值处理处理分类型特征#xff1a;编码与哑变量处理连续型特征#xff1a;二值化与分段 观察数据
通过pandas读取数据#xff0c;通过head和info方法大致查… 文章目录 数据处理步骤观察数据数据无量纲化缺失值处理处理分类型特征处理连续型特征 数据处理步骤
数据无量纲化缺失值处理处理分类型特征编码与哑变量处理连续型特征二值化与分段 观察数据
通过pandas读取数据通过head和info方法大致查看一下数据 结论
暂时无需进行无量纲化处Age 和Embarked需要进行缺失值处理处理分类型特征SexEmbarkedSurvived这几个特征的数据只有几类可以转换为数值型变量。处理连续型特征Age连续型可以进行段处理成几类。 数据无量纲化 在机器学习算法实践中我们往往有着将不同规格的数据转换到同一规格或不同分布的数据转换到某个特定分布的需求这种需求统称为将数据“无量纲化”。 无量纲化后可以加快求解速度。 数据的无量纲化可以是线性的也可以是非线性的。 线性的无量纲化包括中心化Zero-centered或者Meansubtraction处理和缩放处理Scale。中心化的本质是让所有记录减去一个固定值即让数据样本数据平移到某个位置。缩放的本质是通过除以一个固定值将数据固定在某个范围之中取对数也算是一种缩放处理。 由于上述无需该处理这个进行构造数据进行操作
归一化
当数据(x)按照最小值中心化后再按极差最大值 - 最小值缩放数据移动了最小值个单位并且会被收敛到[0,1]之间而这个过程就叫做数据归一化(Normalization又称Min-Max Scaling)。 x ∗ x i − m i n ( x ) m a x ( x ) − m a x ( x ) x^*\frac{ x_i-min(x)}{max(x)-max(x) } x∗max(x)−max(x)xi−min(x)
preprocessing.MinMaxScaler 1 构造数据
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
data [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
pd.DataFrame(data)2归一化
scaler MinMaxScaler() #实例化
result_ scaler.fit_transform(data) #训练和导出结果一步达成
result_可以逆转把归一化的数据变回原来数据
scaler.inverse_transform(result) #将归一化后的结果逆转MinMaxScaler类有一个很重要的参数feature_range默认是元组(0,1)把数据压缩到的范围。
#使用MinMaxScaler的参数feature_range实现将数据归一化到[0,1]以外的范围中
data [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler MinMaxScaler(feature_range(5,10)) #依然实例化
result scaler.fit_transform(data) #fit_transform一步导出结果
result当X中的特征数量非常多的时候fit会报错并表示数据量太大了我计算不了此时使用partial_fit作为训练接口scaler scaler.partial_fit(data)
数据标准化
当数据(x)按均值(μ)中心化后再按标准差(σ)缩放数据就会服从为均值为0方差为1的正态分布即标准正态分布而这个过程就叫做数据标准化(Standardization又称Z-score normalization)公式如下 x ∗ x − μ σ x^*\frac{ x-μ}{σ} x∗σx−μ
preprocessing.StandardScaler
from sklearn.preprocessing import StandardScaler
data [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler StandardScaler() #实例化
x_std scaler.fit_transform(data) 一样可以逆转
scaler.inverse_transform(x_std)总结 对于StandardScaler和MinMaxScaler来说空值NaN会被当做是缺失值在fit的时候忽略在transform的时候保持缺失NaN的状态显示。并且尽管去量纲化过程不是具体的算法但在fit接口中依然只允许导入至少二维数组一维数组导入会报错。
大多数机器学习算法中会选择StandardScaler来进行特征缩放因为MinMaxScaler对异常值非常敏感。在PCA聚类逻辑回归支持向量机神经网络这些算法中StandardScaler往往是最好的选择。 缺失值处理
sklearn库中处理缺失值的类是SimpleImputer这个类的相关参数
参数含义输入missing_values告诉SimpleImputer数据中的缺失值长什么样默认空值np.nanstrategy我们填补缺失值的策略默认均值。输入“mean”使用均值填补仅对数值型特征可用输入“median用中值填补仅对数值型特征可用输入most_frequent”用众数填补对数值型和字符型特征都可用输入“constant表示请参考参数“fill_value中的值对数值型和字符型特征都可用fill_value当参数startegy为”constant的时候可用可输入字符串或数字表示要填充的值常用0copy默认为True将创建特征矩阵的副本反之则会将缺失值填补到原本的特征矩阵中去。 Age 和Embarked需要进行缺失值处理
1Age
Age data.loc[:,Age].values.reshape(-1,1) #sklearn当中特征矩阵必须是二维reshape方法将其由一维处理到二维sklearn对特征的处理必须二维不然会报错。
from sklearn.impute import SimpleImputer
imp_mean SimpleImputer() #实例化默认均值填补
imp_median SimpleImputer(strategymedian) #用中位数填补
imp_0 SimpleImputer(strategyconstant,fill_value0) #用0填补实例化3种方式填充。
imp_mean imp_mean.fit_transform(Age) #fit_transform一步完成调取结果
imp_median imp_median.fit_transform(Age)
imp_0 imp_0.fit_transform(Age)#在这里我们使用中位数填补Age
data.loc[:,Age] imp_median
data.info()也可以一步完成
data.loc[:,Age] SimpleImputer().fit_transform(Age)2Embarked 这个特征只缺了2个数据可以直接删掉影响不大。但是如果面对缺失较多的文字型数据可以使用众数进行填充most_frequent
data.loc[:,Embarked] SimpleImputer(strategy most_frequent).fit_transform(Embarked)补pandas填充更方便
data.loc[:,Age] data.loc[:,Age].fillna(data.loc[:,Age].median())处理分类型特征 在机器学习中大多数算法譬如逻辑回归支持向量机SVMk近邻算法等都只能够处理数值型数据不能处理文字在sklearn当中除了专用来处理文字的算法其他算法在fit的时候全部要求输入数组或矩阵也不能够导入文字型数据其实手写决策树和普斯贝叶斯可以处理文字但是sklearn中规定必须导入数值型。 将文字型数据转换为数值型 标签数据[Yes,No,Unkown][0,1,2] LabelEncoder类专门处理标签可以输入一维向量特征类的必须是二维及以上。
from sklearn.preprocessing import LabelEncoder
y data.iloc[:,-1] #要输入的是标签不是特征矩阵所以允许一维le LabelEncoder() #实例化
le le.fit(y) #导入数据
label le.transform(y) #transform接口调取结果label就是我们处理后的数据 可以通过classes_看原有的类别 也和其他的一样可以一步到位或者逆转
data.iloc[:,-1] label #让标签等于我们运行出来的结果
data.head()一步到位
from sklearn.preprocessing import LabelEncoder
data.iloc[:,-1] LabelEncoder().fit_transform(data.iloc[:,-1])SexEmbarked特征变量处理OrdinalEncoder类
from sklearn.preprocessing import OrdinalEncoder
#接口categories_对应LabelEncoder的接口classes_一模一样的功能
data_ data.copy()
data_.head()OrdinalEncoder().fit(data_.iloc[:,1:-1]).categories_data_.iloc[:,1:-1] OrdinalEncoder().fit_transform(data_.iloc[:,1:-1])
data_.head()【这样做不太对原本毫无关联的文字型变量现在变成有数学含义的数字型赋予了大小等其他数学含义】
直接pass掉OrdinalEncoder类处理特征数据采用OneHotEncoder独热编码 由原本的一列变成变成多列列数为类别数。
from sklearn.preprocessing import OneHotEncoder
X data.iloc[:,1:-1]
enc OneHotEncoder(categoriesauto).fit(X)
result enc.transform(X).toarray()
result可以查看每一列的含义
enc.get_feature_names_out()也可以还原到原来的两列 然后需要做的就是给原数据拼接上面的数据删除独热编码之前的类重命名索引名
#axis1,表示跨行进行合并也就是将量表左右相连如果是axis0就是将量表上下相连
newdata pd.concat([data,pd.DataFrame(result)],axis1)newdata.drop([Sex,Embarked],axis1,inplaceTrue)
newdata.columns [Age,Survived,Female,Male,Embarked_C,Embarked_Q,Embarked_S]总结 处理连续型特征
二值化 根据阈值将数据二值化将特征值设置为0或1用于处理连续型变量。大于阈值的值映射为1而小于或等于阈值的值映射为0。默认阈值为0时特征中所有的正值都映射到1。
from sklearn.preprocessing import Binarizer
X data_2.iloc[:,0].values.reshape(-1,1) #类为特征专用所以不能使用一维数组
transformer Binarizer(threshold30).fit_transform(X)
transformerdata_2.iloc[:,0] transformer分段KBinsDiscretizer 这是将连续型变量划分为分类变量的类能够将连续型变量排序后按顺序分箱后编码。总共包含三个重要参数
参数含义输入n_bins每个特征中分箱的个数默认5一次会被运用到所有导入的特征encode编码的方式默认“onehot” “onehot”做哑变量之后返回一个稀疏矩阵每一列是一个特征中的一个类别含有该类别的样本表示为1不含的表示为0 “ordinal”每个特征的每个箱都被编码为一个整数返回每一列是一个特征每个特征下含有不同整数编码的箱的矩阵“onehot-dense”做哑变量之后返回一个密集数组。strategy用来定义箱宽的方式默认quantile “uniform”表示等宽分箱即每个特征中的每个箱的最大值之间的差为(特征.max() - 特征.min())/(n_bins) “quantile”表示等位分箱即每个特征中的每个箱内的样本数量都相同“kmeans”表示按聚类分箱每个箱中的值到最近的一维k均值聚类的簇心得距离都相同
from sklearn.preprocessing import KBinsDiscretizer
X data.iloc[:,0].values.reshape(-1,1)est KBinsDiscretizer(n_bins3, encodeordinal, strategyuniform, subsampleNone)
est.fit_transform(X)采用独热编码分成多列
est KBinsDiscretizer(n_bins3, encodeonehot, strategyuniform, subsampleNone)
#查看转换后分的箱变成了哑变量
est.fit_transform(X).toarray()