文章目录

  • 介绍
  • 实例
  • 用途
  • 拓展
  • 正态分布拟合
  • 随机森林


介绍

pandas.get_dummies(
		          data,
				prefix=None, 
				prefix_sep='_', 
				dummy_na=False, 
				columns=None, 
			  sparse=False, 
				drop_first=False)

实例

data = pd.DataFrame({"cls1":['a','b','c'],
                    "cls2":["男","女","女"],})
data

clas1

cls2_男

cls2_2_女

a

1

0

b

0

1

c

0

1

用途

在数据预处理的过程中我们经常遇到一些问题,比如说,多个离散型的数据在进行分析的过程,我们需要把离散型的数据变成一个具体的数据方便我们进行处理,很容易想到的就是整数,如果是两个对立事件我们可以很轻松的用0和1 来进行表示,这样的思考过程有利于我们的接下来的过程,当然很多机器学习学者很喜欢的独热编码也是一个道理,简单来说就是离散化数据的特征工程。

拓展

当我们遇到一些差异性较为明显(人工操作一眼便能看出来的离散化数据) 我们就可以直接采用该方法进行探索,当然,在使用这种方法之前,如果数据中有大量的缺失值,我的建议是采用正态分布拟合的方法进行填补缺失值

正态分布拟合

正态分布基础和代码(可以直接调用!!!)

随机森林

随机森林代码

X_missing = pd.DataFrame(X_missing, columns=boston.feature_names)
#%%
X_missing.head(3)
#%% md
我们首先需要对每个特征进行排序,依照含有的缺失值数量。关键要看谁有最少的缺失值
#%%
X_missing_reg = X_missing.copy()
#%%
X_missing_reg.isnull().sum(axis=0) # 这样可以得到每一列的缺失值的数量
#%%
np.argsort(X_missing_reg.isnull().sum(axis=0)).values # 得到从小到大排序顺序所对应的索引
#%%
sort_index = np.argsort(X_missing_reg.isnull().sum(axis=0)).values
#%% md
也就是说: 缺失值数量最小的特征的index是6,缺失值数量第二小的特征的index是12....

有了这个顺序,我们下面就可以依次去做循环,填补每一列的缺失值
#%% md
现在,我们将基于 X_missing_reg 这个dataframe来进行操作。

最终会使得 X_missing_reg 这个的每一列都是经过随机森林填补的。

for i in sort_index:
    
    # 构建新特征矩阵和新标签
    df = X_missing_reg
    fillc = df.iloc[:,i] #即将被填充的特征,视为新目标变量
    df = pd.concat([df.iloc[:, :i], df.iloc[:, i+1:], pd.DataFrame(y_full)], axis=1) #把新目标变量剔除,然后把原始标签进新特征矩阵
    
    # 在新特征矩阵中,对含有缺失值的列,用0进行填补。得到最终版特征矩阵
    df_0 = SimpleImputer(missing_values=np.nan, strategy="constant", fill_value=0).fit_transform(df)
    
    # 找出能够用来训练的资料 以及 将要进行填补的资料
    ytrain = fillc[fillc.notnull()]
    ytest = fillc[fillc.isnull()]
    Xtrain = df_0[ytrain.index, :]
    Xtest = df_0[ytest.index, :]
    
    # 随机森林训练以及预测
    rfr = RandomForestRegressor(n_estimators=1000)
    rfr = rfr.fit(Xtrain, ytrain)
    ypredict = rfr.predict(Xtest)
    
    # 将填补结果放回数据集
    X_missing_reg.iloc[X_missing_reg.iloc[:,i].isnull(),i] = ypredict