赞
踩
常见的数值特征处理方式:标准化,有很多种方法网上很多,可以自己去查,常见的有极差标准化法、Z-score标准化法等
经过标准化处理的数值特征,在模型训练时能够更快地收敛最佳值,加快模型的训练速度
对于字符型的特征,我们并不能将其直接传输网络模型中进行训练,需要对其进行编码成数值
常用两种编码方式:
1)标签的分类编码
from sklearn.preprocessing import LabelEncoder
#一步到位的写法
data.loc[:,-1] = LabelEncoder().fit_transform(data.loc[:,-1])
# 分部写法
y = data.iloc[:,-1]
le = LabelEncoder()
le = le.fit(y)
label = le.transform(y)
#查看标签中共有多少类别
le.classes_
2)特征的分类编码
from sklearn.preprocessing import OrdinalEncoder
# 将数据备份一下
data_ = data
#一步到位的写法
data_.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data_.loc[:,-1,1])
#分部写法
oe = OrdinalEncoder()
oe = oe.fit(data.iloc[:,1:-1])
data_.iloc[:,1,-1] = oe.transform(data.iloc[:,1,-1])
#查看一共分类的种数
oe.categories_
特点:
使用pandas的get_dummies函数也可以进行独热编码,而且默认对所有字符串类型的列进行独热编码。
import pandas as pd
pd.get_dummies(x)
使用sklearn.preprocessing.OneHotEncoder可以对特征进行独热编码。
from sklearn.preprocessing import OneHotEncoder
x = data.iloc[:,1:-1]
#一步到位完成独热编码
OneHotEncoder(categories = 'auto').fit_transform(x).toarray()
#分部进行
enc = OneHotEncoder(categories = 'auto').fit(x)
result = enc.transform(x).toarray()
#编码还原
pd.Dataframe(enc.inverse_transform(result))
#查看哑变量的每列是什么特征的什么取值
enc.get_feature_names()
参考:https://blog.csdn.net/Tyro_java/article/details/81396000
# 计算在store_items中NaN值的个数
x = store_items.isnull().sum().sum()
# 输出
print('在我们DataFrame中NaN的数量:', x)
1)删除所在行或列
如果 axis = 0,.dropna(axis) 方法将删除包含 NaN 值的任何行
如果 axis = 1,.dropna(axis) 方法将删除包含 NaN 值的任何列
store_items.dropna(axis = 0)
原始 DataFrame 不会改变。你始终可以在 dropna() 方法中将关键字 inplace 设为 True,在原地删除目标行或列。
2)填充NaN值
我们可以使用**fillna()**方法将NaN值替换为DataFrame中的上个值,称之为前向填充
.fillna(method = ‘ffill’, axis) 将通过前向填充方法沿着给定axis使用上个已知值替换NaN值
store_items.fillna(method = ‘ffill’, axis = 0)
同理,也可以使用后向填充:
# 向后填充列,即为NaN的列值,用其列中的后一个来填充
store_items.fillna(method = 'backfill', axis = 0)
补充:假如是对于数值特征的NaN处理,常见思路是通过Z-score标准化法处理数值特征,此时其均值即为0,最后通过将NaN值替换为0:
# 将所有缺失的值替换为相应特征的平均值。通过将特征重新缩放到零均值和单位方差来标准化数据
# 若无法获得测试数据,则可根据训练数据计算均值和标准差
numeric_features = all_features.dtypes[all_features.dtypes != 'object'].index # 数值特征
all_features[numeric_features] = all_features[numeric_features].apply(
lambda x: (x - x.mean()) / (x.std())) # 数值标准化
# 在标准化数据之后,所有均值消失,因此我们可以将缺失值设置为0
all_features[numeric_features] = all_features[numeric_features].fillna(0)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。