我试图通过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)
答案 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()
来说,这似乎不适合该问题,因为我从简短的阅读中得到的印象是,它是用于减少稀疏矩阵。如果我第二次误读了您的问题,请再次道歉。