📜  Python – 从数据集中删除常量特征

📅  最后修改于: 2022-05-13 01:55:49.295000             🧑  作者: Mango

Python – 从数据集中删除常量特征

数据集中包含常量值(即所有输出或目标值只有一个值)的那些特征称为常量特征。这些功能不向目标功能提供任何信息。这些是数据集中可用的冗余数据。此特征的存在对目标没有影响,因此最好从数据集中删除这些特征。这种删除冗余特征并仅保留数据集中必要特征的过程属于特征选择方法的过滤方法。

现在让我们看看如何在Python中删除常量特征。

考虑文章的自创数据集:

PortalArticle’s_categoryViews
GeeksforGeeksPython545
GeeksforGeeksData Science1505
GeeksforGeeksData Science1157
GeeksforGeeksData Science2541
GeeksforGeeksMathematics5726
GeeksforGeeksPython3125
GeeksforGeeksData Science3131
GeeksforGeeksMathematics6525
GeeksforGeeksMathematics15000

代码:创建上述数据的DataFrame

# Import pandas to create DataFrame
import pandas as pd
  
# Make DataFrame of the given data
data = pd.DataFrame({"Portal":['GeeksforGeeks', 'GeeksforGeeks', 'GeeksforGeeks', 'GeeksforGeeks', 'GeeksforGeeks', 
                               'GeeksforGeeks', 'GeeksforGeeks', 'GeeksforGeeks', 'GeeksforGeeks'],
                    "Article's_category":['Python', 'Data Science', 'Data Science', 'Data Science', 'Mathematics', 
                                          'Python', 'Data Science', 'Mathematics', 'Mathematics'],
                    "Views":[545, 1505, 1157, 2541, 5726, 3125, 3131, 6525, 15000]})

代码:将分类数据转换为数值数据

# import ordinal encoder from sklearn
from sklearn.preprocessing import OrdinalEncoder
ord_enc = OrdinalEncoder()
  
# Transform the data
data[["Portal","Article's_category"]] = ord_enc.fit_transform(data[["Portal","Article's_category"]])

代码:将数据拟合到 VarianceThreshold。

# import VarianceThreshold
from sklearn.feature_selection import VarianceThreshold
var_threshold = VarianceThreshold(threshold=0)   # threshold = 0 for constant
  
# fit the data
var_threshold.fit(data)
  
# We can check the variance of different features as
print(var_threshold.variances_)

输出:不同特征的差异:

[0.00000000e+00 6.17283951e-01 1.76746269e+07]

代码:转换数据

print(var_threshold.transform(data))
print('*' * 10,"Separator",'*' * 10)
  
# shapes of data before transformed and after transformed
print("Earlier shape of data: ", data.shape)
print("Shape after transformation: ", var_threshold.transform(data).shape)

输出:

[[2.000e+00 5.450e+02]
 [0.000e+00 1.505e+03]
 [0.000e+00 1.157e+03]
 [0.000e+00 2.541e+03]
 [1.000e+00 5.726e+03]
 [2.000e+00 3.125e+03]
 [0.000e+00 3.131e+03]
 [1.000e+00 6.525e+03]
 [1.000e+00 1.500e+04]]
********** Separator **********
Earlier shape of data:  (9, 3)
Shape after transformation:  (9, 2)

正如您之前所观察到的,我们有 9 个观察值和 3 个特征。
转换后,我们有 9 个观察值和 2 个特征。我们可以清楚地观察到删除的功能是“门户”。