我正在尝试减少数据集的列数

时间:2019-06-24 13:47:22

标签: python data-science size-reduction

我试图通过shape(20000,8000)减少向量X的列数,但是却减少了数据集的行数,使其成为新的数据集X_5000,其形状为(5000,8000)。请让我知道我在哪里犯错。 当前我有-X-形状的向量(20000,8000) 必需-X_5000-形状的向量(5000,8000) 我正在使用决策树模型,并使用feature_importance减少了。功能。

clf = DecisionTreeClassifier()

clf.fit(X, y)

class_prob_sorted = (-clf.feature_importances_).argsort()              

top_5000_index= class_prob_sorted[:5000]    


X_5000=X.tocsr()[top_5000_index]

实际上我得到了-print(X_5000.shape)-(5000,8000)

预期-打印(X_5000.shape)-(20000,5000)

1 个答案:

答案 0 :(得分:0)

对不起,如果我误解了您的问题,但我仍然感到困惑。您正在将模型拟合为初始X,使用clf.feature_importances_(这是一维数组,因此是错误消息)找到最重要的特征,然后尝试将X简化为仅这些特征?如果是这样:

clf.fit(X, y)

#map indices of columns to most important features - argsort loses order
important = clf.important_features_
important_dict = dict( zip( [i for i in range( len( important ))], important ))

#sort the dict in reverse order to get list of indices of the most important columns
top_5000_index = sorted( important_dict, key=important_dict.get, reverse=True )[0:5000]

#add the rows to a new X 
reduced_X = []
reduced_y = []
for i in top_5000_index:
    reduced_X.append( X[:,i] )
    reduced_y.append( y[i] ) #if you need the labels for later

reduced_X = np.array( reduced_X )
reduced_y = np.array( reduced_y )

然后唯一的问题是为什么要有5000个功能?也许您应该设置重要性的阈值,并获取高于此阈值的功能。

对于X.tocsr()来说,这似乎不适合该问题,因为我从简短的阅读中得到的印象是,它是用于减少稀疏矩阵。如果我第二次误读了您的问题,请再次道歉。