数据处理
数据挖掘OneHotEncoder独热编码和LabelEncoder标签编码
使用sklearn生成样本
- n_samples:待生成样本的总数
- n_features:每个样本的特征数
- centers:(聚类)表示类别数
- cluster_std:(聚类)每个类别的方差,我们希望生成2类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0,3.0]
- n_informative:多信息特征的个数
- n_redundant:冗余信息,informative特征的随机线性组合
- n_repeated:重复信息,随机提取n_informative和n_redundant 特征
- n_classes:分类类别
- n_clusters_per_class:某一个类别是由几个cluster构成的
- random_state:随机因子
数据预处理
数据归一化和标准化
- 标准化:执行一个标准(如厘米,米不同单位,都按照米),将数据缩放到均值为0,方差为1,而不改变数据的几何距离,分布
- 使得不同度量之间的特征具有可比性
- 不改变原始数据的分布
- 归一化:对不同特征维度的伸缩变换的目的是使各个特征维度对目标函数的影响权重是一致的
- 提高迭代求解的收敛速度(扁平–>类圆形)
- 会改变数据的原始距离,分布,信息
- sklearn:
- 缩放到均值为0,方差为1(Standardization——StandardScaler()) 常说的z-score归一化
- 缩放到0和1之间(Standardization——MinMaxScaler()) min-max归一化
- 缩放到-1和1之间(Standardization——MaxAbsScaler())
- 缩放到0和1之间,保留原始数据的分布(Normalization——Normalizer())
独热编码和归一化
- 独热编码:
- 用:离散数据
- 不用:类别太多,树模型(增加树的深度)
- 归一化:
- 用: 基于参数的模型或基于距离的模型,都是要进行特征的归一化
- 不用: 基于树的方法是不需要进行特征的归一化,例如随机森林,bagging 和 boosting等
缺失值的处理
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
dataset = pd.read_csv('./data/1.csv')
columns = ['Age','Salary']
imputer = SimpleImputer(missing_values=np.nan,strategy="mean")
datasetna = imputer.fit_transform(dataset[columns].values)
dataset[columns] = datasetna
dataset
查看缺失值
#missing data
total = df_train.isnull().sum().sort_values(ascending=False)
percent = (df_train.isnull().sum()/df_train.isnull().count()).sort_values(ascending=False)
missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
missing_data.head(20)