文章目录
- 介绍
- 实例
- 用途
- 拓展
- 正态分布拟合
- 随机森林
介绍
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