【发布时间】:2021-03-11 21:29:27
【问题描述】:
我有一个干净的住房数据集,其中包含大约 75 个总特征和 1 个目标变量。 为了使用 lasso 回归来选择 75 个特征中最相关的,我只能对分类特征使用标签编码,因为它保留了列标识,如下所示:
# Label Encoding all other categorical features:
for x in categorical_features:
labels_ordered=house_df.groupby([x])['SalePrice'].mean().sort_values().index # SalePrice is target variable
labels_ordered={k:i for i,k in enumerate(labels_ordered,0)}
house_df[x]=house_df[x].map(labels_ordered)
# After splitting into train/test and fitting the lasso
feature_sel_model = SelectFromModel(Lasso(alpha=0.005, random_state=0))
feature_sel_model.fit(X_train, y_train)
# Checking the array of selected and rejected features
feature_sel_model.get_support()
O/P: array([ True, True, False, False, False, False, False, False, False,
False, True, False, False, False, False, True, True, False,
True, False, False, False, False, False, False, False, False,
True, True, False, True, False, True, False, False, False,
True, False, True, True, False, True, False, False, True,
False, False, False, False, False, False, True, False, False,
True, False, False, False, True, True, True, False, False,
True, False, False, False, False, False, False, False, False,
False, False, True])
# Making a list of the selected features
selected_feat = X_train.columns[(feature_sel_model.get_support())]
# let's print some stats
print('total features: {}'.format((X_train.shape[1])))
print('selected features: {}'.format(len(selected_feat)))
O/P: total features: 75
selected features: 22
需要列标识才能使用lasso回归的输出并从原始数据集中去除不相关的特征。
我的问题是分类特征有多个标签而不是序数,所以使用 sklearn 的 OneHotEncoding 实际上是最好的编码方法,但会创建一个复杂的矩阵,破坏列标识。如何使用 OHE 的输出(这是一个 np.array,所有编码变量都被带到矩阵的左侧)来馈送到套索回归器?还是我应该坚持标签编码?
【问题讨论】:
标签: python regression data-science one-hot-encoding lasso-regression